Просмотр исходного кода

Merge pull request #11669 from lafirest/fix/dashboard_cli

fix(sso): refactor the `admins` CLI
lafirest 2 лет назад
Родитель
Сommit
1cd9df6461

+ 2 - 2
apps/emqx_dashboard/src/emqx_dashboard_admin.erl

@@ -212,8 +212,8 @@ add_user_(Username, Password, Role, Desc) ->
             mnesia:abort(<<"username_already_exist">>)
     end.
 
--spec remove_user(binary()) -> {ok, any()} | {error, any()}.
-remove_user(Username) when is_binary(Username) ->
+-spec remove_user(dashboard_username()) -> {ok, any()} | {error, any()}.
+remove_user(Username) ->
     Trans = fun() ->
         case lookup_user(Username) of
             [] -> mnesia:abort(<<"username_not_found">>);

+ 26 - 47
apps/emqx_dashboard/src/emqx_dashboard_cli.erl

@@ -24,9 +24,26 @@
     unload/0
 ]).
 
+-export([bin/1, print_error/1]).
+
+-if(?EMQX_RELEASE_EDITION == ee).
+-define(CLI_MOD, emqx_dashboard_sso_cli).
+-else.
+-define(CLI_MOD, ?MODULE).
+-endif.
+
 load() ->
-    emqx_ctl:register_command(admins, {?MODULE, admins}, []).
+    emqx_ctl:register_command(admins, {?CLI_MOD, admins}, []).
 
+admins(["add", Username, Password]) ->
+    admins(["add", Username, Password, ""]);
+admins(["add", Username, Password, Desc]) ->
+    case emqx_dashboard_admin:add_user(bin(Username), bin(Password), ?ROLE_DEFAULT, bin(Desc)) of
+        {ok, _} ->
+            emqx_ctl:print("ok~n");
+        {error, Reason} ->
+            print_error(Reason)
+    end;
 admins(["passwd", Username, Password]) ->
     case emqx_dashboard_admin:change_password(bin(Username), bin(Password)) of
         {ok, _} ->
@@ -41,8 +58,14 @@ admins(["del", Username]) ->
         {error, Reason} ->
             print_error(Reason)
     end;
-admins(Args) ->
-    inner_admins(Args).
+admins(_) ->
+    emqx_ctl:usage(
+        [
+            {"admins add <Username> <Password> <Description>", "Add dashboard user"},
+            {"admins passwd <Username> <Password>", "Reset dashboard user password"},
+            {"admins del <Username>", "Delete dashboard user"}
+        ]
+    ).
 
 unload() ->
     emqx_ctl:unregister_command(admins).
@@ -54,47 +77,3 @@ print_error(Reason) when is_binary(Reason) ->
 %% Maybe has more types of error, but there is only binary now. So close it for dialyzer.
 % print_error(Reason) ->
 %     emqx_ctl:print("Error: ~p~n", [Reason]).
-
--if(?EMQX_RELEASE_EDITION == ee).
-usage() ->
-    [
-        {"admins add <Username> <Password> <Role> <Description>", "Add dashboard user"},
-        {"admins passwd <Username> <Password>", "Reset dashboard user password"},
-        {"admins del <Username>", "Delete dashboard user"}
-    ].
-
-inner_admins(["add", Username, Password]) ->
-    inner_admins(["add", Username, Password, ?ROLE_SUPERUSER]);
-inner_admins(["add", Username, Password, Role]) ->
-    inner_admins(["add", Username, Password, Role, ""]);
-inner_admins(["add", Username, Password, Role, Desc]) ->
-    case emqx_dashboard_admin:add_user(bin(Username), bin(Password), bin(Role), bin(Desc)) of
-        {ok, _} ->
-            emqx_ctl:print("ok~n");
-        {error, Reason} ->
-            print_error(Reason)
-    end;
-inner_admins(_) ->
-    emqx_ctl:usage(usage()).
--else.
-
-usage() ->
-    [
-        {"admins add <Username> <Password> <Description>", "Add dashboard user"},
-        {"admins passwd <Username> <Password>", "Reset dashboard user password"},
-        {"admins del <Username>", "Delete dashboard user"}
-    ].
-
-inner_admins(["add", Username, Password]) ->
-    inner_admins(["add", Username, Password, ""]);
-inner_admins(["add", Username, Password, Desc]) ->
-    case emqx_dashboard_admin:add_user(bin(Username), bin(Password), ?ROLE_SUPERUSER, bin(Desc)) of
-        {ok, _} ->
-            emqx_ctl:print("ok~n");
-        {error, Reason} ->
-            print_error(Reason)
-    end;
-inner_admins(_) ->
-    emqx_ctl:usage(usage()).
-
--endif.

+ 60 - 0
apps/emqx_dashboard_sso/src/emqx_dashboard_sso_cli.erl

@@ -0,0 +1,60 @@
+%%--------------------------------------------------------------------
+%% Copyright (c) 2023 EMQ Technologies Co., Ltd. All Rights Reserved.
+%%--------------------------------------------------------------------
+
+-module(emqx_dashboard_sso_cli).
+
+-include_lib("emqx_dashboard/include/emqx_dashboard.hrl").
+
+-export([admins/1]).
+
+-import(emqx_dashboard_cli, [bin/1, print_error/1]).
+
+admins(["add", Username, Password]) ->
+    admins(["add", Username, Password, ""]);
+admins(["add", Username, Password, Desc]) ->
+    case emqx_dashboard_admin:add_user(bin(Username), bin(Password), ?ROLE_DEFAULT, bin(Desc)) of
+        {ok, _} ->
+            emqx_ctl:print("ok~n");
+        {error, Reason} ->
+            print_error(Reason)
+    end;
+admins(["add", Username, Password, Desc, Role]) ->
+    case emqx_dashboard_admin:add_user(bin(Username), bin(Password), bin(Role), bin(Desc)) of
+        {ok, _} ->
+            emqx_ctl:print("ok~n");
+        {error, Reason} ->
+            print_error(Reason)
+    end;
+admins(["passwd", Username, Password]) ->
+    case emqx_dashboard_admin:change_password(bin(Username), bin(Password)) of
+        {ok, _} ->
+            emqx_ctl:print("ok~n");
+        {error, Reason} ->
+            print_error(Reason)
+    end;
+admins(["del", Username]) ->
+    case emqx_dashboard_admin:remove_user(bin(Username)) of
+        {ok, _} ->
+            emqx_ctl:print("ok~n");
+        {error, Reason} ->
+            print_error(Reason)
+    end;
+admins(["del", Username, Backend]) ->
+    case emqx_dashboard_admin:remove_user(?SSO_USERNAME(atom(Backend), bin(Username))) of
+        {ok, _} ->
+            emqx_ctl:print("ok~n");
+        {error, Reason} ->
+            print_error(Reason)
+    end;
+admins(_) ->
+    emqx_ctl:usage(
+        [
+            {"admins add <Username> <Password> <Description> <Role>", "Add dashboard user"},
+            {"admins passwd <Username> <Password>", "Reset dashboard user password"},
+            {"admins del <Username> <Backend>", "Delete dashboard user"}
+        ]
+    ).
+
+atom(S) ->
+    erlang:list_to_atom(S).