fix: dashboard https's password can't update

This commit is contained in:
Zhongwen Deng 2022-04-27 23:17:02 +08:00
parent 5c08c4ff4e
commit 2eab3f1cdb
2 changed files with 58 additions and 35 deletions

View File

@ -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}}.

View File

@ -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;