7
7
-module (oauth2_client ).
8
8
-export ([get_access_token /2 , get_expiration_time /1 ,
9
9
refresh_access_token /2 ,
10
- get_oauth_provider /1 , get_oauth_provider /2 ,
10
+ get_oauth_provider /1 , get_oauth_provider /2 ,
11
11
extract_ssl_options_as_list /1
12
12
]).
13
13
@@ -104,14 +104,20 @@ do_update_oauth_provider_endpoints_configuration(OAuthProvider) ->
104
104
case OAuthProvider # oauth_provider .token_endpoint of
105
105
undefined ->
106
106
do_nothing ;
107
- TokenEndPoint ->
108
- application :set_env (rabbitmq_auth_backend_oauth2 , token_endpoint , TokenEndPoint )
107
+ TokenEndpoint ->
108
+ application :set_env (rabbitmq_auth_backend_oauth2 , token_endpoint , TokenEndpoint )
109
109
end ,
110
110
case OAuthProvider # oauth_provider .authorization_endpoint of
111
111
undefined ->
112
112
do_nothing ;
113
- AuthzEndPoint ->
114
- application :set_env (rabbitmq_auth_backend_oauth2 , authorization_endpoint , AuthzEndPoint )
113
+ AuthzEndpoint ->
114
+ application :set_env (rabbitmq_auth_backend_oauth2 , authorization_endpoint , AuthzEndpoint )
115
+ end ,
116
+ case OAuthProvider # oauth_provider .end_session_endpoint of
117
+ undefined ->
118
+ do_nothing ;
119
+ EndSessionEndpoint ->
120
+ application :set_env (rabbitmq_auth_backend_oauth2 , end_session_endpoint , EndSessionEndpoint )
115
121
end ,
116
122
List = application :get_env (rabbitmq_auth_backend_oauth2 , key_config , []),
117
123
ModifiedList = case OAuthProvider # oauth_provider .jwks_uri of
@@ -127,17 +133,21 @@ do_update_oauth_provider_endpoints_configuration(OAuthProviderId, OAuthProvider)
127
133
LookupProviderPropList = maps :get (OAuthProviderId , OAuthProviders ),
128
134
ModifiedList0 = case OAuthProvider # oauth_provider .token_endpoint of
129
135
undefined -> LookupProviderPropList ;
130
- TokenEndPoint -> [{token_endpoint , TokenEndPoint } | LookupProviderPropList ]
136
+ TokenEndpoint -> [{token_endpoint , TokenEndpoint } | LookupProviderPropList ]
131
137
end ,
132
138
ModifiedList1 = case OAuthProvider # oauth_provider .authorization_endpoint of
133
139
undefined -> ModifiedList0 ;
134
- AuthzEndPoint -> [{authorization_endpoint , AuthzEndPoint } | ModifiedList0 ]
140
+ AuthzEndpoint -> [{authorization_endpoint , AuthzEndpoint } | ModifiedList0 ]
135
141
end ,
136
- ModifiedList2 = case OAuthProvider # oauth_provider .jwks_uri of
142
+ ModifiedList2 = case OAuthProvider # oauth_provider .end_session_endpoint of
137
143
undefined -> ModifiedList1 ;
138
- JwksEndPoint -> [{jwks_uri , JwksEndPoint } | ModifiedList1 ]
144
+ EndSessionEndpoint -> [{end_session_endpoint , EndSessionEndpoint } | ModifiedList1 ]
139
145
end ,
140
- ModifiedOAuthProviders = maps :put (OAuthProviderId , ModifiedList2 , OAuthProviders ),
146
+ ModifiedList3 = case OAuthProvider # oauth_provider .jwks_uri of
147
+ undefined -> ModifiedList2 ;
148
+ JwksEndPoint -> [{jwks_uri , JwksEndPoint } | ModifiedList2 ]
149
+ end ,
150
+ ModifiedOAuthProviders = maps :put (OAuthProviderId , ModifiedList3 , OAuthProviders ),
141
151
application :set_env (rabbitmq_auth_backend_oauth2 , oauth_providers , ModifiedOAuthProviders ),
142
152
rabbit_log :debug (" Replacing oauth_providers ~p " , [ ModifiedOAuthProviders ]),
143
153
OAuthProvider .
@@ -179,7 +189,7 @@ get_oauth_provider(ListOfRequiredAttributes) ->
179
189
{ok , DefaultOauthProvider } ->
180
190
rabbit_log :debug (" Using default_oauth_provider ~p " , [DefaultOauthProvider ]),
181
191
get_oauth_provider (DefaultOauthProvider , ListOfRequiredAttributes )
182
- end .
192
+ end .
183
193
184
194
get_oauth_provider_from_keyconfig (ListOfRequiredAttributes ) ->
185
195
OAuthProvider = lookup_oauth_provider_from_keyconfig (),
@@ -206,7 +216,7 @@ get_oauth_provider_from_keyconfig(ListOfRequiredAttributes) ->
206
216
{ok , OAuthProvider2 };
207
217
_ = Attrs ->
208
218
{error , {missing_oauth_provider_attributes , Attrs }}
209
- end ;
219
+ end ;
210
220
{error , _ } = Error3 -> Error3
211
221
end
212
222
end .
@@ -253,7 +263,7 @@ get_oauth_provider(OAuth2ProviderId, ListOfRequiredAttributes) when is_binary(OA
253
263
{ok , OAuthProvider2 };
254
264
_ = Attrs ->
255
265
{error , {missing_oauth_provider_attributes , Attrs }}
256
- end ;
266
+ end ;
257
267
{error , _ } = Error3 -> Error3
258
268
end
259
269
end
@@ -285,11 +295,15 @@ find_missing_attributes(#oauth_provider{} = OAuthProvider, RequiredAttributes) -
285
295
lookup_oauth_provider_from_keyconfig () ->
286
296
Issuer = application :get_env (rabbitmq_auth_backend_oauth2 , issuer , undefined ),
287
297
TokenEndpoint = application :get_env (rabbitmq_auth_backend_oauth2 , token_endpoint , undefined ),
298
+ AuthorizationEndpoint = application :get_env (rabbitmq_auth_backend_oauth2 , authorization_endpoint , undefined ),
299
+ EndSessionEndpoint = application :get_env (rabbitmq_auth_backend_oauth2 , end_session_endpoint , undefined ),
288
300
Map = maps :from_list (application :get_env (rabbitmq_auth_backend_oauth2 , key_config , [])),
289
301
# oauth_provider {
290
302
issuer = Issuer ,
291
303
jwks_uri = maps :get (jwks_url , Map , undefined ), % % jwks_url not uri . _url is the legacy name
292
304
token_endpoint = TokenEndpoint ,
305
+ authorization_endpoint = AuthorizationEndpoint ,
306
+ end_session_endpoint = EndSessionEndpoint ,
293
307
ssl_options = extract_ssl_options_as_list (Map )
294
308
}.
295
309
@@ -447,6 +461,7 @@ map_to_oauth_provider(Map) when is_map(Map) ->
447
461
issuer = maps :get (? RESPONSE_ISSUER , Map ),
448
462
token_endpoint = maps :get (? RESPONSE_TOKEN_ENDPOINT , Map , undefined ),
449
463
authorization_endpoint = maps :get (? RESPONSE_AUTHORIZATION_ENDPOINT , Map , undefined ),
464
+ end_session_endpoint = maps :get (? RESPONSE_END_SESSION_ENDPOINT , Map , undefined ),
450
465
jwks_uri = maps :get (? RESPONSE_JWKS_URI , Map , undefined )
451
466
};
452
467
@@ -455,6 +470,7 @@ map_to_oauth_provider(PropList) when is_list(PropList) ->
455
470
issuer = proplists :get_value (issuer , PropList ),
456
471
token_endpoint = proplists :get_value (token_endpoint , PropList ),
457
472
authorization_endpoint = proplists :get_value (authorization_endpoint , PropList , undefined ),
473
+ end_session_endpoint = proplists :get_value (end_session_endpoint , PropList , undefined ),
458
474
jwks_uri = proplists :get_value (jwks_uri , PropList , undefined ),
459
475
ssl_options = extract_ssl_options_as_list (maps :from_list (proplists :get_value (https , PropList , [])))
460
476
}.
0 commit comments