fix(authn): check authenticator config existence in pre-update callback

prior to this change, the authenticator existence check was done
in the post-update callback, this causes confusion as teh list
already contains duplication.
This commit is contained in:
Zaiming (Stone) Shi 2022-05-14 12:23:05 +02:00
parent 00198abfd7
commit 522bd935ba
1 changed files with 15 additions and 6 deletions

View File

@ -71,9 +71,15 @@ pre_config_update(_, UpdateReq, OldConfig) ->
end. end.
do_pre_config_update({create_authenticator, ChainName, Config}, OldConfig) -> do_pre_config_update({create_authenticator, ChainName, Config}, OldConfig) ->
CertsDir = certs_dir(ChainName, Config), NewId = authenticator_id(Config),
NConfig = convert_certs(CertsDir, Config), case lists:filter(fun(OldConfig0) -> authenticator_id(OldConfig0) =:= NewId end, OldConfig) of
{ok, OldConfig ++ [NConfig]}; [] ->
CertsDir = certs_dir(ChainName, Config),
NConfig = convert_certs(CertsDir, Config),
{ok, OldConfig ++ [NConfig]};
[_] ->
{error, {already_exists, {authenticator, NewId}}}
end;
do_pre_config_update({delete_authenticator, _ChainName, AuthenticatorID}, OldConfig) -> do_pre_config_update({delete_authenticator, _ChainName, AuthenticatorID}, OldConfig) ->
NewConfig = lists:filter( NewConfig = lists:filter(
fun(OldConfig0) -> fun(OldConfig0) ->
@ -257,9 +263,12 @@ clear_certs(CertsDir, Config) ->
ok = emqx_tls_lib:delete_ssl_files(CertsDir, undefined, OldSSL). ok = emqx_tls_lib:delete_ssl_files(CertsDir, undefined, OldSSL).
get_authenticator_config(AuthenticatorID, AuthenticatorsConfig) -> get_authenticator_config(AuthenticatorID, AuthenticatorsConfig) ->
case [C0 || C0 <- AuthenticatorsConfig, AuthenticatorID == authenticator_id(C0)] of case
[C | _] -> C; lists:filter(fun(C) -> AuthenticatorID =:= authenticator_id(C) end, AuthenticatorsConfig)
[] -> {error, not_found} of
[C] -> C;
[] -> {error, not_found};
_ -> error({duplicated_authenticator_id, AuthenticatorsConfig})
end. end.
split_by_id(ID, AuthenticatorsConfig) -> split_by_id(ID, AuthenticatorsConfig) ->