Skip to content
This repository was archived by the owner on Nov 17, 2020. It is now read-only.

Commit 298d86f

Browse files
committed
Send a 400 error when the range age/incr values are invalid
1 parent 5ebc159 commit 298d86f

17 files changed

Lines changed: 203 additions & 52 deletions

src/rabbit_mgmt_util.erl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -756,18 +756,18 @@ range(Prefix, Round, ReqData) ->
756756
Age0 = int(Prefix ++ "_age", ReqData),
757757
Incr0 = int(Prefix ++ "_incr", ReqData),
758758
if
759-
is_integer(Age0) andalso is_integer(Incr0)
760-
andalso (Age0 > 0) andalso (Incr0 > 0)
761-
andalso ((Age0 div Incr0) =< ?MAX_RANGE) ->
759+
is_atom(Age0) orelse is_atom(Incr0) -> no_range;
760+
(Age0 > 0) andalso (Incr0 > 0) andalso ((Age0 div Incr0) =< ?MAX_RANGE) ->
762761
Age = Age0 * 1000,
763762
Incr = Incr0 * 1000,
764763
Now = time_compat:os_system_time(milli_seconds),
765764
Last = Round(Now, Incr),
766765
#range{first = (Last - Age),
767766
last = Last,
768767
incr = Incr};
769-
true ->
770-
no_range
768+
true -> throw({error, invalid_range_parameters,
769+
io_lib:format("Invalid range parameters: age ~p, incr ~p",
770+
[Age0, Incr0])})
771771
end.
772772

773773
floor(TS, Interval) -> (TS div Interval) * Interval.

src/rabbit_mgmt_wm_channel.erl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,12 @@ to_json(ReqData, Context) ->
4242
ReqData, Context).
4343

4444
is_authorized(ReqData, Context) ->
45-
rabbit_mgmt_util:is_authorized_user(ReqData, Context, channel(ReqData)).
45+
try
46+
rabbit_mgmt_util:is_authorized_user(ReqData, Context, channel(ReqData))
47+
catch
48+
{error, invalid_range_parameters, Reason} ->
49+
rabbit_mgmt_util:bad_request(iolist_to_binary(Reason), ReqData, Context)
50+
end.
4651

4752
%%--------------------------------------------------------------------
4853

src/rabbit_mgmt_wm_channels.erl

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,13 @@ content_types_provided(ReqData, Context) ->
3333
{[{"application/json", to_json}], ReqData, Context}.
3434

3535
to_json(ReqData, Context) ->
36-
rabbit_mgmt_util:reply_list_or_paginate(augmented(ReqData, Context),
37-
ReqData, Context).
36+
try
37+
rabbit_mgmt_util:reply_list_or_paginate(augmented(ReqData, Context),
38+
ReqData, Context)
39+
catch
40+
{error, invalid_range_parameters, Reason} ->
41+
rabbit_mgmt_util:bad_request(iolist_to_binary(Reason), ReqData, Context)
42+
end.
3843

3944
is_authorized(ReqData, Context) ->
4045
rabbit_mgmt_util:is_authorized(ReqData, Context).

src/rabbit_mgmt_wm_channels_vhost.erl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,12 @@ resource_exists(ReqData, Context) ->
3838
{rabbit_vhost:exists(rabbit_mgmt_util:id(vhost, ReqData)), ReqData, Context}.
3939

4040
to_json(ReqData, Context) ->
41-
rabbit_mgmt_util:reply_list(augmented(ReqData, Context), ReqData, Context).
41+
try
42+
rabbit_mgmt_util:reply_list(augmented(ReqData, Context), ReqData, Context)
43+
catch
44+
{error, invalid_range_parameters, Reason} ->
45+
rabbit_mgmt_util:bad_request(iolist_to_binary(Reason), ReqData, Context)
46+
end.
4247

4348
is_authorized(ReqData, Context) ->
4449
rabbit_mgmt_util:is_authorized_vhost(ReqData, Context).

src/rabbit_mgmt_wm_connection.erl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,12 @@ delete_resource(ReqData, Context) ->
5757
{true, ReqData, Context}.
5858

5959
is_authorized(ReqData, Context) ->
60-
rabbit_mgmt_util:is_authorized_user(ReqData, Context, conn(ReqData)).
60+
try
61+
rabbit_mgmt_util:is_authorized_user(ReqData, Context, conn(ReqData))
62+
catch
63+
{error, invalid_range_parameters, Reason} ->
64+
rabbit_mgmt_util:bad_request(iolist_to_binary(Reason), ReqData, Context)
65+
end.
6166

