Skip to content

Commit 4dcde30

Browse files
Configure scope_aliases also per resource_server
1 parent eadebf5 commit 4dcde30

File tree

3 files changed

+141
-2
lines changed

3 files changed

+141
-2
lines changed

deps/rabbitmq_auth_backend_oauth2/priv/schema/rabbitmq_auth_backend_oauth2.schema

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,21 @@
339339
[{datatype, string}]
340340
}.
341341

342+
{mapping,
343+
"auth_oauth2.resource_servers.$name.scope_aliases.$alias",
344+
"rabbitmq_auth_backend_oauth2.resource_servers",
345+
[{datatype, string}]}.
346+
347+
{mapping,
348+
"auth_oauth2.resource_servers.$name.scope_aliases.$index.alias",
349+
"rabbitmq_auth_backend_oauth2.resource_servers",
350+
[{datatype, string}]}.
351+
352+
{mapping,
353+
"auth_oauth2.resource_servers.$name.scope_aliases.$index.scope",
354+
"rabbitmq_auth_backend_oauth2.resource_servers",
355+
[{datatype, string}]}.
356+
342357
{mapping,
343358
"auth_oauth2.resource_servers.$name.oauth_provider_id",
344359
"rabbitmq_auth_backend_oauth2.resource_servers",

deps/rabbitmq_auth_backend_oauth2/src/rabbit_oauth2_schema.erl

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,60 @@ extract_scope_alias_mapping(Proplist) ->
7777
_ = V -> V
7878
end.
7979

80+
extract_resource_server_scope_aliases_as_list_of_props(Settings) ->
81+
KeyFun = fun extract_key_as_binary/1,
82+
ValueFun = fun extract_value/1,
83+
84+
List0 = [
85+
{
86+
Name,
87+
{Index, {list_to_atom(Attr), V}}
88+
} ||
89+
{[
90+
?AUTH_OAUTH2, ?RESOURCE_SERVERS, Name, ?SCOPE_ALIASES,
91+
Index, Attr
92+
], V
93+
} <- Settings ],
94+
Map0 = maps:groups_from_list(KeyFun, ValueFun, List0),
95+
96+
Map4 = maps:map(fun (_, L) ->
97+
Map2 = maps:map(fun (_, L2) -> extract_scope_alias_mapping(L2) end,
98+
maps:groups_from_list(KeyFun, ValueFun, L)),
99+
Map3 = maps:filter(fun (_,V) -> V =/= {} end, Map2),
100+
[{scope_aliases, maps:from_list([ V || {_, V} <- maps:to_list(Map3)])}]
101+
end, Map0),
102+
103+
Map4.
104+
105+
extract_resource_server_scope_aliases_as_map(Settings) ->
106+
KeyFun = fun extract_key_as_binary/1,
107+
ValueFun = fun extract_value/1,
108+
109+
List0 = [
110+
{
111+
Name,
112+
{
113+
list_to_binary(Alias),
114+
convert_space_separated_string_to_list_of_binaries(Scope)
115+
}
116+
} ||
117+
{[
118+
?AUTH_OAUTH2, ?RESOURCE_SERVERS, Name, ?SCOPE_ALIASES,
119+
Alias
120+
], Scope
121+
} <- Settings ],
122+
Map0 = maps:groups_from_list(KeyFun, ValueFun, List0),
123+
maps:map(fun (_, L) -> [{scope_aliases, maps:from_list(L)}] end, Map0).
124+
80125
-spec translate_resource_servers([{list(), binary()}]) -> map().
81126
translate_resource_servers(Conf) ->
82127
Settings = cuttlefish_variable:filter_by_prefix(
83128
?AUTH_OAUTH2_RESOURCE_SERVERS, Conf),
84129
Map = merge_list_of_maps([
85130
extract_resource_server_properties(Settings),
86-
extract_resource_server_preferred_username_claims(Settings)
131+
extract_resource_server_preferred_username_claims(Settings),
132+
extract_resource_server_scope_aliases_as_list_of_props(Settings),
133+
extract_resource_server_scope_aliases_as_map(Settings)
87134
]),
88135
Map0 = maps:map(fun(K,V) ->
89136
case proplists:get_value(id, V) of
@@ -96,7 +143,8 @@ translate_resource_servers(Conf) ->
96143

97144
-spec translate_oauth_providers([{list(), binary()}]) -> map().
98145
translate_oauth_providers(Conf) ->
99-
Settings = cuttlefish_variable:filter_by_prefix(?AUTH_OAUTH2_OAUTH_PROVIDERS, Conf),
146+
Settings = cuttlefish_variable:filter_by_prefix(
147+
?AUTH_OAUTH2_OAUTH_PROVIDERS, Conf),
100148

101149
merge_list_of_maps([
102150
extract_oauth_providers_properties(Settings),

deps/rabbitmq_auth_backend_oauth2/test/config_schema_SUITE_data/rabbitmq_auth_backend_oauth2.snippets

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,5 +224,81 @@
224224
}}
225225
]}
226226
], []
227+
},
228+
{scope_aliases_3,
229+
"auth_oauth2.resource_server_id = new_resource_server_id
230+
auth_oauth2.resource_servers.a.scope_aliases.admin = rabbitmq.tag:administrator
231+
auth_oauth2.resource_servers.a.scope_aliases.developer = rabbitmq.tag:management rabbitmq.read:*/*
232+
auth_oauth2.resource_servers.b.scope_aliases.admin_b = rabbitmq.tag:administrator
233+
auth_oauth2.resource_servers.b.scope_aliases.developer_b = rabbitmq.tag:management rabbitmq.read:*/*",
234+
[
235+
{rabbitmq_auth_backend_oauth2, [
236+
{resource_server_id,<<"new_resource_server_id">>},
237+
{resource_servers, #{
238+
<<"a">> => [
239+
{scope_aliases, #{
240+
<<"admin">> => [
241+
<<"rabbitmq.tag:administrator">>
242+
],
243+
<<"developer">> => [
244+
<<"rabbitmq.tag:management">>,
245+
<<"rabbitmq.read:*/*">>
246+
]
247+
}},
248+
{id, <<"a">>}
249+
],
250+
<<"b">> => [
251+
{scope_aliases, #{
252+
<<"admin_b">> => [
253+
<<"rabbitmq.tag:administrator">>
254+
],
255+
<<"developer_b">> => [
256+
<<"rabbitmq.tag:management">>,
257+
<<"rabbitmq.read:*/*">>
258+
]
259+
}},
260+
{id, <<"b">>}
261+
]
262+
}
263+
}
264+
]}
265+
], []
266+
},
267+
{scope_aliases_4,
268+
"auth_oauth2.resource_server_id = new_resource_server_id
269+
auth_oauth2.resource_servers.b.scope_aliases.1.alias = admin_b
270+
auth_oauth2.resource_servers.b.scope_aliases.1.scope = rabbitmq.tag:administrator
271+
auth_oauth2.resource_servers.a.scope_aliases.1.alias = admin
272+
auth_oauth2.resource_servers.a.scope_aliases.1.scope = rabbitmq.tag:administrator
273+
auth_oauth2.resource_servers.a.scope_aliases.2.alias = developer
274+
auth_oauth2.resource_servers.a.scope_aliases.2.scope = rabbitmq.tag:management rabbitmq.read:*/*",
275+
[
276+
{rabbitmq_auth_backend_oauth2, [
277+
{resource_server_id,<<"new_resource_server_id">>},
278+
{resource_servers, #{
279+
<<"a">> => [
280+
{scope_aliases, #{
281+
<<"admin">> => [
282+
<<"rabbitmq.tag:administrator">>
283+
],
284+
<<"developer">> => [
285+
<<"rabbitmq.tag:management">>,
286+
<<"rabbitmq.read:*/*">>
287+
]
288+
}},
289+
{id, <<"a">>}
290+
],
291+
<<"b">> => [
292+
{scope_aliases, #{
293+
<<"admin_b">> => [
294+
<<"rabbitmq.tag:administrator">>
295+
]
296+
}},
297+
{id, <<"b">>}
298+
]
299+
}
300+
}
301+
]}
302+
], []
227303
}
228304
].

0 commit comments

Comments
 (0)