Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import jakarta.ws.rs.core.MultivaluedMap;

import org.eclipse.microprofile.rest.client.ext.ClientHeadersFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import io.quarkiverse.openapi.generator.OpenApiGeneratorConfig;

Expand All @@ -23,6 +25,8 @@ public abstract class AbstractAuthenticationPropagationHeadersFactory implements
protected OpenApiGeneratorConfig generatorConfig;
protected HeadersProvider headersProvider;

private static final Logger LOGGER = LoggerFactory.getLogger(AbstractAuthenticationPropagationHeadersFactory.class);

protected AbstractAuthenticationPropagationHeadersFactory(BaseCompositeAuthenticationProvider compositeProvider,
OpenApiGeneratorConfig generatorConfig,
HeadersProvider headersProvider) {
Expand All @@ -36,6 +40,11 @@ public MultivaluedMap<String, String> update(MultivaluedMap<String, String> inco
MultivaluedMap<String, String> clientOutgoingHeaders) {
MultivaluedMap<String, String> propagatedHeaders = new MultivaluedHashMap<>();
MultivaluedMap<String, String> providedHeaders = headersProvider.getStringHeaders(generatorConfig);

LOGGER.debug("Incoming headers keys{}", incomingHeaders.keySet());
LOGGER.debug("Outgoing headers keys{}", clientOutgoingHeaders.keySet());
LOGGER.debug("Provided headers keys{}", providedHeaders.keySet());

compositeProvider.getAuthenticationProviders().stream()
.filter(AbstractAuthProvider.class::isInstance)
.map(AbstractAuthProvider.class::cast)
Expand All @@ -46,9 +55,14 @@ public MultivaluedMap<String, String> update(MultivaluedMap<String, String> inco
// get priority to the headers coming from the headers provider.
List<String> headerValue = providedHeaders.get(headerName);
if (headerValue == null) {
// lastly look into the incoming headers.
// next, look into the incoming headers.
headerValue = incomingHeaders.get(headerName);
}
if (headerValue == null) {
// lastly look into the outgoing headers.
headerValue = clientOutgoingHeaders.get(headerName);
}

if (headerValue != null) {
propagatedHeaders.put(propagationHeaderName(authProvider.getOpenApiSpecId(),
authProvider.getName(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
import jakarta.ws.rs.client.ClientRequestContext;
import jakarta.ws.rs.core.HttpHeaders;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* Provides bearer token authentication or any other valid scheme.
*
Expand All @@ -14,6 +17,7 @@
public class BearerAuthenticationProvider extends AbstractAuthProvider {

private final String scheme;
private static final Logger LOGGER = LoggerFactory.getLogger(BearerAuthenticationProvider.class);

public BearerAuthenticationProvider(final String openApiSpecId, final String name, final String scheme,
List<OperationAuthInfo> operations, CredentialsProvider credentialsProvider) {
Expand All @@ -23,6 +27,7 @@ public BearerAuthenticationProvider(final String openApiSpecId, final String nam

@Override
public void filter(ClientRequestContext requestContext) throws IOException {
LOGGER.debug("Headers keys set in incoming requestContext: {}", requestContext.getHeaders().keySet());
String bearerToken = getBearerToken(requestContext);

if (isTokenPropagation()) {
Expand All @@ -32,6 +37,7 @@ public void filter(ClientRequestContext requestContext) throws IOException {
if (!bearerToken.isBlank()) {
requestContext.getHeaders().add(HttpHeaders.AUTHORIZATION, AuthUtils.authTokenOrBearer(this.scheme, bearerToken));
}
LOGGER.debug("Header keys set in filtered requestContext: {}", requestContext.getHeaders().keySet());
}

private String getBearerToken(ClientRequestContext requestContext) {
Expand Down