merge from master
This commit is contained in:
commit
4fd5c4563e
|
|
@ -123,8 +123,9 @@ dispatcher() ->
|
|||
{"/vhosts/:vhost/connections", rabbit_mgmt_wm_connections_vhost, []},
|
||||
%% /channels/:channel is already taken, we cannot use our standard scheme here
|
||||
{"/vhosts/:vhost/channels", rabbit_mgmt_wm_channels_vhost, []},
|
||||
{"/users", rabbit_mgmt_wm_users, []},
|
||||
{"/users/bulk-delete", rabbit_mgmt_wm_users_bulk_delete, []},
|
||||
{"/users/without-permissions", rabbit_mgmt_wm_users, [without_permissions]},
|
||||
{"/users", rabbit_mgmt_wm_users, [all]},
|
||||
{"/users/:user", rabbit_mgmt_wm_user, []},
|
||||
{"/users/:user/permissions", rabbit_mgmt_wm_permissions_user, []},
|
||||
{"/users/:user/topic-permissions", rabbit_mgmt_wm_topic_permissions_user, []},
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ all_definitions(ReqData, Context) ->
|
|||
rabbit_mgmt_util:reply(
|
||||
[{rabbit_version, rabbit_data_coercion:to_binary(Vsn)}] ++
|
||||
filter(
|
||||
[{users, rabbit_mgmt_wm_users:users()},
|
||||
[{users, rabbit_mgmt_wm_users:users(all)},
|
||||
{vhosts, rabbit_mgmt_wm_vhosts:basic()},
|
||||
{permissions, rabbit_mgmt_wm_permissions:permissions()},
|
||||
{topic_permissions, rabbit_mgmt_wm_topic_permissions:topic_permissions()},
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
content_types_provided/2,
|
||||
is_authorized/2, allowed_methods/2]).
|
||||
-export([variances/2]).
|
||||
-export([users/0]).
|
||||
-export([users/1]).
|
||||
|
||||
-import(rabbit_misc, [pget/2]).
|
||||
|
||||
|
|
@ -31,8 +31,8 @@
|
|||
|
||||
init(_, _, _) -> {upgrade, protocol, cowboy_rest}.
|
||||
|
||||
rest_init(Req, _Config) ->
|
||||
{ok, rabbit_mgmt_cors:set_headers(Req, ?MODULE), #context{}}.
|
||||
rest_init(Req, [Mode]) ->
|
||||
{ok, rabbit_mgmt_cors:set_headers(Req, ?MODULE), {Mode, #context{}}}.
|
||||
|
||||
variances(Req, Context) ->
|
||||
{[<<"accept-encoding">>, <<"origin">>], Req, Context}.
|
||||
|
|
@ -43,16 +43,28 @@ content_types_provided(ReqData, Context) ->
|
|||
allowed_methods(ReqData, Context) ->
|
||||
{[<<"HEAD">>, <<"GET">>, <<"OPTIONS">>], ReqData, Context}.
|
||||
|
||||
to_json(ReqData, Context) ->
|
||||
rabbit_mgmt_util:reply_list(users(), ReqData, Context).
|
||||
to_json(ReqData, {Mode, Context}) ->
|
||||
rabbit_mgmt_util:reply_list(users(Mode), ReqData, Context).
|
||||
|
||||
is_authorized(ReqData, Context) ->
|
||||
rabbit_mgmt_util:is_authorized_admin(ReqData, Context).
|
||||
is_authorized(ReqData, {Mode, Context}) ->
|
||||
{Res, Req2, Context2} = rabbit_mgmt_util:is_authorized_admin(ReqData, Context),
|
||||
{Res, Req2, {Mode, Context2}}.
|
||||
|
||||
%%--------------------------------------------------------------------
|
||||
|
||||
users() ->
|
||||
users(all) ->
|
||||
[begin
|
||||
{ok, User} = rabbit_auth_backend_internal:lookup_user(pget(user, U)),
|
||||
rabbit_mgmt_format:internal_user(User)
|
||||
end || U <- rabbit_auth_backend_internal:list_users()].
|
||||
end || U <- rabbit_auth_backend_internal:list_users()];
|
||||
users(without_permissions) ->
|
||||
lists:foldl(fun(U, Acc) ->
|
||||
Username = pget(user, U),
|
||||
case rabbit_auth_backend_internal:list_user_permissions(Username) of
|
||||
[] ->
|
||||
{ok, User} = rabbit_auth_backend_internal:lookup_user(Username),
|
||||
[rabbit_mgmt_format:internal_user(User) | Acc];
|
||||
_ ->
|
||||
Acc
|
||||
end
|
||||
end, [], rabbit_auth_backend_internal:list_users()).
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@ groups() ->
|
|||
vhosts_test,
|
||||
vhosts_trace_test,
|
||||
users_test,
|
||||
without_permissions_users_test,
|
||||
users_bulk_delete_test,
|
||||
users_legacy_administrator_test,
|
||||
adding_a_user_with_password_test,
|
||||
|
|
@ -386,6 +387,25 @@ users_test(Config) ->
|
|||
http_get(Config, "/users/myuser", ?NOT_FOUND),
|
||||
passed.
|
||||
|
||||
without_permissions_users_test(Config) ->
|
||||
assert_item(#{name => <<"guest">>, tags => <<"administrator">>},
|
||||
http_get(Config, "/whoami")),
|
||||
http_put(Config, "/users/myuser", [{password_hash,
|
||||
<<"IECV6PZI/Invh0DL187KFpkO5Jc=">>},
|
||||
{tags, <<"management">>}], {group, '2xx'}),
|
||||
Perms = [{configure, <<".*">>}, {write, <<".*">>}, {read, <<".*">>}],
|
||||
http_put(Config, "/permissions/%2f/myuser", Perms, {group, '2xx'}),
|
||||
http_put(Config, "/users/myuserwithoutpermissions", [{password_hash,
|
||||
<<"IECV6PZI/Invh0DL187KFpkO5Jc=">>},
|
||||
{tags, <<"management">>}], {group, '2xx'}),
|
||||
assert_list([#{name => <<"myuserwithoutpermissions">>, tags => <<"management">>,
|
||||
hashing_algorithm => <<"rabbit_password_hashing_sha256">>,
|
||||
password_hash => <<"IECV6PZI/Invh0DL187KFpkO5Jc=">>}],
|
||||
http_get(Config, "/users/without-permissions")),
|
||||
http_delete(Config, "/users/myuser", {group, '2xx'}),
|
||||
http_delete(Config, "/users/myuserwithoutpermissions", {group, '2xx'}),
|
||||
passed.
|
||||
|
||||
users_bulk_delete_test(Config) ->
|
||||
assert_item(#{name => <<"guest">>, tags => <<"administrator">>},
|
||||
http_get(Config, "/whoami")),
|
||||
|
|
|
|||
Loading…
Reference in New Issue