Search in sources :

Example 1 with HttpClientResponseException

use of io.micronaut.http.client.exceptions.HttpClientResponseException 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)

Example 2 with HttpClientResponseException

use of io.micronaut.http.client.exceptions.HttpClientResponseException in project micronaut-security by micronaut-projects.

the class LoggersTest method loggersEndpointIsSecured.

@Test
void loggersEndpointIsSecured() {
    BlockingHttpClient client = httpClient.toBlocking();
    Executable e = () -> client.exchange(HttpRequest.GET("/loggers"));
    HttpClientResponseException thrown = assertThrows(HttpClientResponseException.class, e);
    assertEquals(HttpStatus.UNAUTHORIZED, thrown.getStatus());
}
Also used : HttpClientResponseException(io.micronaut.http.client.exceptions.HttpClientResponseException) BlockingHttpClient(io.micronaut.http.client.BlockingHttpClient) Executable(org.junit.jupiter.api.function.Executable) Test(org.junit.jupiter.api.Test) MicronautTest(io.micronaut.test.extensions.junit5.annotation.MicronautTest)

Example 3 with HttpClientResponseException

use of io.micronaut.http.client.exceptions.HttpClientResponseException in project micronaut-security by micronaut-projects.

the class LoggersTest method loggersEndpointIsNotAccessibleForUsersWithoutRoleROLE_SYSTEM.

@Test
void loggersEndpointIsNotAccessibleForUsersWithoutRoleROLE_SYSTEM() {
    BlockingHttpClient client = httpClient.toBlocking();
    Executable e = () -> client.exchange(HttpRequest.GET("/loggers").basicAuth("user", "password"));
    HttpClientResponseException thrown = assertThrows(HttpClientResponseException.class, e);
    assertEquals(HttpStatus.FORBIDDEN, thrown.getStatus());
}
Also used : HttpClientResponseException(io.micronaut.http.client.exceptions.HttpClientResponseException) BlockingHttpClient(io.micronaut.http.client.BlockingHttpClient) Executable(org.junit.jupiter.api.function.Executable) Test(org.junit.jupiter.api.Test) MicronautTest(io.micronaut.test.extensions.junit5.annotation.MicronautTest)

Example 4 with HttpClientResponseException

use of io.micronaut.http.client.exceptions.HttpClientResponseException in project micronaut-security by micronaut-projects.

the class SensitiveEndpointRuleReplacementTest method testAccessingASensitiveEndpointWithAuthenticationAndASensitiveEndpointRuleReplacementWorks.

@Test
void testAccessingASensitiveEndpointWithAuthenticationAndASensitiveEndpointRuleReplacementWorks() {
    BlockingHttpClient client = httpClient.toBlocking();
    Executable e = () -> client.exchange(HttpRequest.GET("/beans"));
    HttpClientResponseException thrown = assertThrows(HttpClientResponseException.class, e);
    assertEquals(HttpStatus.UNAUTHORIZED, thrown.getStatus());
    e = () -> client.exchange(HttpRequest.GET("/beans").basicAuth("user", "password"));
    assertDoesNotThrow(e);
}
Also used : HttpClientResponseException(io.micronaut.http.client.exceptions.HttpClientResponseException) BlockingHttpClient(io.micronaut.http.client.BlockingHttpClient) Executable(org.junit.jupiter.api.function.Executable) Test(org.junit.jupiter.api.Test) MicronautTest(io.micronaut.test.extensions.junit5.annotation.MicronautTest)

Example 5 with HttpClientResponseException

use of io.micronaut.http.client.exceptions.HttpClientResponseException in project micronaut-views by micronaut-projects.

the class ModelAndViewTest method returningANullModelCausesA404.

@Test
void returningANullModelCausesA404() {
    // given:
    BlockingHttpClient client = httpClient.toBlocking();
    // expect:
    assertTrue(beanContext.containsBean(FruitsController.class));
    // when:
    Executable e = () -> client.exchange(HttpRequest.GET("/null"), String.class);
    // then:
    HttpClientResponseException thrown = assertThrows(HttpClientResponseException.class, e);
}
Also used : HttpClientResponseException(io.micronaut.http.client.exceptions.HttpClientResponseException) BlockingHttpClient(io.micronaut.http.client.BlockingHttpClient) FruitsController(io.micronaut.views.model.FruitsController) Executable(org.junit.jupiter.api.function.Executable) MicronautTest(io.micronaut.test.extensions.junit5.annotation.MicronautTest) Test(org.junit.jupiter.api.Test)

Aggregations

HttpClientResponseException (io.micronaut.http.client.exceptions.HttpClientResponseException)5 BlockingHttpClient (io.micronaut.http.client.BlockingHttpClient)4 MicronautTest (io.micronaut.test.extensions.junit5.annotation.MicronautTest)4 Test (org.junit.jupiter.api.Test)4 Executable (org.junit.jupiter.api.function.Executable)4 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