Explorar o código

fix: convert ssl certfiles for dry-run creating bridges

Shawn %!s(int64=3) %!d(string=hai) anos
pai
achega
e18c2a6de2

+ 23 - 12
apps/emqx_bridge/src/emqx_bridge.erl

@@ -343,20 +343,18 @@ recreate(Type, Name, Conf) ->
     ).
     ).
 
 
 create_dry_run(Type, Conf) ->
 create_dry_run(Type, Conf) ->
-    Conf0 = Conf#{
-        <<"egress">> =>
-            #{
-                <<"remote_topic">> => <<"t">>,
-                <<"remote_qos">> => 0,
-                <<"retain">> => true,
-                <<"payload">> => <<"val">>
-            },
-        <<"ingress">> =>
-            #{<<"remote_topic">> => <<"t">>}
-    },
+    Conf0 = fill_dry_run_conf(Conf),
     case emqx_resource:check_config(emqx_bridge:resource_type(Type), Conf0) of
     case emqx_resource:check_config(emqx_bridge:resource_type(Type), Conf0) of
         {ok, Conf1} ->
         {ok, Conf1} ->
-            emqx_resource:create_dry_run_local(emqx_bridge:resource_type(Type), Conf1);
+            TmpPath = iolist_to_binary(["bridges-create-dry-run:", emqx_misc:gen_id(8)]),
+            try emqx_connector_ssl:convert_certs(TmpPath, Conf1) of
+                {error, Reason} ->
+                    {error, Reason};
+                {ok, ConfNew} ->
+                    emqx_resource:create_dry_run_local(emqx_bridge:resource_type(Type), ConfNew)
+            after
+                emqx_connector_ssl:clear_certs(TmpPath, Conf1)
+            end;
         {error, _} = Error ->
         {error, _} = Error ->
             Error
             Error
     end.
     end.
@@ -557,6 +555,19 @@ get_basic_usage_info() ->
             InitialAcc
             InitialAcc
     end.
     end.
 
 
+fill_dry_run_conf(Conf) ->
+    Conf#{
+        <<"egress">> =>
+            #{
+                <<"remote_topic">> => <<"t">>,
+                <<"remote_qos">> => 0,
+                <<"retain">> => true,
+                <<"payload">> => <<"val">>
+            },
+        <<"ingress">> =>
+            #{<<"remote_topic">> => <<"t">>}
+    }.
+
 bin(Bin) when is_binary(Bin) -> Bin;
 bin(Bin) when is_binary(Bin) -> Bin;
 bin(Str) when is_list(Str) -> list_to_binary(Str);
 bin(Str) when is_list(Str) -> list_to_binary(Str);
 bin(Atom) when is_atom(Atom) -> atom_to_binary(Atom, utf8).
 bin(Atom) when is_atom(Atom) -> atom_to_binary(Atom, utf8).

+ 5 - 2
apps/emqx_connector/src/emqx_connector_ssl.erl

@@ -22,7 +22,7 @@
 ]).
 ]).
 
 
 convert_certs(RltvDir, NewConfig) ->
 convert_certs(RltvDir, NewConfig) ->
-    NewSSL = drop_invalid_certs(maps:get(<<"ssl">>, NewConfig, undefined)),
+    NewSSL = drop_invalid_certs(map_get_oneof([<<"ssl">>, ssl], NewConfig, undefined)),
     case emqx_tls_lib:ensure_ssl_files(RltvDir, NewSSL) of
     case emqx_tls_lib:ensure_ssl_files(RltvDir, NewSSL) of
         {ok, NewSSL1} ->
         {ok, NewSSL1} ->
             {ok, new_ssl_config(NewConfig, NewSSL1)};
             {ok, new_ssl_config(NewConfig, NewSSL1)};
@@ -35,7 +35,10 @@ clear_certs(RltvDir, Config) ->
     ok = emqx_tls_lib:delete_ssl_files(RltvDir, undefined, OldSSL).
     ok = emqx_tls_lib:delete_ssl_files(RltvDir, undefined, OldSSL).
 
 
 new_ssl_config(Config, undefined) -> Config;
 new_ssl_config(Config, undefined) -> Config;
-new_ssl_config(Config, SSL) -> Config#{<<"ssl">> => SSL}.
+new_ssl_config(Config, #{<<"enable">> := _} = SSL) ->
+    Config#{<<"ssl">> => SSL};
+new_ssl_config(Config, #{enable := _} = SSL) ->
+    Config#{ssl => SSL}.
 
 
 drop_invalid_certs(undefined) -> undefined;
 drop_invalid_certs(undefined) -> undefined;
 drop_invalid_certs(SSL) -> emqx_tls_lib:drop_invalid_certs(SSL).
 drop_invalid_certs(SSL) -> emqx_tls_lib:drop_invalid_certs(SSL).