42
42
import io .vertx .mutiny .ext .web .client .WebClient ;
43
43
44
44
public class OidcProviderClientImpl implements OidcProviderClient , Closeable {
45
+
46
+ private enum TokenOperation {
47
+ GET ("Get" ),
48
+ REFRESH ("Refresh" ),
49
+ INTROSPECT ("Introspect" ),
50
+ REVOKE ("Revoke" );
51
+
52
+ String op ;
53
+
54
+ TokenOperation (String op ) {
55
+ this .op = op ;
56
+ }
57
+
58
+ String operation () {
59
+ return op ;
60
+ }
61
+ }
62
+
45
63
private static final Logger LOG = Logger .getLogger (OidcProviderClientImpl .class );
46
64
47
65
private static final String AUTHORIZATION_HEADER = String .valueOf (HttpHeaders .AUTHORIZATION );
@@ -214,7 +232,8 @@ public Uni<TokenIntrospection> introspectAccessToken(final String token) {
214
232
introspectionParams .add (OidcConstants .INTROSPECTION_TOKEN , token );
215
233
introspectionParams .add (OidcConstants .INTROSPECTION_TOKEN_TYPE_HINT , OidcConstants .ACCESS_TOKEN_VALUE );
216
234
final OidcRequestContextProperties requestProps = getRequestProps (null , null );
217
- return getHttpResponse (requestProps , metadata .getIntrospectionUri (), introspectionParams , true )
235
+ return getHttpResponse (requestProps , metadata .getIntrospectionUri (), introspectionParams , TokenOperation .INTROSPECT ,
236
+ OidcEndpoint .Type .INTROSPECTION )
218
237
.transform (resp -> getTokenIntrospection (requestProps , resp ));
219
238
}
220
239
@@ -234,7 +253,8 @@ Uni<AuthorizationCodeTokens> getAuthorizationCodeTokens(String code, String redi
234
253
codeGrantParams .addAll (oidcConfig .codeGrant ().extraParams ());
235
254
}
236
255
final OidcRequestContextProperties requestProps = getRequestProps (OidcConstants .AUTHORIZATION_CODE );
237
- return getHttpResponse (requestProps , metadata .getTokenUri (), codeGrantParams , false )
256
+ return getHttpResponse (requestProps , metadata .getTokenUri (), codeGrantParams , TokenOperation .GET ,
257
+ OidcEndpoint .Type .TOKEN )
238
258
.transform (resp -> getAuthorizationCodeTokens (requestProps , resp ));
239
259
}
240
260
@@ -243,7 +263,8 @@ Uni<AuthorizationCodeTokens> refreshAuthorizationCodeTokens(String refreshToken)
243
263
refreshGrantParams .add (OidcConstants .GRANT_TYPE , OidcConstants .REFRESH_TOKEN_GRANT );
244
264
refreshGrantParams .add (OidcConstants .REFRESH_TOKEN_VALUE , refreshToken );
245
265
final OidcRequestContextProperties requestProps = getRequestProps (OidcConstants .REFRESH_TOKEN_GRANT );
246
- return getHttpResponse (requestProps , metadata .getTokenUri (), refreshGrantParams , false )
266
+ return getHttpResponse (requestProps , metadata .getTokenUri (), refreshGrantParams , TokenOperation .REFRESH ,
267
+ OidcEndpoint .Type .TOKEN )
247
268
.transform (resp -> getAuthorizationCodeTokens (requestProps , resp ));
248
269
}
249
270
@@ -263,7 +284,8 @@ private Uni<Boolean> revokeToken(String token, String tokenTypeHint) {
263
284
tokenRevokeParams .set (OidcConstants .REVOCATION_TOKEN , token );
264
285
tokenRevokeParams .set (OidcConstants .REVOCATION_TOKEN_TYPE_HINT , tokenTypeHint );
265
286
266
- return getHttpResponse (requestProps , metadata .getRevocationUri (), tokenRevokeParams , false )
287
+ return getHttpResponse (requestProps , metadata .getRevocationUri (), tokenRevokeParams , TokenOperation .REVOKE ,
288
+ OidcEndpoint .Type .TOKEN_REVOCATION )
267
289
.transform (resp -> toRevokeResponse (requestProps , resp ));
268
290
} else {
269
291
LOG .debugf ("The %s token can not be revoked because the revocation endpoint URL is not set" , tokenTypeHint );
@@ -282,7 +304,7 @@ private Boolean toRevokeResponse(OidcRequestContextProperties requestProps, Http
282
304
}
283
305
284
306
private UniOnItem <HttpResponse <Buffer >> getHttpResponse (OidcRequestContextProperties requestProps , String uri ,
285
- MultiMap formBody , boolean introspect ) {
307
+ MultiMap formBody , TokenOperation op , OidcEndpoint . Type endpointType ) {
286
308
HttpRequest <Buffer > request = client .postAbs (uri );
287
309
288
310
Buffer buffer = null ;
@@ -291,7 +313,7 @@ private UniOnItem<HttpResponse<Buffer>> getHttpResponse(OidcRequestContextProper
291
313
request .putHeader (CONTENT_TYPE_HEADER , APPLICATION_X_WWW_FORM_URLENCODED );
292
314
request .putHeader (ACCEPT_HEADER , APPLICATION_JSON );
293
315
294
- if (introspect && introspectionBasicAuthScheme != null ) {
316
+ if (isIntrospection ( op ) && introspectionBasicAuthScheme != null ) {
295
317
request .putHeader (AUTHORIZATION_HEADER , introspectionBasicAuthScheme );
296
318
if (oidcConfig .clientId ().isPresent () && oidcConfig .introspectionCredentials ().includeClientId ()) {
297
319
formBody .set (OidcConstants .CLIENT_ID , oidcConfig .clientId ().get ());
@@ -339,14 +361,12 @@ private UniOnItem<HttpResponse<Buffer>> getHttpResponse(OidcRequestContextProper
339
361
}
340
362
}
341
363
if (LOG .isDebugEnabled ()) {
342
- LOG .debugf ("%s token: %s params: %s headers: %s" , (introspect ? "Introspect" : "Get" ), metadata .getTokenUri (),
343
- formBody ,
344
- request .headers ());
364
+ LOG .debugf ("%s token: url : %s, headers: %s, request params: %s" , op .operation (), request .uri (), request .headers (),
365
+ formBody );
345
366
}
346
367
// Retry up to three times with a one-second delay between the retries if the connection is closed.
347
368
348
- OidcEndpoint .Type endpoint = introspect ? OidcEndpoint .Type .INTROSPECTION : OidcEndpoint .Type .TOKEN ;
349
- Uni <HttpResponse <Buffer >> response = filterHttpRequest (requestProps , endpoint , request , buffer )
369
+ Uni <HttpResponse <Buffer >> response = filterHttpRequest (requestProps , endpointType , request , buffer )
350
370
.sendBuffer (OidcCommonUtils .getRequestBuffer (requestProps , buffer ))
351
371
.onFailure (SocketException .class )
352
372
.retry ()
@@ -475,4 +495,7 @@ public WebClient getWebClient() {
475
495
record UserInfoResponse (String contentType , String data ) {
476
496
}
477
497
498
+ static boolean isIntrospection (TokenOperation op ) {
499
+ return op == TokenOperation .INTROSPECT ;
500
+ }
478
501
}
0 commit comments