77-module (oauth2_client ).
88-export ([get_access_token /2 , get_expiration_time /1 ,
99 refresh_access_token /2 ,
10- get_oauth_provider /1 , get_oauth_provider /2 ,
10+ get_oauth_provider /1 , get_oauth_provider /2 ,
1111 extract_ssl_options_as_list /1
1212 ]).
1313
1414-include (" oauth2_client.hrl" ).
15- -include_lib (" public_key/include/public_key.hrl" ).
16-
17- -spec get_access_token (oauth_provider_id () | oauth_provider (), access_token_request ()) ->
15+ -spec get_access_token (oauth_provider (), access_token_request ()) ->
1816 {ok , successful_access_token_response ()} | {error , unsuccessful_access_token_response () | any ()}.
19- get_access_token (OAuth2ProviderId , Request ) when is_binary (OAuth2ProviderId ) ->
20- rabbit_log :debug (" get_access_token using OAuth2ProviderId:~p and client_id:~p " ,
21- [OAuth2ProviderId , Request # access_token_request .client_id ]),
22- case get_oauth_provider (OAuth2ProviderId , [token_endpoint ]) of
23- {error , _Error } = Error0 -> Error0 ;
24- {ok , Provider } -> get_access_token (Provider , Request )
25- end ;
26-
2717get_access_token (OAuthProvider , Request ) ->
2818 rabbit_log :debug (" get_access_token using OAuthProvider:~p and client_id:~p " ,
2919 [OAuthProvider , Request # access_token_request .client_id ]),
@@ -104,14 +94,20 @@ do_update_oauth_provider_endpoints_configuration(OAuthProvider) ->
10494 case OAuthProvider # oauth_provider .token_endpoint of
10595 undefined ->
10696 do_nothing ;
107- TokenEndPoint ->
108- application :set_env (rabbitmq_auth_backend_oauth2 , token_endpoint , TokenEndPoint )
97+ TokenEndpoint ->
98+ application :set_env (rabbitmq_auth_backend_oauth2 , token_endpoint , TokenEndpoint )
10999 end ,
110100 case OAuthProvider # oauth_provider .authorization_endpoint of
111101 undefined ->
112102 do_nothing ;
113- AuthzEndPoint ->
114- application :set_env (rabbitmq_auth_backend_oauth2 , authorization_endpoint , AuthzEndPoint )
103+ AuthzEndpoint ->
104+ application :set_env (rabbitmq_auth_backend_oauth2 , authorization_endpoint , AuthzEndpoint )
105+ end ,
106+ case OAuthProvider # oauth_provider .end_session_endpoint of
107+ undefined ->
108+ do_nothing ;
109+ EndSessionEndpoint ->
110+ application :set_env (rabbitmq_auth_backend_oauth2 , end_session_endpoint , EndSessionEndpoint )
115111 end ,
116112 List = application :get_env (rabbitmq_auth_backend_oauth2 , key_config , []),
117113 ModifiedList = case OAuthProvider # oauth_provider .jwks_uri of
@@ -127,17 +123,21 @@ do_update_oauth_provider_endpoints_configuration(OAuthProviderId, OAuthProvider)
127123 LookupProviderPropList = maps :get (OAuthProviderId , OAuthProviders ),
128124 ModifiedList0 = case OAuthProvider # oauth_provider .token_endpoint of
129125 undefined -> LookupProviderPropList ;
130- TokenEndPoint -> [{token_endpoint , TokenEndPoint } | LookupProviderPropList ]
126+ TokenEndpoint -> [{token_endpoint , TokenEndpoint } | LookupProviderPropList ]
131127 end ,
132128 ModifiedList1 = case OAuthProvider # oauth_provider .authorization_endpoint of
133129 undefined -> ModifiedList0 ;
134- AuthzEndPoint -> [{authorization_endpoint , AuthzEndPoint } | ModifiedList0 ]
130+ AuthzEndpoint -> [{authorization_endpoint , AuthzEndpoint } | ModifiedList0 ]
135131 end ,
136- ModifiedList2 = case OAuthProvider # oauth_provider .jwks_uri of
132+ ModifiedList2 = case OAuthProvider # oauth_provider .end_session_endpoint of
137133 undefined -> ModifiedList1 ;
138- JwksEndPoint -> [{jwks_uri , JwksEndPoint } | ModifiedList1 ]
134+ EndSessionEndpoint -> [{end_session_endpoint , EndSessionEndpoint } | ModifiedList1 ]
135+ end ,
136+ ModifiedList3 = case OAuthProvider # oauth_provider .jwks_uri of
137+ undefined -> ModifiedList2 ;
138+ JwksEndPoint -> [{jwks_uri , JwksEndPoint } | ModifiedList2 ]
139139 end ,
140- ModifiedOAuthProviders = maps :put (OAuthProviderId , ModifiedList2 , OAuthProviders ),
140+ ModifiedOAuthProviders = maps :put (OAuthProviderId , ModifiedList3 , OAuthProviders ),
141141 application :set_env (rabbitmq_auth_backend_oauth2 , oauth_providers , ModifiedOAuthProviders ),
142142 rabbit_log :debug (" Replacing oauth_providers ~p " , [ ModifiedOAuthProviders ]),
143143 OAuthProvider .
@@ -285,11 +285,15 @@ find_missing_attributes(#oauth_provider{} = OAuthProvider, RequiredAttributes) -
285285lookup_oauth_provider_from_keyconfig () ->
286286 Issuer = application :get_env (rabbitmq_auth_backend_oauth2 , issuer , undefined ),
287287 TokenEndpoint = application :get_env (rabbitmq_auth_backend_oauth2 , token_endpoint , undefined ),
288+ AuthorizationEndpoint = application :get_env (rabbitmq_auth_backend_oauth2 , authorization_endpoint , undefined ),
289+ EndSessionEndpoint = application :get_env (rabbitmq_auth_backend_oauth2 , end_session_endpoint , undefined ),
288290 Map = maps :from_list (application :get_env (rabbitmq_auth_backend_oauth2 , key_config , [])),
289291 # oauth_provider {
290292 issuer = Issuer ,
291293 jwks_uri = maps :get (jwks_url , Map , undefined ), % % jwks_url not uri . _url is the legacy name
292294 token_endpoint = TokenEndpoint ,
295+ authorization_endpoint = AuthorizationEndpoint ,
296+ end_session_endpoint = EndSessionEndpoint ,
293297 ssl_options = extract_ssl_options_as_list (Map )
294298 }.
295299
@@ -447,6 +451,7 @@ map_to_oauth_provider(Map) when is_map(Map) ->
447451 issuer = maps :get (? RESPONSE_ISSUER , Map ),
448452 token_endpoint = maps :get (? RESPONSE_TOKEN_ENDPOINT , Map , undefined ),
449453 authorization_endpoint = maps :get (? RESPONSE_AUTHORIZATION_ENDPOINT , Map , undefined ),
454+ end_session_endpoint = maps :get (? RESPONSE_END_SESSION_ENDPOINT , Map , undefined ),
450455 jwks_uri = maps :get (? RESPONSE_JWKS_URI , Map , undefined )
451456 };
452457
@@ -455,6 +460,7 @@ map_to_oauth_provider(PropList) when is_list(PropList) ->
455460 issuer = proplists :get_value (issuer , PropList ),
456461 token_endpoint = proplists :get_value (token_endpoint , PropList ),
457462 authorization_endpoint = proplists :get_value (authorization_endpoint , PropList , undefined ),
463+ end_session_endpoint = proplists :get_value (end_session_endpoint , PropList , undefined ),
458464 jwks_uri = proplists :get_value (jwks_uri , PropList , undefined ),
459465 ssl_options = extract_ssl_options_as_list (maps :from_list (proplists :get_value (https , PropList , [])))
460466 }.
0 commit comments