Skip to content

Commit 9bb5dc2

Browse files
Merge pull request #13698 from rabbitmq/loic-require-auth-api-desc-page
Add new option require_auth_for_api_desc_page to mgmt
2 parents b4fe2cc + 20188a7 commit 9bb5dc2

File tree

4 files changed

+68
-1
lines changed

4 files changed

+68
-1
lines changed

deps/rabbitmq_management/Makefile

+2-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ define PROJECT_ENV
1414
{cors_max_age, 1800},
1515
{content_security_policy, "script-src 'self' 'unsafe-eval' 'unsafe-inline'; object-src 'self'"},
1616
{max_http_body_size, 10000000},
17-
{delegate_count, 5}
17+
{delegate_count, 5},
18+
{require_auth_for_api_reference, false}
1819
]
1920
endef
2021

deps/rabbitmq_management/priv/schema/rabbitmq_management.schema

+7
Original file line numberDiff line numberDiff line change
@@ -654,3 +654,10 @@ end}.
654654
{datatype, {enum, [true, false]}},
655655
{include_default, false}
656656
]}.
657+
658+
%% Require authentication for the HTTP API reference page.
659+
660+
{mapping, "management.require_auth_for_api_reference", "rabbitmq_management.require_auth_for_api_reference", [
661+
{datatype, {enum, [true, false]}},
662+
{include_default, false}
663+
]}.

deps/rabbitmq_management/src/rabbit_mgmt_wm_static.erl

+17
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@
1111
-module(rabbit_mgmt_wm_static).
1212

1313
-include_lib("kernel/include/file.hrl").
14+
-include_lib("rabbitmq_web_dispatch/include/rabbitmq_web_dispatch_records.hrl").
1415

1516
-export([init/2]).
1617
-export([malformed_request/2]).
18+
-export([is_authorized/2]).
1719
-export([forbidden/2]).
1820
-export([content_types_provided/2]).
1921
-export([resource_exists/2]).
@@ -46,6 +48,21 @@ do_init(Req, App, Path) ->
4648
malformed_request(Req, State) ->
4749
cowboy_static:malformed_request(Req, State).
4850

51+
is_authorized(Req0=#{path := Path}, State)
52+
when Path =:= <<"/api/index.html">>; Path =:= <<"/cli/index.html">> ->
53+
case application:get_env(rabbitmq_management, require_auth_for_api_reference) of
54+
{ok, true} ->
55+
%% We temporarily use #context{} here to make authorization work,
56+
%% and discard it immediately after since we only want to check
57+
%% whether the user authenticates successfully.
58+
{Res, Req, _} = rabbit_mgmt_util:is_authorized(Req0, #context{}),
59+
{Res, Req, State};
60+
_ ->
61+
{true, Req0, State}
62+
end;
63+
is_authorized(Req, State) ->
64+
{true, Req, State}.
65+
4966
forbidden(Req, State) ->
5067
cowboy_static:forbidden(Req, State).
5168

deps/rabbitmq_management/test/config_schema_SUITE_data/rabbitmq_management.snippets

+42
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,48 @@
497497
], [rabbitmq_management]
498498
},
499499

500+
%%
501+
%% Restrictions
502+
%%
503+
504+
{restrictions_quorum_queue_replica_operations_disabled_case1,
505+
"management.restrictions.quorum_queue_replica_operations.disabled = true",
506+
[
507+
{rabbitmq_management, [
508+
{restrictions, [
509+
{quorum_queue_replica_operations, [
510+
{disabled, true}
511+
]}
512+
]}
513+
]}
514+
], [rabbitmq_management]
515+
},
516+
517+
{restrictions_operator_policy_changes_disabled_case1,
518+
"management.restrictions.operator_policy_changes.disabled = true",
519+
[
520+
{rabbitmq_management, [
521+
{restrictions, [
522+
{operator_policy_changes, [
523+
{disabled, true}
524+
]}
525+
]}
526+
]}
527+
], [rabbitmq_management]
528+
},
529+
530+
%%
531+
%% Exotic options
532+
%%
533+
534+
{auth_for_http_api_reference_case1,
535+
"management.require_auth_for_api_reference = true",
536+
[
537+
{rabbitmq_management, [
538+
{require_auth_for_api_reference, true}
539+
]}
540+
], [rabbitmq_management]
541+
},
500542

501543
%%
502544
%% Legacy listener configuration

0 commit comments

Comments
 (0)