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