@@ -305,7 +305,7 @@ ensure_oauth_provider_has_attributes(OAuthProvider, ListOfRequiredAttributes) ->
305305
306306get_root_oauth_provider (ListOfRequiredAttributes ) ->
307307 OAuthProvider = lookup_root_oauth_provider (),
308- rabbit_log : debug (" Using root oauth_provider ~p " ,
308+ ct : log (" Using root oauth_provider ~p " ,
309309 [format_oauth_provider (OAuthProvider )]),
310310 case find_missing_attributes (OAuthProvider , ListOfRequiredAttributes ) of
311311 [] ->
@@ -397,9 +397,32 @@ lookup_root_oauth_provider() ->
397397 token_endpoint = get_env (token_endpoint ),
398398 authorization_endpoint = get_env (authorization_endpoint ),
399399 end_session_endpoint = get_env (end_session_endpoint ),
400- ssl_options = extract_ssl_options_as_list (Map )
400+ ssl_options = extract_ssl_options_as_list (Map ),
401+ proxy_options = extract_proxy_options (Map )
401402 }.
402403
404+ -spec extract_proxy_options (#{atom () => any ()}|list ()) -> proxy_options ().
405+ extract_proxy_options (List ) when is_list (List ) ->
406+ case proplists :get_value (proxy , List , undefined ) of
407+ undefined -> undefined ;
408+ URL ->
409+ # proxy_options {
410+ proxy = URL ,
411+ username = proplists :get_value (proxy_username , List , undefined ),
412+ password = proplists :get_value (proxy_password , List , undefined )
413+ }
414+ end ;
415+ extract_proxy_options (Map ) ->
416+ case maps :get (proxy , Map , undefined ) of
417+ undefined -> undefined ;
418+ URL ->
419+ # proxy_options {
420+ proxy = URL ,
421+ username = maps :get (proxy_username , Map , undefined ),
422+ password = maps :get (proxy_password , Map , undefined )
423+ }
424+ end .
425+
403426-spec extract_ssl_options_as_list (#{atom () => any ()}) -> proplists :proplist ().
404427extract_ssl_options_as_list (Map ) ->
405428 {Verify , CaCerts , CaCertFile } = case get_verify_or_peer_verification (Map , verify_peer ) of
@@ -591,7 +614,9 @@ map_to_oauth_provider(PropList) when is_list(PropList) ->
591614 proplists :get_value (jwks_uri , PropList , undefined ),
592615 ssl_options =
593616 extract_ssl_options_as_list (maps :from_list (
594- proplists :get_value (https , PropList , [])))
617+ proplists :get_value (https , PropList , []))),
618+ proxy_options =
619+ extract_proxy_options (PropList )
595620 }.
596621map_to_access_token_response (Code , Reason , Headers , Body ) ->
597622 case decode_body (proplists :get_value (" content-type" , Headers , ? CONTENT_JSON ), Body ) of
@@ -629,6 +654,17 @@ format_ssl_options(TlsOptions) ->
629654 proplists :get_value (cacertfile , TlsOptions ),
630655 CaCertsCount ])).
631656
657+ -spec format_proxy_options (proxy_options ()) -> string ().
658+ format_proxy_options (undefined ) ->
659+ lists :flatten (io_lib :format (" {no proxy}" , []));
660+
661+ format_proxy_options (ProxyOptions ) ->
662+ lists :flatten (io_lib :format (" {proxy: ~p , username: ~p , " ++
663+ " password: ~p }" , [
664+ ProxyOptions # proxy_options .proxy ,
665+ ProxyOptions # proxy_options .username ,
666+ ProxyOptions # proxy_options .password ])).
667+
632668format_oauth_provider_id (root ) -> " <from keyconfig>" ;
633669format_oauth_provider_id (Id ) -> binary_to_list (Id ).
634670
@@ -637,15 +673,16 @@ format_oauth_provider(OAuthProvider) ->
637673 lists :flatten (io_lib :format (" {id: ~p , issuer: ~p , discovery_endpoint: ~p , " ++
638674 " token_endpoint: ~p , " ++
639675 " authorization_endpoint: ~p , end_session_endpoint: ~p , " ++
640- " jwks_uri: ~p , ssl_options: ~p }" , [
676+ " jwks_uri: ~p , ssl_options: ~p , proxy_options: ~p }" , [
641677 format_oauth_provider_id (OAuthProvider # oauth_provider .id ),
642678 OAuthProvider # oauth_provider .issuer ,
643679 OAuthProvider # oauth_provider .discovery_endpoint ,
644680 OAuthProvider # oauth_provider .token_endpoint ,
645681 OAuthProvider # oauth_provider .authorization_endpoint ,
646682 OAuthProvider # oauth_provider .end_session_endpoint ,
647683 OAuthProvider # oauth_provider .jwks_uri ,
648- format_ssl_options (OAuthProvider # oauth_provider .ssl_options )])).
684+ format_ssl_options (OAuthProvider # oauth_provider .ssl_options ),
685+ format_proxy_options (OAuthProvider # oauth_provider .proxy_options )])).
649686
650687get_env (Par ) ->
651688 application :get_env (rabbitmq_auth_backend_oauth2 , Par , undefined ).
0 commit comments