diff options
| author | Ayanda-D <ayanda.dube@erlang-solutions.com> | 2020-07-14 12:45:54 +0100 |
|---|---|---|
| committer | Michael Klishin <michael@clojurewerkz.org> | 2020-09-02 04:29:00 +0300 |
| commit | fe70a07cd9b7255b8f1e181e800a4b3423504a89 (patch) | |
| tree | 23b3907d1eb6a7878c9963fc59851816b10f7b05 | |
| parent | 5a93c221082356f8865caab702adcfe1a7430e26 (diff) | |
| download | rabbitmq-server-git-fe70a07cd9b7255b8f1e181e800a4b3423504a89.tar.gz | |
Add events & include acting-user in user-limit operations
| -rw-r--r-- | src/rabbit_auth_backend_internal.erl | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/src/rabbit_auth_backend_internal.erl b/src/rabbit_auth_backend_internal.erl index 9db9a1fd5d..b0e86df668 100644 --- a/src/rabbit_auth_backend_internal.erl +++ b/src/rabbit_auth_backend_internal.erl @@ -21,7 +21,7 @@ set_topic_permissions/6, clear_topic_permissions/3, clear_topic_permissions/4, add_user_sans_validation/3, put_user/2, put_user/3]). --export([set_user_limits/2, clear_user_limits/2, is_over_connection_limit/1, +-export([set_user_limits/3, clear_user_limits/3, is_over_connection_limit/1, is_over_channel_limit/1, get_user_limits/0, get_user_limits/1]). -export([user_info_keys/0, perms_info_keys/0, @@ -768,23 +768,25 @@ preconfigure_permissions(Username, Map, ActingUser) when is_map(Map) -> Map), ok. -set_user_limits(Username, Defn) -> - Definition = rabbit_data_coercion:to_binary(Defn), - case rabbit_json:try_decode(Definition) of +set_user_limits(Username, Definition, ActingUser) when is_list(Definition); is_binary(Definition) -> + case rabbit_json:try_decode(rabbit_data_coercion:to_binary(Definition)) of {ok, Term} -> - validate_parameters_and_update_limit(Username, Term); + validate_parameters_and_update_limit(Username, Term, ActingUser); {error, Reason} -> {error_string, rabbit_misc:format( "JSON decoding error. Reason: ~ts", [Reason])} - end. + end; +set_user_limits(Username, Definition, ActingUser) when is_map(Definition) -> + validate_parameters_and_update_limit(Username, Definition, ActingUser). -validate_parameters_and_update_limit(Username, Term) -> +validate_parameters_and_update_limit(Username, Term, ActingUser) -> case flatten_errors(rabbit_parameter_validation:proplist( <<"user-limits">>, user_limit_validation(), Term)) of ok -> update_user(Username, fun(User) -> internal_user:update_limits(add, User, Term) - end); + end), + notify_limit_set(Username, ActingUser, Term); {errors, [{Reason, Arguments}]} -> {error_string, rabbit_misc:format(Reason, Arguments)} end. @@ -793,14 +795,16 @@ user_limit_validation() -> [{<<"max-connections">>, fun rabbit_parameter_validation:integer/2, optional}, {<<"max-channels">>, fun rabbit_parameter_validation:integer/2, optional}]. -clear_user_limits(Username, <<"all">>) -> +clear_user_limits(Username, <<"all">>, ActingUser) -> update_user(Username, fun(User) -> internal_user:clear_limits(User) - end); -clear_user_limits(Username, LimitType) -> + end), + notify_limit_clear(Username, ActingUser); +clear_user_limits(Username, LimitType, ActingUser) -> update_user(Username, fun(User) -> internal_user:update_limits(remove, User, LimitType) - end). + end), + notify_limit_clear(Username, ActingUser). flatten_errors(L) -> case [{F, A} || I <- lists:flatten([L]), {error, F, A} <- [I]] of @@ -1053,3 +1057,13 @@ get_user_limits(Username) -> {ok, User} -> internal_user:get_limits(User); _ -> undefined end. + +notify_limit_set(Username, ActingUser, Term) -> + rabbit_event:notify(user_limits_set, + [{name, <<"limits">>}, {user_who_performed_action, ActingUser}, + {username, Username} | maps:to_list(Term)]). + +notify_limit_clear(Username, ActingUser) -> + rabbit_event:notify(user_limits_cleared, + [{name, <<"limits">>}, {user_who_performed_action, ActingUser}, + {username, Username}]). |
