Skip to content

Commit 263306e

Browse files
Add proxy_options type
1 parent 762891d commit 263306e

File tree

4 files changed

+52
-10
lines changed

4 files changed

+52
-10
lines changed

deps/oauth2_client/include/types.hrl

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@
2020
}).
2121
-type openid_configuration() :: #openid_configuration{}.
2222

23+
-record(proxy_options, {
24+
proxy :: uri_string:uri_string(),
25+
username :: option(string() | binary()),
26+
password :: option(string() | binary())
27+
}).
28+
-type proxy_options() :: #proxy_options{}.
29+
2330
-record(oauth_provider, {
2431
id :: oauth_provider_id(),
2532
issuer :: option(uri_string:uri_string()),
@@ -28,7 +35,8 @@
2835
authorization_endpoint :: option(uri_string:uri_string()),
2936
end_session_endpoint :: option(uri_string:uri_string()),
3037
jwks_uri :: option(uri_string:uri_string()),
31-
ssl_options :: option(list())
38+
ssl_options :: option(list()),
39+
proxy_options :: option(proxy_options())
3240
}).
3341

3442
-type query_list() :: [{unicode:chardata(), unicode:chardata() | true}].

deps/oauth2_client/src/oauth2_client.erl

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
-export([get_access_token/2, get_expiration_time/1,
99
refresh_access_token/2,
1010
get_oauth_provider/1, get_oauth_provider/2,
11-
get_openid_configuration/2,
11+
get_openid_configuration/3,
1212
build_openid_discovery_endpoint/3,
1313
merge_openid_configuration/2,
1414
merge_oauth_provider/2,
@@ -94,8 +94,9 @@ drop_trailing_path_separator(Path) when is_list(Path) ->
9494
end.
9595

9696
-spec get_openid_configuration(DiscoveryEndpoint :: uri_string:uri_string(),
97-
ssl:tls_option() | []) -> {ok, openid_configuration()} | {error, term()}.
98-
get_openid_configuration(DiscoverEndpoint, TLSOptions) ->
97+
ssl:tls_option() | [], proxy_options() | undefined) ->
98+
{ok, openid_configuration()} | {error, term()}.
99+
get_openid_configuration(DiscoverEndpoint, TLSOptions, _ProxyOptions) ->
99100
rabbit_log:debug("get_openid_configuration from ~p (~p)", [DiscoverEndpoint,
100101
format_ssl_options(TLSOptions)]),
101102
Options = [],
@@ -283,7 +284,8 @@ download_oauth_provider(OAuthProvider) ->
283284
undefined -> {error, {missing_oauth_provider_attributes, [issuer]}};
284285
URL ->
285286
rabbit_log:debug("Downloading oauth_provider using ~p ", [URL]),
286-
case get_openid_configuration(URL, get_ssl_options_if_any(OAuthProvider)) of
287+
case get_openid_configuration(URL, get_ssl_options_if_any(OAuthProvider),
288+
OAuthProvider#oauth_provider.proxy_options) of
287289
{ok, OpenIdConfiguration} ->
288290
{ok, update_oauth_provider_endpoints_configuration(
289291
merge_openid_configuration(OpenIdConfiguration, OAuthProvider))};
@@ -527,6 +529,7 @@ get_ssl_options_if_any(OAuthProvider) ->
527529
undefined -> [];
528530
Options -> [{ssl, Options}]
529531
end.
532+
530533
get_timeout_of_default(Timeout) ->
531534
case Timeout of
532535
undefined -> [{timeout, ?DEFAULT_HTTP_TIMEOUT}];

deps/oauth2_client/test/system_SUITE.erl

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,8 @@ get_openid_configuration(Config) ->
325325
SslOptions = [{ssl, ExpectedOAuthProvider#oauth_provider.ssl_options}],
326326
{ok, ActualOpenId} = oauth2_client:get_openid_configuration(
327327
build_openid_discovery_endpoint(build_issuer("https")),
328-
SslOptions),
328+
SslOptions,
329+
ExpectedOAuthProvider#oauth_provider.proxy_options),
329330
ExpectedOpenId = map_oauth_provider_to_openid_configuration(ExpectedOAuthProvider),
330331
assertOpenIdConfiguration(ExpectedOpenId, ActualOpenId).
331332

@@ -347,7 +348,8 @@ get_openid_configuration_returns_partial_payload(Config) ->
347348
SslOptions = [{ssl, ExpectedOAuthProvider0#oauth_provider.ssl_options}],
348349
{ok, Actual} = oauth2_client:get_openid_configuration(
349350
build_openid_discovery_endpoint(build_issuer("https")),
350-
SslOptions),
351+
SslOptions,
352+
ExpectedOAuthProvider0#oauth_provider.proxy_options),
351353
ExpectedOpenId = map_oauth_provider_to_openid_configuration(ExpectedOAuthProvider),
352354
assertOpenIdConfiguration(ExpectedOpenId, Actual).
353355

@@ -356,23 +358,26 @@ get_openid_configuration_using_path(Config) ->
356358
SslOptions = [{ssl, ExpectedOAuthProvider#oauth_provider.ssl_options}],
357359
{ok, Actual} = oauth2_client:get_openid_configuration(
358360
build_openid_discovery_endpoint(build_issuer("https", ?ISSUER_PATH)),
359-
SslOptions),
361+
SslOptions,
362+
ExpectedOAuthProvider#oauth_provider.ssl_options),
360363
ExpectedOpenId = map_oauth_provider_to_openid_configuration(ExpectedOAuthProvider),
361364
assertOpenIdConfiguration(ExpectedOpenId,Actual).
362365
get_openid_configuration_using_path_and_custom_endpoint(Config) ->
363366
ExpectedOAuthProvider = ?config(oauth_provider, Config),
364367
SslOptions = [{ssl, ExpectedOAuthProvider#oauth_provider.ssl_options}],
365368
{ok, Actual} = oauth2_client:get_openid_configuration(
366369
build_openid_discovery_endpoint(build_issuer("https", ?ISSUER_PATH),
367-
?CUSTOM_OPENID_CONFIGURATION_ENDPOINT), SslOptions),
370+
?CUSTOM_OPENID_CONFIGURATION_ENDPOINT), SslOptions,
371+
ExpectedOAuthProvider#oauth_provider.proxy_options),
368372
ExpectedOpenId = map_oauth_provider_to_openid_configuration(ExpectedOAuthProvider),
369373
assertOpenIdConfiguration(ExpectedOpenId, Actual).
370374
get_openid_configuration_using_custom_endpoint(Config) ->
371375
ExpectedOAuthProvider = ?config(oauth_provider, Config),
372376
SslOptions = [{ssl, ExpectedOAuthProvider#oauth_provider.ssl_options}],
373377
{ok, Actual} = oauth2_client:get_openid_configuration(
374378
build_openid_discovery_endpoint(build_issuer("https"),
375-
?CUSTOM_OPENID_CONFIGURATION_ENDPOINT), SslOptions),
379+
?CUSTOM_OPENID_CONFIGURATION_ENDPOINT), SslOptions,
380+
ExpectedOAuthProvider#oauth_provider.proxy_options),
376381
ExpectedOpenId = map_oauth_provider_to_openid_configuration(ExpectedOAuthProvider),
377382
assertOpenIdConfiguration(ExpectedOpenId, Actual).
378383

deps/rabbitmq_auth_backend_oauth2/test/rabbit_oauth2_provider_SUITE.erl

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ verify_provider() -> [
6565
]},
6666
{oauth_provider_with_issuer, [], [
6767
get_oauth_provider_has_jwks_uri
68+
]},
69+
{oauth_provider_with_proxy, [], [
70+
get_oauth_provider_has_proxy
6871
]}
6972
].
7073

@@ -149,6 +152,15 @@ init_per_group(with_resource_server_id, Config) ->
149152
set_env(resource_server_id, ?RABBITMQ),
150153
Config;
151154

155+
init_per_group(oauth_provider_with_proxy, Config) ->
156+
KeyConfig = get_env(key_config, []),
157+
set_env(key_config, KeyConfig ++ [
158+
{proxy, build_url_to_oauth_provider(<<"/">>)},
159+
{proxy_username, <<"user1">>},
160+
{proxy_password, <<"pwd1">>}
161+
]),
162+
Config;
163+
152164
init_per_group(with_algorithms, Config) ->
153165
KeyConfig = get_env(key_config, []),
154166
set_env(key_config, KeyConfig ++ [{algorithms, [<<"HS256">>, <<"RS256">>]}]),
@@ -190,6 +202,14 @@ init_per_group(_any, Config) ->
190202
end_per_group(with_rabbitmq_node, Config) ->
191203
rabbit_ct_helpers:run_steps(Config, rabbit_ct_broker_helpers:teardown_steps());
192204

205+
end_per_group(oauth_provider_with_proxy, Config) ->
206+
KeyConfig = get_env(key_config, []),
207+
KeyConfig0 = proplists:delete(proxy, KeyConfig),
208+
KeyConfig1 = proplists:delete(proxy_username, KeyConfig0),
209+
KeyConfig2 = proplists:delete(proxy_password, KeyConfig1),
210+
set_env(key_config, KeyConfig2),
211+
Config;
212+
193213
end_per_group(with_root_static_signing_keys, Config) ->
194214
KeyConfig = call_get_env(Config, key_config, []),
195215
call_set_env(Config, key_config, KeyConfig),
@@ -411,6 +431,12 @@ get_oauth_provider_has_jwks_uri(Config) ->
411431
ct:log("OAuthProvider: ~p", [OAuthProvider]),
412432
?assertEqual(?config(jwks_uri, Config), OAuthProvider#oauth_provider.jwks_uri).
413433

434+
get_oauth_provider_has_proxy(Config) ->
435+
{ok, OAuthProvider} = get_oauth_provider(
436+
?config(oauth_provider_id, Config), [jwks_uri]),
437+
ct:log("OAuthProvider: ~p", [OAuthProvider]),
438+
?assertEqual(?config(jwks_uri, Config), OAuthProvider#oauth_provider.jwks_uri).
439+
414440

415441
%% ---- Utility functions
416442

0 commit comments

Comments
 (0)