Jelajahi Sumber

fix: dashboard https's password can't update

Zhongwen Deng 3 tahun lalu
induk
melakukan
2eab3f1cdb

+ 32 - 12
apps/emqx_dashboard/src/emqx_dashboard_config.erl

@@ -63,22 +63,42 @@ remove_handler() ->
     ok.
     ok.
 
 
 pre_config_update(_Path, UpdateConf0, RawConf) ->
 pre_config_update(_Path, UpdateConf0, RawConf) ->
-    UpdateConf =
-        case UpdateConf0 of
-            #{<<"default_password">> := <<"******">>} ->
-                maps:remove(<<"default_password">>, UpdateConf0);
-            _ ->
-                UpdateConf0
-        end,
+    UpdateConf = remove_sensitive_data(UpdateConf0),
     NewConf = emqx_map_lib:deep_merge(RawConf, UpdateConf),
     NewConf = emqx_map_lib:deep_merge(RawConf, UpdateConf),
     {ok, NewConf}.
     {ok, NewConf}.
 
 
+-define(SENSITIVE_PASSWORD, <<"******">>).
+
+remove_sensitive_data(Conf0) ->
+    Conf1 =
+        case Conf0 of
+            #{<<"default_password">> := ?SENSITIVE_PASSWORD} ->
+                maps:remove(<<"default_password">>, Conf0);
+            _ ->
+                Conf0
+        end,
+    case Conf1 of
+        #{<<"listeners">> := #{<<"https">> := #{<<"password">> := ?SENSITIVE_PASSWORD}}} ->
+            emqx_map_lib:deep_remove([<<"listeners">>, <<"https">>, <<"password">>], Conf1);
+        _ ->
+            Conf1
+    end.
+
 post_config_update(_, _Req, NewConf, OldConf, _AppEnvs) ->
 post_config_update(_, _Req, NewConf, OldConf, _AppEnvs) ->
-    #{listeners := NewListeners} = NewConf,
-    #{listeners := OldListeners} = OldConf,
+    #{listeners := #{http := NewHttp, https := NewHttps}} = NewConf,
+    #{listeners := #{http := OldHttp, https := OldHttps}} = OldConf,
     _ =
     _ =
-        case NewListeners =:= OldListeners of
-            true -> ok;
-            false -> erlang:send_after(500, ?MODULE, {update_listeners, OldListeners, NewListeners})
+        case diff_listeners(OldHttp, NewHttp, OldHttps, NewHttps) of
+            identical -> ok;
+            {Stop, Start} -> erlang:send_after(500, ?MODULE, {update_listeners, Stop, Start})
         end,
         end,
     ok.
     ok.
+
+diff_listeners(Http, Http, Https, Https) ->
+    identical;
+diff_listeners(OldHttp, NewHttp, Https, Https) ->
+    {#{http => OldHttp}, #{http => NewHttp}};
+diff_listeners(Http, Http, OldHttps, NewHttps) ->
+    {#{https => OldHttps}, #{https => NewHttps}};
+diff_listeners(OldHttp, NewHttp, OldHttps, NewHttps) ->
+    {#{http => OldHttp, https => OldHttps}, #{http => NewHttp, https => NewHttps}}.

+ 26 - 23
apps/emqx_dashboard/src/emqx_dashboard_schema.erl

@@ -77,26 +77,14 @@ fields("listeners") ->
     ];
     ];
 fields("http") ->
 fields("http") ->
     [
     [
-        {"enable",
-            sc(
-                boolean(),
-                #{
-                    default => true,
-                    desc => ?DESC(listener_enable)
-                }
-            )}
+        enable(true),
+        bind(18803)
         | common_listener_fields()
         | common_listener_fields()
     ];
     ];
 fields("https") ->
 fields("https") ->
     [
     [
-        {"enable",
-            sc(
-                boolean(),
-                #{
-                    default => false,
-                    desc => ?DESC(listener_enable)
-                }
-            )}
+        enable(false),
+        bind(18804)
         | common_listener_fields() ++
         | common_listener_fields() ++
             exclude_fields(
             exclude_fields(
                 ["enable", "fail_if_no_peer_cert"],
                 ["enable", "fail_if_no_peer_cert"],
@@ -115,7 +103,6 @@ exclude_fields([FieldName | Rest], Fields) ->
 
 
 common_listener_fields() ->
 common_listener_fields() ->
     [
     [
-        {"bind", fun bind/1},
         {"num_acceptors",
         {"num_acceptors",
             sc(
             sc(
                 integer(),
                 integer(),
@@ -166,6 +153,28 @@ common_listener_fields() ->
             )}
             )}
     ].
     ].
 
 
+enable(Bool) ->
+    {"enable",
+        sc(
+            boolean(),
+            #{
+                default => Bool,
+                required => true,
+                desc => ?DESC(listener_enable)
+            }
+        )}.
+
+bind(Port) ->
+    {"bind",
+        sc(
+            hoconsc:union([non_neg_integer(), emqx_schema:ip_port()]),
+            #{
+                default => Port,
+                required => true,
+                desc => ?DESC(bind)
+            }
+        )}.
+
 desc("dashboard") ->
 desc("dashboard") ->
     ?DESC(desc_dashboard);
     ?DESC(desc_dashboard);
 desc("listeners") ->
 desc("listeners") ->
@@ -177,12 +186,6 @@ desc("https") ->
 desc(_) ->
 desc(_) ->
     undefined.
     undefined.
 
 
-bind(type) -> hoconsc:union([non_neg_integer(), emqx_schema:ip_port()]);
-bind(default) -> 18083;
-bind(required) -> true;
-bind(desc) -> ?DESC(bind);
-bind(_) -> undefined.
-
 default_username(type) -> binary();
 default_username(type) -> binary();
 default_username(default) -> "admin";
 default_username(default) -> "admin";
 default_username(required) -> true;
 default_username(required) -> true;