From 2eab3f1cdbb5347f6e93ee6c440db63dcb14c693 Mon Sep 17 00:00:00 2001 From: Zhongwen Deng Date: Wed, 27 Apr 2022 23:17:02 +0800 Subject: [PATCH] fix: dashboard https's password can't update --- .../src/emqx_dashboard_config.erl | 44 ++++++++++++----- .../src/emqx_dashboard_schema.erl | 49 ++++++++++--------- 2 files changed, 58 insertions(+), 35 deletions(-) diff --git a/apps/emqx_dashboard/src/emqx_dashboard_config.erl b/apps/emqx_dashboard/src/emqx_dashboard_config.erl index aea8304da..1061661f5 100644 --- a/apps/emqx_dashboard/src/emqx_dashboard_config.erl +++ b/apps/emqx_dashboard/src/emqx_dashboard_config.erl @@ -63,22 +63,42 @@ remove_handler() -> ok. 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), {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) -> - #{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, 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}}. diff --git a/apps/emqx_dashboard/src/emqx_dashboard_schema.erl b/apps/emqx_dashboard/src/emqx_dashboard_schema.erl index 0f4221c84..4bfc97797 100644 --- a/apps/emqx_dashboard/src/emqx_dashboard_schema.erl +++ b/apps/emqx_dashboard/src/emqx_dashboard_schema.erl @@ -77,26 +77,14 @@ fields("listeners") -> ]; fields("http") -> [ - {"enable", - sc( - boolean(), - #{ - default => true, - desc => ?DESC(listener_enable) - } - )} + enable(true), + bind(18803) | common_listener_fields() ]; fields("https") -> [ - {"enable", - sc( - boolean(), - #{ - default => false, - desc => ?DESC(listener_enable) - } - )} + enable(false), + bind(18804) | common_listener_fields() ++ exclude_fields( ["enable", "fail_if_no_peer_cert"], @@ -115,7 +103,6 @@ exclude_fields([FieldName | Rest], Fields) -> common_listener_fields() -> [ - {"bind", fun bind/1}, {"num_acceptors", sc( 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(desc_dashboard); desc("listeners") -> @@ -177,12 +186,6 @@ desc("https") -> desc(_) -> 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(default) -> "admin"; default_username(required) -> true;