Search in sources :

Example 1 with BeanInstantiationException

use of io.micronaut.context.exceptions.BeanInstantiationException in project micronaut-security by micronaut-projects.

the class OpenIdClientFactory method openIdConfiguration.

/**
 * Retrieves OpenID configuration from the provided issuer.
 *
 * @param oauthClientConfiguration The client configuration
 * @param openIdClientConfiguration The openid client configuration
 * @param issuerClient The client to request the metadata
 * @return The OpenID configuration
 */
@EachBean(OpenIdClientConfiguration.class)
DefaultOpenIdProviderMetadata openIdConfiguration(@Parameter OauthClientConfiguration oauthClientConfiguration, @Parameter OpenIdClientConfiguration openIdClientConfiguration, @Client HttpClient issuerClient) {
    DefaultOpenIdProviderMetadata providerMetadata = openIdClientConfiguration.getIssuer().map(issuer -> {
        try {
            URL configurationUrl = new URL(issuer, StringUtils.prependUri(issuer.getPath(), openIdClientConfiguration.getConfigurationPath()));
            if (LOG.isDebugEnabled()) {
                LOG.debug("Sending request for OpenID configuration for provider [{}] to URL [{}]", openIdClientConfiguration.getName(), configurationUrl);
            }
            // TODO NOSONAR this returns ReadTimeoutException - return issuerClient.toBlocking().retrieve(configurationUrl.toString(), DefaultOpenIdProviderMetadata.class);
            String json = issuerClient.toBlocking().retrieve(configurationUrl.toString(), String.class);
            return jsonMapper.readValue(json.getBytes(StandardCharsets.UTF_8), Argument.of(DefaultOpenIdProviderMetadata.class));
        } catch (HttpClientResponseException e) {
            throw new BeanInstantiationException("Failed to retrieve OpenID configuration for " + openIdClientConfiguration.getName(), e);
        } catch (MalformedURLException e) {
            throw new BeanInstantiationException("Failure parsing issuer URL " + issuer.toString(), e);
        } catch (IOException e) {
            throw new BeanInstantiationException("JSON Processing Exception parsing issuer URL returned JSON " + issuer.toString(), e);
        }
    }).orElse(new DefaultOpenIdProviderMetadata());
    overrideFromConfig(providerMetadata, openIdClientConfiguration, oauthClientConfiguration);
    return providerMetadata;
}
Also used : Parameter(io.micronaut.context.annotation.Parameter) EndSessionEndpointResolver(io.micronaut.security.oauth2.endpoint.endsession.request.EndSessionEndpointResolver) BeanContext(io.micronaut.context.BeanContext) URL(java.net.URL) JacksonDatabindMapper(io.micronaut.jackson.databind.JacksonDatabindMapper) LoggerFactory(org.slf4j.LoggerFactory) EndSessionCallbackUrlBuilder(io.micronaut.security.oauth2.endpoint.endsession.response.EndSessionCallbackUrlBuilder) Client(io.micronaut.http.client.annotation.Client) Internal(io.micronaut.core.annotation.Internal) Supplier(java.util.function.Supplier) BeanInstantiationException(io.micronaut.context.exceptions.BeanInstantiationException) EachBean(io.micronaut.context.annotation.EachBean) Nullable(io.micronaut.core.annotation.Nullable) JsonMapper(io.micronaut.json.JsonMapper) Requires(io.micronaut.context.annotation.Requires) HttpClientResponseException(io.micronaut.http.client.exceptions.HttpClientResponseException) Argument(io.micronaut.core.type.Argument) SupplierUtil(io.micronaut.core.util.SupplierUtil) HttpClient(io.micronaut.http.client.HttpClient) EndSessionEndpoint(io.micronaut.security.oauth2.endpoint.endsession.request.EndSessionEndpoint) OpenIdClientConfiguration(io.micronaut.security.oauth2.configuration.OpenIdClientConfiguration) OpenIdClientCondition(io.micronaut.security.oauth2.client.condition.OpenIdClientCondition) Logger(org.slf4j.Logger) MalformedURLException(java.net.MalformedURLException) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) IOException(java.io.IOException) AuthorizationRedirectHandler(io.micronaut.security.oauth2.endpoint.authorization.request.AuthorizationRedirectHandler) OauthClientConfiguration(io.micronaut.security.oauth2.configuration.OauthClientConfiguration) StandardCharsets(java.nio.charset.StandardCharsets) StringUtils(io.micronaut.core.util.StringUtils) EndSessionEndpointConfiguration(io.micronaut.security.oauth2.configuration.endpoints.EndSessionEndpointConfiguration) Factory(io.micronaut.context.annotation.Factory) EndpointConfiguration(io.micronaut.security.oauth2.configuration.endpoints.EndpointConfiguration) BeanProvider(io.micronaut.context.BeanProvider) Inject(jakarta.inject.Inject) OpenIdAuthenticationMapper(io.micronaut.security.oauth2.endpoint.token.response.OpenIdAuthenticationMapper) Collections(java.util.Collections) OpenIdAuthorizationResponseHandler(io.micronaut.security.oauth2.endpoint.authorization.response.OpenIdAuthorizationResponseHandler) MalformedURLException(java.net.MalformedURLException) HttpClientResponseException(io.micronaut.http.client.exceptions.HttpClientResponseException) BeanInstantiationException(io.micronaut.context.exceptions.BeanInstantiationException) IOException(java.io.IOException) URL(java.net.URL) EachBean(io.micronaut.context.annotation.EachBean)

Aggregations

ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)1 BeanContext (io.micronaut.context.BeanContext)1 BeanProvider (io.micronaut.context.BeanProvider)1 EachBean (io.micronaut.context.annotation.EachBean)1 Factory (io.micronaut.context.annotation.Factory)1 Parameter (io.micronaut.context.annotation.Parameter)1 Requires (io.micronaut.context.annotation.Requires)1 BeanInstantiationException (io.micronaut.context.exceptions.BeanInstantiationException)1 Internal (io.micronaut.core.annotation.Internal)1 Nullable (io.micronaut.core.annotation.Nullable)1 Argument (io.micronaut.core.type.Argument)1 StringUtils (io.micronaut.core.util.StringUtils)1 SupplierUtil (io.micronaut.core.util.SupplierUtil)1 HttpClient (io.micronaut.http.client.HttpClient)1 Client (io.micronaut.http.client.annotation.Client)1 HttpClientResponseException (io.micronaut.http.client.exceptions.HttpClientResponseException)1 JacksonDatabindMapper (io.micronaut.jackson.databind.JacksonDatabindMapper)1 JsonMapper (io.micronaut.json.JsonMapper)1 OpenIdClientCondition (io.micronaut.security.oauth2.client.condition.OpenIdClientCondition)1 OauthClientConfiguration (io.micronaut.security.oauth2.configuration.OauthClientConfiguration)1