refactor(emqx_connector_ssl): simplify implementation

This commit is contained in:
Zaiming (Stone) Shi 2022-11-23 23:48:05 +01:00
parent 6f67e3b333
commit 67cef65fdb
1 changed files with 13 additions and 35 deletions

View File

@ -30,12 +30,12 @@
convert_certs(RltvDir, #{<<"connector">> := Connector} = Config) when convert_certs(RltvDir, #{<<"connector">> := Connector} = Config) when
is_map(Connector) is_map(Connector)
-> ->
SSL = map_get_oneof([<<"ssl">>, ssl], Connector, undefined), SSL = maps:get(<<"ssl">>, Connector, undefined),
new_ssl_config(RltvDir, Config, SSL); new_ssl_config(RltvDir, Config, SSL);
convert_certs(RltvDir, #{connector := Connector} = Config) when convert_certs(RltvDir, #{connector := Connector} = Config) when
is_map(Connector) is_map(Connector)
-> ->
SSL = map_get_oneof([<<"ssl">>, ssl], Connector, undefined), SSL = maps:get(ssl, Connector, undefined),
new_ssl_config(RltvDir, Config, SSL); new_ssl_config(RltvDir, Config, SSL);
%% for bridges without `connector` field. i.e. webhook %% for bridges without `connector` field. i.e. webhook
convert_certs(RltvDir, #{<<"ssl">> := SSL} = Config) -> convert_certs(RltvDir, #{<<"ssl">> := SSL} = Config) ->
@ -52,7 +52,10 @@ clear_certs(RltvDir, Config) ->
clear_certs2(RltvDir, #{<<"connector">> := Connector} = _Config) when clear_certs2(RltvDir, #{<<"connector">> := Connector} = _Config) when
is_map(Connector) is_map(Connector)
-> ->
OldSSL = map_get_oneof([<<"ssl">>, ssl], Connector, undefined), %% TODO remove the 'connector' clause after dev/ee5.0 is merged back to master
%% The `connector` config layer will be removed.
%% for bridges with `connector` field. i.e. `mqtt_source` and `mqtt_sink`
OldSSL = maps:get(<<"ssl">>, Connector, undefined),
ok = emqx_tls_lib:delete_ssl_files(RltvDir, undefined, OldSSL); ok = emqx_tls_lib:delete_ssl_files(RltvDir, undefined, OldSSL);
clear_certs2(RltvDir, #{<<"ssl">> := OldSSL} = _Config) -> clear_certs2(RltvDir, #{<<"ssl">> := OldSSL} = _Config) ->
ok = emqx_tls_lib:delete_ssl_files(RltvDir, undefined, OldSSL); ok = emqx_tls_lib:delete_ssl_files(RltvDir, undefined, OldSSL);
@ -66,14 +69,11 @@ try_clear_certs(RltvDir, NewConf, OldConf) ->
normalize_key_to_bin(OldConf) normalize_key_to_bin(OldConf)
). ).
try_clear_certs2(RltvDir, #{<<"connector">> := NewConnector}, #{<<"connector">> := OldConnector}) when try_clear_certs2(RltvDir, #{<<"connector">> := NewConnector}, #{<<"connector">> := OldConnector}) ->
is_map(NewConnector), try_clear_certs2(RltvDir, NewConnector, OldConnector);
is_map(OldConnector) try_clear_certs2(RltvDir, NewSSL, OldSSL) when is_map(NewSSL) andalso is_map(OldSSL) ->
-> NewSSL = maps:get(<<"ssl">>, NewSSL, undefined),
NewSSL = map_get_oneof([<<"ssl">>, ssl], NewConnector, undefined), OldSSL = maps:get(<<"ssl">>, OldSSL, undefined),
OldSSL = map_get_oneof([<<"ssl">>, ssl], OldConnector, undefined),
ok = emqx_tls_lib:delete_ssl_files(RltvDir, NewSSL, OldSSL);
try_clear_certs2(RltvDir, #{<<"ssl">> := NewSSL}, #{<<"ssl">> := OldSSL}) ->
ok = emqx_tls_lib:delete_ssl_files(RltvDir, NewSSL, OldSSL); ok = emqx_tls_lib:delete_ssl_files(RltvDir, NewSSL, OldSSL);
try_clear_certs2(RltvDir, NewConf, OldConf) -> try_clear_certs2(RltvDir, NewConf, OldConf) ->
?SLOG(debug, #{msg => "unexpected_conf", path => RltvDir, new => NewConf, OldConf => OldConf}), ?SLOG(debug, #{msg => "unexpected_conf", path => RltvDir, new => NewConf, OldConf => OldConf}),
@ -98,27 +98,5 @@ new_ssl_config(#{<<"ssl">> := _} = Config, NewSSL) ->
new_ssl_config(Config, _NewSSL) -> new_ssl_config(Config, _NewSSL) ->
Config. Config.
map_get_oneof([], _Map, Default) -> normalize_key_to_bin(Map) ->
Default; emqx_map_lib:binary_key_map(Map).
map_get_oneof([Key | Keys], Map, Default) ->
case maps:find(Key, Map) of
error ->
map_get_oneof(Keys, Map, Default);
{ok, Value} ->
Value
end.
normalize_key_to_bin(Map) when is_map(Map) ->
maps:fold(
fun
(K, V, Acc) when is_atom(K) ->
Bin = erlang:atom_to_binary(K, utf8),
Acc#{Bin => V};
(K, V, Acc) ->
Acc#{K => V}
end,
#{},
Map
);
normalize_key_to_bin(Any) ->
Any.