emqx_dashboard_admin_SUITE.erl 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. %%--------------------------------------------------------------------
  2. %% Copyright (c) 2020-2024 EMQ Technologies Co., Ltd. All Rights Reserved.
  3. %%
  4. %% Licensed under the Apache License, Version 2.0 (the "License");
  5. %% you may not use this file except in compliance with the License.
  6. %% You may obtain a copy of the License at
  7. %%
  8. %% http://www.apache.org/licenses/LICENSE-2.0
  9. %%
  10. %% Unless required by applicable law or agreed to in writing, software
  11. %% distributed under the License is distributed on an "AS IS" BASIS,
  12. %% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. %% See the License for the specific language governing permissions and
  14. %% limitations under the License.
  15. %%--------------------------------------------------------------------
  16. -module(emqx_dashboard_admin_SUITE).
  17. -compile(nowarn_export_all).
  18. -compile(export_all).
  19. -include("emqx_dashboard.hrl").
  20. -include_lib("eunit/include/eunit.hrl").
  21. all() ->
  22. emqx_common_test_helpers:all(?MODULE).
  23. init_per_suite(Config) ->
  24. emqx_mgmt_api_test_util:init_suite([emqx_conf]),
  25. Config.
  26. end_per_suite(_Config) ->
  27. emqx_mgmt_api_test_util:end_suite([emqx_conf]).
  28. end_per_testcase(_, _Config) ->
  29. All = emqx_dashboard_admin:all_users(),
  30. [emqx_dashboard_admin:remove_user(Name) || #{username := Name} <- All].
  31. t_check_user(_) ->
  32. Username = <<"admin1">>,
  33. Password = <<"public_1">>,
  34. BadUsername = <<"admin_bad">>,
  35. BadPassword = <<"public_bad">>,
  36. EmptyUsername = <<>>,
  37. EmptyPassword = <<>>,
  38. {ok, _} = emqx_dashboard_admin:add_user(Username, Password, ?ROLE_SUPERUSER, <<"desc">>),
  39. {ok, _} = emqx_dashboard_admin:check(Username, Password),
  40. {error, <<"password_error">>} = emqx_dashboard_admin:check(Username, BadPassword),
  41. {error, <<"username_not_found">>} = emqx_dashboard_admin:check(BadUsername, Password),
  42. {error, <<"username_not_found">>} = emqx_dashboard_admin:check(BadUsername, BadPassword),
  43. {error, <<"username_not_found">>} = emqx_dashboard_admin:check(EmptyUsername, Password),
  44. {error, <<"password_error">>} = emqx_dashboard_admin:check(Username, EmptyPassword),
  45. {error, <<"username_not_provided">>} = emqx_dashboard_admin:check(undefined, Password),
  46. {error, <<"password_not_provided">>} = emqx_dashboard_admin:check(Username, undefined),
  47. ok.
  48. t_add_user(_) ->
  49. AddUser = <<"add_user">>,
  50. AddPassword = <<"add_password">>,
  51. AddDescription = <<"add_description">>,
  52. BadAddUser = <<"***add_user_bad">>,
  53. %% add success. not return password
  54. {ok, NewUser} = emqx_dashboard_admin:add_user(
  55. AddUser, AddPassword, ?ROLE_SUPERUSER, AddDescription
  56. ),
  57. AddUser = maps:get(username, NewUser),
  58. AddDescription = maps:get(description, NewUser),
  59. false = maps:is_key(password, NewUser),
  60. %% add again
  61. {error, <<"username_already_exist">>} =
  62. emqx_dashboard_admin:add_user(AddUser, AddPassword, ?ROLE_SUPERUSER, AddDescription),
  63. %% add bad username
  64. BadNameError =
  65. <<"Bad Username. Only upper and lower case letters, numbers and underscores are supported">>,
  66. {error, BadNameError} = emqx_dashboard_admin:add_user(
  67. BadAddUser, AddPassword, ?ROLE_SUPERUSER, AddDescription
  68. ),
  69. ok.
  70. t_lookup_user(_) ->
  71. LookupUser = <<"lookup_user">>,
  72. LookupPassword = <<"lookup_password">>,
  73. LookupDescription = <<"lookup_description">>,
  74. BadLookupUser = <<"***lookup_user_bad">>,
  75. {ok, _} =
  76. emqx_dashboard_admin:add_user(
  77. LookupUser, LookupPassword, ?ROLE_SUPERUSER, LookupDescription
  78. ),
  79. %% lookup success. not return password
  80. [#emqx_admin{username = LookupUser, description = LookupDescription}] =
  81. emqx_dashboard_admin:lookup_user(LookupUser),
  82. [] = emqx_dashboard_admin:lookup_user(BadLookupUser),
  83. ok.
  84. t_all_users(_) ->
  85. Username = <<"admin_all">>,
  86. Password = <<"public_2">>,
  87. {ok, _} = emqx_dashboard_admin:add_user(Username, Password, ?ROLE_SUPERUSER, <<"desc">>),
  88. All = emqx_dashboard_admin:all_users(),
  89. ?assert(erlang:length(All) >= 1),
  90. ok.
  91. t_delete_user(_) ->
  92. DeleteUser = <<"delete_user">>,
  93. DeletePassword = <<"delete_password">>,
  94. DeleteDescription = <<"delete_description">>,
  95. DeleteBadUser = <<"delete_user_bad">>,
  96. {ok, _NewUser} =
  97. emqx_dashboard_admin:add_user(
  98. DeleteUser, DeletePassword, ?ROLE_SUPERUSER, DeleteDescription
  99. ),
  100. {ok, ok} = emqx_dashboard_admin:remove_user(DeleteUser),
  101. %% remove again
  102. {error, <<"username_not_found">>} = emqx_dashboard_admin:remove_user(DeleteUser),
  103. {error, <<"username_not_found">>} = emqx_dashboard_admin:remove_user(DeleteBadUser),
  104. ok.
  105. t_update_user(_) ->
  106. UpdateUser = <<"update_user">>,
  107. UpdatePassword = <<"update_password">>,
  108. UpdateDescription = <<"update_description">>,
  109. NewDesc = <<"new_description">>,
  110. BadUpdateUser = <<"update_user_bad">>,
  111. {ok, _} = emqx_dashboard_admin:add_user(
  112. UpdateUser, UpdatePassword, ?ROLE_SUPERUSER, UpdateDescription
  113. ),
  114. {ok, NewUserInfo} =
  115. emqx_dashboard_admin:update_user(UpdateUser, ?ROLE_SUPERUSER, NewDesc),
  116. UpdateUser = maps:get(username, NewUserInfo),
  117. NewDesc = maps:get(description, NewUserInfo),
  118. {error, <<"username_not_found">>} = emqx_dashboard_admin:update_user(
  119. BadUpdateUser, ?ROLE_SUPERUSER, NewDesc
  120. ),
  121. ok.
  122. t_change_password(_) ->
  123. User = <<"change_user">>,
  124. OldPassword = <<"change_password">>,
  125. Description = <<"change_description">>,
  126. NewPassword = <<"new_password">>,
  127. NewBadPassword = <<"public">>,
  128. BadChangeUser = <<"change_user_bad">>,
  129. {ok, _} = emqx_dashboard_admin:add_user(User, OldPassword, ?ROLE_SUPERUSER, Description),
  130. {ok, ok} = emqx_dashboard_admin:change_password(User, OldPassword, NewPassword),
  131. %% change pwd again
  132. {error, <<"password_error">>} =
  133. emqx_dashboard_admin:change_password(User, OldPassword, NewPassword),
  134. {error, <<"The range of password length is 8~64">>} =
  135. emqx_dashboard_admin:change_password(User, NewPassword, NewBadPassword),
  136. {error, <<"username_not_found">>} =
  137. emqx_dashboard_admin:change_password(BadChangeUser, OldPassword, NewPassword),
  138. ok.
  139. t_clean_token(_) ->
  140. Username = <<"admin_token">>,
  141. Password = <<"public_www1">>,
  142. NewPassword = <<"public_www2">>,
  143. {ok, _} = emqx_dashboard_admin:add_user(Username, Password, ?ROLE_SUPERUSER, <<"desc">>),
  144. {ok, _, Token} = emqx_dashboard_admin:sign_token(Username, Password),
  145. FakePath = erlang:list_to_binary(emqx_dashboard_swagger:relative_uri("/fake")),
  146. FakeReq = #{method => <<"GET">>, path => FakePath},
  147. {ok, Username} = emqx_dashboard_admin:verify_token(FakeReq, Token),
  148. %% change password
  149. {ok, _} = emqx_dashboard_admin:change_password(Username, Password, NewPassword),
  150. timer:sleep(5),
  151. {error, not_found} = emqx_dashboard_admin:verify_token(FakeReq, Token),
  152. %% remove user
  153. {ok, _, Token2} = emqx_dashboard_admin:sign_token(Username, NewPassword),
  154. {ok, Username} = emqx_dashboard_admin:verify_token(FakeReq, Token2),
  155. {ok, _} = emqx_dashboard_admin:remove_user(Username),
  156. timer:sleep(5),
  157. {error, not_found} = emqx_dashboard_admin:verify_token(FakeReq, Token2),
  158. ok.