Skip to content

Commit 51dfb29

Browse files
Preserve order of resource servers in config
1 parent 9e97816 commit 51dfb29

File tree

3 files changed

+41
-22
lines changed

3 files changed

+41
-22
lines changed

deps/rabbitmq_management/priv/www/js/oidc-oauth/helper.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -392,11 +392,12 @@ export function hasAnyResourceServerReady(oauth, onReadyCallback) {
392392
warnings.push(warningMessageOAuthResources(url, notCompliantResources, " not compliant"))
393393
}
394394
}
395-
oauth.declared_resource_servers_count = oauth.resource_servers.length
396-
oauth.resource_servers = oauth.resource_servers.filter((resource) =>
397-
!notReadyServers.includes(resource.oauth_provider_url) && !notCompliantServers.includes(resource.oauth_provider_url))
395+
oauth.declared_resource_servers_count = oauth.resource_servers.length;
396+
oauth.resource_servers = array.sort((a, b) => a.index - b.index);oauth.resource_servers.filter((resource) =>
397+
!notReadyServers.includes(resource.oauth_provider_url) && !notCompliantServers.includes(resource.oauth_provider_url));
398+
oauth.resource_servers.sort((a, b) => a.index - b.index);
398399

399-
onReadyCallback(oauth, warnings)
400+
onReadyCallback(oauth, warnings)
400401

401402
})
402403
}else {

deps/rabbitmq_management/src/rabbit_mgmt_schema.erl

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
]).
1616

1717
extract_key_as_binary({Name,_}) -> list_to_binary(Name).
18-
extract_value({_Name,V}) -> V.
1918

2019
-spec translate_oauth_resource_servers([{list(), binary()}]) -> map().
2120
translate_oauth_resource_servers(Conf) ->
@@ -49,14 +48,18 @@ convert_list_to_binary(V) when is_list(V) ->
4948
convert_list_to_binary(V) ->
5049
V.
5150

52-
extract_resource_server_properties(Settings) ->
53-
KeyFun = fun extract_key_as_binary/1,
54-
ValueFun = fun extract_value/1,
55-
51+
extract_resource_server_properties(Settings) ->
5652
OAuthResourceServers = [{Name, {list_to_atom(Key), convert_list_to_binary(V)}}
5753
|| {["management","oauth_resource_servers", Name, Key], V} <- Settings ],
58-
?LOG_DEBUG("OAuthResourceServers: ~p", [OAuthResourceServers]),
59-
maps:groups_from_list(KeyFun, ValueFun, OAuthResourceServers).
54+
OAuthResourceServers1 = lists:foldl(fun ({K, Value}, Acc) ->
55+
Key = list_to_binary(K),
56+
Attrs = case maps:get(Key, Acc, []) of
57+
[] -> [] ++ [{index, maps:size(Acc)+1}, Value];
58+
List -> List ++ [Value]
59+
end,
60+
maps:put(Key, Attrs, Acc) end, #{}, OAuthResourceServers),
61+
ct:log("OAuthResourceServers1: ~p", [OAuthResourceServers1]),
62+
OAuthResourceServers1.
6063

6164

6265
extract_resource_server_endpoint_params(Variable, Settings) ->

deps/rabbitmq_management/test/rabbit_mgmt_schema_SUITE.erl

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ test_with_one_resource_server(_) ->
4848
],
4949
#{
5050
<<"rabbitmq1">> := [
51+
{index, 1},
5152
{id, <<"rabbitmq1">>}
5253
]
5354
} = translate_oauth_resource_servers(Conf).
@@ -59,10 +60,12 @@ test_with_many_resource_servers(_) ->
5960
],
6061
#{
6162
<<"keycloak">> := [
63+
{index, 1},
6264
{label, <<"Keycloak">>},
6365
{id, <<"keycloak">>}
6466
],
6567
<<"uaa">> := [
68+
{index, 2},
6669
{label, <<"Uaa">>},
6770
{id, <<"uaa">>}
6871
]
@@ -71,23 +74,35 @@ test_with_many_resource_servers(_) ->
7174
test_preserve_order_when_using_many_resource_servers(_) ->
7275
Conf = [
7376
{["management","oauth_resource_servers","uaa","label"],"Uaa"},
77+
{["management","oauth_resource_servers","uaa","oauth_client_id"],"uaa-client"},
7478
{["management","oauth_resource_servers","spring","label"],"Spring"},
75-
{["management","oauth_resource_servers","keycloak","label"],"Keycloak"}
79+
{["management","oauth_resource_servers","spring","oauth_client_id"],"spring-client"},
80+
{["management","oauth_resource_servers","keycloak","label"],"Keycloak"},
81+
{["management","oauth_resource_servers","keycloak","oauth_client_id"],"keycloak-client"}
7682
],
77-
#{
78-
<<"uaa">> := [
83+
SortByIndex = fun({_, A}, {_, B}) ->
84+
proplists:get_value(index, A) =< proplists:get_value(index, B) end,
85+
86+
[
87+
{<<"uaa">>, [
88+
{index, 1},
7989
{label, <<"Uaa">>},
90+
{oauth_client_id, <<"uaa-client">>},
8091
{id, <<"uaa">>}
81-
],
82-
<<"spring">> := [
92+
]},
93+
{<<"spring">>, [
94+
{index, 2},
8395
{label, <<"Spring">>},
84-
{id, <<"spring">>}
85-
],
86-
<<"keycloak">> := [
96+
{oauth_client_id, <<"spring-client">>},
97+
{id, <<"spring">>}
98+
]},
99+
{<<"keycloak">>, [
100+
{index, 3},
87101
{label, <<"Keycloak">>},
88-
{id, <<"keycloak">>}
89-
]
90-
} = translate_oauth_resource_servers(Conf).
102+
{oauth_client_id, <<"keycloak-client">>},
103+
{id, <<"keycloak">>}
104+
]}
105+
] = lists:sort(SortByIndex, maps:to_list(translate_oauth_resource_servers(Conf))).
91106

92107
cert_filename(Conf) ->
93108
string:concat(?config(data_dir, Conf), "certs/cert.pem").

0 commit comments

Comments
 (0)