fix(sso): fix invalid_dynamic_call
This commit is contained in:
parent
285e529766
commit
5b00998050
|
@ -6,7 +6,17 @@
|
|||
|
||||
-include_lib("hocon/include/hoconsc.hrl").
|
||||
|
||||
-export([
|
||||
hocon_ref/1,
|
||||
login_ref/1,
|
||||
create/2,
|
||||
update/3,
|
||||
destroy/2,
|
||||
login/3
|
||||
]).
|
||||
|
||||
-export([types/0, modules/0, provider/1, backends/0]).
|
||||
|
||||
%%------------------------------------------------------------------------------
|
||||
%% Callbacks
|
||||
%%------------------------------------------------------------------------------
|
||||
|
@ -18,9 +28,10 @@
|
|||
-type state() :: #{atom() => term()}.
|
||||
-type raw_config() :: #{binary() => term()}.
|
||||
-type config() :: parsed_config() | raw_config().
|
||||
-type hocon_ref() :: ?R_REF(Module :: atom(), Name :: atom() | binary()).
|
||||
|
||||
-callback hocon_ref() -> ?R_REF(Module :: atom(), Name :: atom() | binary()).
|
||||
-callback login_ref() -> ?R_REF(Module :: atom(), Name :: atom() | binary()).
|
||||
-callback hocon_ref() -> hocon_ref().
|
||||
-callback login_ref() -> hocon_ref().
|
||||
-callback create(Config :: config()) ->
|
||||
{ok, State :: state()} | {error, Reason :: term()}.
|
||||
-callback update(Config :: config(), State :: state()) ->
|
||||
|
@ -29,6 +40,29 @@
|
|||
-callback login(request(), State :: state()) ->
|
||||
{ok, Token :: binary()} | {error, Reason :: term()}.
|
||||
|
||||
%%------------------------------------------------------------------------------
|
||||
%% Callback Interface
|
||||
%%------------------------------------------------------------------------------
|
||||
-spec hocon_ref(Mod :: module()) -> hocon_ref().
|
||||
hocon_ref(Mod) ->
|
||||
Mod:hocon_ref().
|
||||
|
||||
-spec login_ref(Mod :: module()) -> hocon_ref().
|
||||
login_ref(Mod) ->
|
||||
Mod:login_ref().
|
||||
|
||||
create(Mod, Config) ->
|
||||
Mod:create(Config).
|
||||
|
||||
update(Mod, Config, State) ->
|
||||
Mod:update(Config, State).
|
||||
|
||||
destroy(Mod, State) ->
|
||||
Mod:destroy(State).
|
||||
|
||||
login(Mod, Req, State) ->
|
||||
Mod:login(Req, State).
|
||||
|
||||
%%------------------------------------------------------------------------------
|
||||
%% API
|
||||
%%------------------------------------------------------------------------------
|
||||
|
|
|
@ -36,7 +36,6 @@
|
|||
|
||||
-define(BAD_USERNAME_OR_PWD, 'BAD_USERNAME_OR_PWD').
|
||||
-define(BAD_REQUEST, 'BAD_REQUEST').
|
||||
|
||||
-define(BACKEND_NOT_FOUND, 'BACKEND_NOT_FOUND').
|
||||
-define(TAGS, <<"Dashboard Single Sign-on">>).
|
||||
|
||||
|
@ -122,7 +121,7 @@ login(post, #{bindings := #{backend := Backend}, body := Sign}) ->
|
|||
{404, ?BACKEND_NOT_FOUND, <<"Backend not found">>};
|
||||
State ->
|
||||
Provider = emqx_dashboard_sso:provider(Backend),
|
||||
case Provider:login(Sign, State) of
|
||||
case emqx_dashboard_sso:login(Provider, Sign, State) of
|
||||
{ok, Token} ->
|
||||
?SLOG(info, #{msg => "Dashboard SSO login successfully", request => Sign}),
|
||||
Version = iolist_to_binary(proplists:get_value(version, emqx_sys:info())),
|
||||
|
@ -174,10 +173,10 @@ response_schema(404) ->
|
|||
emqx_dashboard_swagger:error_codes([?BACKEND_NOT_FOUND], ?DESC(backend_not_found)).
|
||||
|
||||
backend_union() ->
|
||||
hoconsc:union([Mod:hocon_ref() || Mod <- emqx_dashboard_sso:modules()]).
|
||||
hoconsc:union([emqx_dashboard_sso:hocon_ref(Mod) || Mod <- emqx_dashboard_sso:modules()]).
|
||||
|
||||
login_union() ->
|
||||
hoconsc:union([Mod:login_ref() || Mod <- emqx_dashboard_sso:modules()]).
|
||||
hoconsc:union([emqx_dashboard_sso:login_ref(Mod) || Mod <- emqx_dashboard_sso:modules()]).
|
||||
|
||||
backend_name_in_path() ->
|
||||
backend_name_as_arg(path, [], <<"ldap">>).
|
||||
|
|
|
@ -157,7 +157,7 @@ start_backend_services() ->
|
|||
fun({Backend, Config}) ->
|
||||
Provider = provider(Backend),
|
||||
on_backend_updated(
|
||||
Provider:create(Config),
|
||||
emqx_dashboard_sso:create(Provider, Config),
|
||||
fun(State) ->
|
||||
ets:insert(dashboard_sso, #dashboard_sso{backend = Backend, state = State})
|
||||
end
|
||||
|
@ -197,14 +197,14 @@ on_config_update({update, Backend, _Config}, NewConf, _OldConf) ->
|
|||
case lookup(Backend) of
|
||||
undefined ->
|
||||
on_backend_updated(
|
||||
Provider:create(Config),
|
||||
emqx_dashboard_sso:create(Provider, Config),
|
||||
fun(State) ->
|
||||
ets:insert(dashboard_sso, #dashboard_sso{backend = Backend, state = State})
|
||||
end
|
||||
);
|
||||
Data ->
|
||||
on_backend_updated(
|
||||
Provider:update(Config, Data#dashboard_sso.state),
|
||||
emqx_dashboard_sso:update(Provider, Config, Data#dashboard_sso.state),
|
||||
fun(State) ->
|
||||
ets:insert(dashboard_sso, Data#dashboard_sso{state = State})
|
||||
end
|
||||
|
@ -217,7 +217,7 @@ on_config_update({delete, Backend}, _NewConf, _OldConf) ->
|
|||
Data ->
|
||||
Provider = provider(Backend),
|
||||
on_backend_updated(
|
||||
Provider:destroy(Data#dashboard_sso.state),
|
||||
emqx_dashboard_sso:destroy(Provider, Data#dashboard_sso.state),
|
||||
fun() ->
|
||||
ets:delete(dashboard_sso, Backend)
|
||||
end
|
||||
|
|
|
@ -29,7 +29,7 @@ roots() -> [dashboard_sso].
|
|||
fields(dashboard_sso) ->
|
||||
lists:map(
|
||||
fun({Type, Module}) ->
|
||||
{Type, mk(Module:hocon_ref(), #{required => {false, recursively}})}
|
||||
{Type, mk(emqx_dashboard_sso:hocon_ref(Module), #{required => {false, recursively}})}
|
||||
end,
|
||||
maps:to_list(emqx_dashboard_sso:backends())
|
||||
).
|
||||
|
|
Loading…
Reference in New Issue