6267
%%--------------------------------------------------------------------
6368

src/rabbit_mgmt_wm_connection_channels.erl

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,13 @@ to_json(ReqData, Context) ->
4545
ReqData, Context).
4646

4747
is_authorized(ReqData, Context) ->
48-
rabbit_mgmt_util:is_authorized_user(
49-
ReqData, Context, rabbit_mgmt_wm_connection:conn(ReqData)).
48+
try
49+
rabbit_mgmt_util:is_authorized_user(
50+
ReqData, Context, rabbit_mgmt_wm_connection:conn(ReqData))
51+
catch
52+
{error, invalid_range_parameters, Reason} ->
53+
rabbit_mgmt_util:bad_request(iolist_to_binary(Reason), ReqData, Context)
54+
end.
5055

5156
%%--------------------------------------------------------------------
5257

src/rabbit_mgmt_wm_connections.erl

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,13 @@ content_types_provided(ReqData, Context) ->
3333
{[{"application/json", to_json}], ReqData, Context}.
3434

3535
to_json(ReqData, Context) ->
36-
rabbit_mgmt_util:reply_list_or_paginate(augmented(ReqData, Context),
37-
ReqData, Context).
36+
try
37+
rabbit_mgmt_util:reply_list_or_paginate(augmented(ReqData, Context),
38+
ReqData, Context)
39+
catch
40+
{error, invalid_range_parameters, Reason} ->
41+
rabbit_mgmt_util:bad_request(iolist_to_binary(Reason), ReqData, Context)
42+
end.
3843

3944
is_authorized(ReqData, Context) ->
4045
rabbit_mgmt_util:is_authorized(ReqData, Context).

src/rabbit_mgmt_wm_connections_vhost.erl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,12 @@ resource_exists(ReqData, Context) ->
3838
{rabbit_vhost:exists(rabbit_mgmt_util:id(vhost, ReqData)), ReqData, Context}.
3939

4040
to_json(ReqData, Context) ->
41-
rabbit_mgmt_util:reply_list(augmented(ReqData, Context), ReqData, Context).
41+
try
42+
rabbit_mgmt_util:reply_list(augmented(ReqData, Context), ReqData, Context)
43+
catch
44+
{error, invalid_range_parameters, Reason} ->
45+
rabbit_mgmt_util:bad_request(iolist_to_binary(Reason), ReqData, Context)
46+
end.
4247

4348
is_authorized(ReqData, Context) ->
4449
rabbit_mgmt_util:is_authorized_vhost(ReqData, Context).

src/rabbit_mgmt_wm_exchange.erl

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,14 @@ resource_exists(ReqData, Context) ->
4444
end, ReqData, Context}.
4545

4646
to_json(ReqData, Context) ->
47-
[X] = rabbit_mgmt_db:augment_exchanges(
48-
[exchange(ReqData)], rabbit_mgmt_util:range(ReqData), full),
49-
rabbit_mgmt_util:reply(X, ReqData, Context).
47+
try
48+
[X] = rabbit_mgmt_db:augment_exchanges(
49+
[exchange(ReqData)], rabbit_mgmt_util:range(ReqData), full),
50+
rabbit_mgmt_util:reply(X, ReqData, Context)
51+
catch
52+
{error, invalid_range_parameters, Reason} ->
53+
rabbit_mgmt_util:bad_request(iolist_to_binary(Reason), ReqData, Context)
54+
end.
5055

5156
accept_content(ReqData, Context) ->
5257
rabbit_mgmt_util:http_to_amqp(

src/rabbit_mgmt_wm_exchanges.erl

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,13 @@ resource_exists(ReqData, Context) ->
3737
end, ReqData, Context}.
3838

3939
to_json(ReqData, Context) ->
40-
rabbit_mgmt_util:reply_list_or_paginate(augmented(ReqData, Context),
41-
ReqData, Context).
40+
try
41+
rabbit_mgmt_util:reply_list_or_paginate(augmented(ReqData, Context),
42+
ReqData, Context)
43+
catch
44+
{error, invalid_range_parameters, Reason} ->
45+
rabbit_mgmt_util:bad_request(iolist_to_binary(Reason), ReqData, Context)
46+
end.
4247

4348
is_authorized(ReqData, Context) ->
4449
rabbit_mgmt_util:is_authorized_vhost(ReqData, Context).

0 commit comments

Comments
 (0)