All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.quarkiverse.openapi.generator.providers.AbstractAuthProvider Maven / Gradle / Ivy

The newest version!
package io.quarkiverse.openapi.generator.providers;

import static io.quarkiverse.openapi.generator.OpenApiGeneratorConfig.RUNTIME_TIME_CONFIG_PREFIX;
import static io.quarkiverse.openapi.generator.providers.AbstractAuthenticationPropagationHeadersFactory.propagationHeaderName;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;

import jakarta.ws.rs.core.HttpHeaders;
import jakarta.ws.rs.core.MultivaluedMap;

import io.quarkiverse.openapi.generator.AuthConfig;
import io.quarkiverse.openapi.generator.AuthsConfig;
import io.quarkiverse.openapi.generator.OpenApiGeneratorConfig;
import io.quarkiverse.openapi.generator.SpecItemConfig;

public abstract class AbstractAuthProvider implements AuthProvider {

    private static final String BEARER_WITH_SPACE = "Bearer ";
    private static final String CANONICAL_AUTH_CONFIG_PROPERTY_NAME = "quarkus." +
            RUNTIME_TIME_CONFIG_PREFIX + ".%s.auth.%s.%s";

    private String openApiSpecId;
    private String name;
    private final OpenApiGeneratorConfig generatorConfig;
    private AuthConfig authConfig;
    private final List applyToOperations = new ArrayList<>();

    protected AbstractAuthProvider() {
        // Required by CDI. Not supposed to be used.
        name = null;
        generatorConfig = null;
    }

    protected AbstractAuthProvider(OpenApiGeneratorConfig generatorConfig) {
        this.generatorConfig = generatorConfig;
    }

    protected void init(String name, String openApiSpecId) {
        this.name = name;
        setOpenApiSpecId(openApiSpecId);
    }

    private void setOpenApiSpecId(String openApiSpecId) {
        this.openApiSpecId = openApiSpecId;
        Optional specItemConfig = Objects.requireNonNull(generatorConfig, "generatorConfig can't be null.")
                .getItemConfig(openApiSpecId);
        if (specItemConfig.isPresent()) {
            Optional authsConfig = specItemConfig.get().getAuth();
            authsConfig.ifPresent(
                    specItemAuthsConfig -> authConfig = specItemAuthsConfig.getItemConfig(name).orElse(null));
        }
    }

    public String getOpenApiSpecId() {
        return openApiSpecId;
    }

    @Override
    public String getName() {
        return name;
    }

    public OpenApiGeneratorConfig getGeneratorConfig() {
        return generatorConfig;
    }

    public boolean isTokenPropagation() {
        return authConfig != null && authConfig.getTokenPropagation().orElse(false);
    }

    public String getTokenForPropagation(MultivaluedMap httpHeaders) {
        String headerName = getHeaderName() != null ? getHeaderName() : HttpHeaders.AUTHORIZATION;
        String propagatedHeaderName = propagationHeaderName(getOpenApiSpecId(), getName(), headerName);
        return Objects.toString(httpHeaders.getFirst(propagatedHeaderName));
    }

    public String getHeaderName() {
        if (authConfig != null) {
            return authConfig.getHeaderName().orElse(null);
        }
        return null;
    }

    @Override
    public List operationsToFilter() {
        return applyToOperations;
    }

    @Override
    public AuthProvider addOperation(OperationAuthInfo operationAuthInfo) {
        this.applyToOperations.add(operationAuthInfo);
        return this;
    }

    public String getAuthConfigParam(String paramName, String defaultValue) {
        if (authConfig != null) {
            return authConfig.getConfigParam(paramName).orElse(defaultValue);
        }
        return defaultValue;
    }

    protected static String sanitizeBearerToken(String token) {
        if (token != null && token.toLowerCase().startsWith(BEARER_WITH_SPACE.toLowerCase())) {
            return token.substring(BEARER_WITH_SPACE.length());
        }
        return token;
    }

    protected String getCanonicalAuthConfigPropertyName(String authPropertyName) {
        return String.format(CANONICAL_AUTH_CONFIG_PROPERTY_NAME, getOpenApiSpecId(), getName(), authPropertyName);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy