Skip to content

Commit 9cb6610

Browse files
Use CredentialProvider in OAUTH2 provider
Signed-off-by: gabriel-farache <[email protected]>
1 parent 81f08e2 commit 9cb6610

File tree

4 files changed

+64
-17
lines changed

4 files changed

+64
-17
lines changed

client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/providers/OAuth2AuthenticationProvider.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,13 @@
55
import java.io.IOException;
66
import java.util.List;
77

8-
import jakarta.ws.rs.client.ClientRequestContext;
9-
import jakarta.ws.rs.core.HttpHeaders;
10-
118
import org.slf4j.Logger;
129
import org.slf4j.LoggerFactory;
1310

1411
import io.quarkiverse.openapi.generator.providers.AbstractAuthProvider;
1512
import io.quarkiverse.openapi.generator.providers.ConfigCredentialsProvider;
1613
import io.quarkiverse.openapi.generator.providers.OperationAuthInfo;
17-
import io.quarkus.oidc.common.runtime.OidcConstants;
14+
import jakarta.ws.rs.client.ClientRequestContext;
1815

1916
public class OAuth2AuthenticationProvider extends AbstractAuthProvider {
2017

@@ -31,13 +28,7 @@ public OAuth2AuthenticationProvider(String name,
3128

3229
@Override
3330
public void filter(ClientRequestContext requestContext) throws IOException {
34-
if (isTokenPropagation()) {
35-
String bearerToken = getTokenForPropagation(requestContext.getHeaders());
36-
bearerToken = sanitizeBearerToken(bearerToken);
37-
requestContext.getHeaders().add(HttpHeaders.AUTHORIZATION, OidcConstants.BEARER_SCHEME + " " + bearerToken);
38-
} else {
39-
delegate.filter(requestContext);
40-
}
31+
getCredentialsProvider().setOauth2BearerToken(requestContext, getOpenApiSpecId(), getName(), delegate::filter);
4132
}
4233

4334
private void validateConfig() {

client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/AbstractAuthProvider.java

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,22 +60,33 @@ public String getName() {
6060
}
6161

6262
public boolean isTokenPropagation() {
63-
return ConfigProvider.getConfig()
64-
.getOptionalValue(getCanonicalAuthConfigPropertyName(AuthConfig.TOKEN_PROPAGATION), Boolean.class)
65-
.orElse(false);
63+
return isTokenPropagation(getOpenApiSpecId(), getName());
6664
}
6765

68-
public String getTokenForPropagation(MultivaluedMap<String, Object> httpHeaders) {
69-
String headerName = getHeaderName() != null ? getHeaderName() : HttpHeaders.AUTHORIZATION;
70-
String propagatedHeaderName = propagationHeaderName(getOpenApiSpecId(), getName(), headerName);
66+
public static String getTokenForPropagation(MultivaluedMap<String, Object> httpHeaders, String openApiSpecId,
67+
String authName) {
68+
String headerName = getHeaderName(openApiSpecId, authName) != null ? getHeaderName(openApiSpecId, authName)
69+
: HttpHeaders.AUTHORIZATION;
70+
String propagatedHeaderName = propagationHeaderName(openApiSpecId, authName, headerName);
7171
return Objects.toString(httpHeaders.getFirst(propagatedHeaderName));
7272
}
7373

74+
public String getTokenForPropagation(MultivaluedMap<String, Object> httpHeaders) {
75+
return getTokenForPropagation(httpHeaders, getOpenApiSpecId(), getName());
76+
}
77+
7478
public String getHeaderName() {
7579
return ConfigProvider.getConfig()
7680
.getOptionalValue(getCanonicalAuthConfigPropertyName(AuthConfig.HEADER_NAME), String.class).orElse(null);
7781
}
7882

83+
public static String getHeaderName(String openApiSpecId, String authName) {
84+
return ConfigProvider.getConfig()
85+
.getOptionalValue(getCanonicalAuthConfigPropertyName(AuthConfig.HEADER_NAME, openApiSpecId, authName),
86+
String.class)
87+
.orElse(null);
88+
}
89+
7990
@Override
8091
public List<OperationAuthInfo> operationsToFilter() {
8192
return applyToOperations;
@@ -88,4 +99,15 @@ public final String getCanonicalAuthConfigPropertyName(String authPropertyName)
8899
public static String getCanonicalAuthConfigPropertyName(String authPropertyName, String openApiSpecId, String authName) {
89100
return String.format(CANONICAL_AUTH_CONFIG_PROPERTY_NAME, openApiSpecId, authName, authPropertyName);
90101
}
102+
103+
public static boolean isTokenPropagation(String openApiSpecId, String authName) {
104+
return ConfigProvider.getConfig()
105+
.getOptionalValue(getCanonicalAuthConfigPropertyName(AuthConfig.TOKEN_PROPAGATION, openApiSpecId, authName),
106+
Boolean.class)
107+
.orElse(false);
108+
}
109+
110+
public CredentialsProvider getCredentialsProvider() {
111+
return credentialsProvider;
112+
}
91113
}

client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/ConfigCredentialsProvider.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
11
package io.quarkiverse.openapi.generator.providers;
22

3+
import java.io.IOException;
4+
35
import jakarta.annotation.Priority;
46
import jakarta.enterprise.context.Dependent;
57
import jakarta.enterprise.inject.Alternative;
68
import jakarta.ws.rs.client.ClientRequestContext;
9+
import jakarta.ws.rs.core.HttpHeaders;
710

811
import org.eclipse.microprofile.config.ConfigProvider;
912
import org.slf4j.Logger;
1013
import org.slf4j.LoggerFactory;
1114

15+
import io.quarkus.oidc.common.runtime.OidcConstants;
16+
1217
@Dependent
1318
@Alternative
1419
@Priority(100)
@@ -63,4 +68,22 @@ public String getBearerToken(ClientRequestContext requestContext, String openApi
6368
.orElse("");
6469
}
6570

71+
@Override
72+
public void setOauth2BearerToken(ClientRequestContext requestContext, String openApiSpecId, String authName,
73+
ThrowingConsumer<ClientRequestContext, IOException> filter) throws IOException {
74+
if (AbstractAuthProvider.isTokenPropagation(openApiSpecId, authName)) {
75+
String bearerToken = AbstractAuthProvider.getTokenForPropagation(requestContext.getHeaders(), openApiSpecId,
76+
authName);
77+
requestContext.getHeaders().add(HttpHeaders.AUTHORIZATION,
78+
OidcConstants.BEARER_SCHEME + " " + AbstractAuthProvider.sanitizeBearerToken(bearerToken));
79+
} else {
80+
filter.accept(requestContext);
81+
}
82+
}
83+
84+
@FunctionalInterface
85+
public interface ThrowingConsumer<T, E extends Exception> {
86+
void accept(T t) throws E;
87+
}
88+
6689
}

client/runtime/src/main/java/io/quarkiverse/openapi/generator/providers/CredentialsProvider.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.quarkiverse.openapi.generator.providers;
22

3+
import java.io.IOException;
4+
35
import jakarta.ws.rs.client.ClientRequestContext;
46

57
/**
@@ -44,4 +46,13 @@ public interface CredentialsProvider {
4446
* @return the Bearer Token to use when filtering the request
4547
*/
4648
String getBearerToken(ClientRequestContext requestContext, String openApiSpecId, String authName);
49+
50+
/**
51+
* Gets the Bearer Token given the OpenAPI definition and security schema
52+
*
53+
* @param openApiSpecId the OpenAPI Spec identification as defined by the OpenAPI Extension
54+
* @param authName The security schema for this Bearer Token definition
55+
*/
56+
void setOauth2BearerToken(ClientRequestContext requestContext, String openApiSpecId, String authName,
57+
ConfigCredentialsProvider.ThrowingConsumer<ClientRequestContext, IOException> filter) throws IOException;
4758
}

0 commit comments

Comments
 (0)