diff --git a/pom.xml b/pom.xml index 495c3be485b9b30d8823593c76ef1f9203c30c79..86a1ec05f0576f4ee2bd2ba00c6007d259236921 100644 --- a/pom.xml +++ b/pom.xml @@ -42,22 +42,16 @@ </dependency> <dependency> <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-security</artifactId> + <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-client</artifactId> </dependency> - - -<!-- <dependency>--> -<!-- <groupId>org.springframework.boot</groupId>--> -<!-- <artifactId>spring-boot-starter-oauth2-client</artifactId>--> -<!-- </dependency>--> -<!-- <dependency>--> -<!-- <groupId>org.springframework.boot</groupId>--> -<!-- <artifactId>spring-boot-starter-security</artifactId>--> -<!-- </dependency>--> + <dependency> + <groupId>jakarta.servlet</groupId> + <artifactId>jakarta.servlet-api</artifactId> + </dependency> <dependency> <groupId>org.mapstruct</groupId> diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/config/ApiClientConfiguration.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/config/ApiClientConfiguration.java index df03b3f970eef27b799fc8a471a85ca531c83e10..121609c2ff003a8dc76c4858d09367a86bc7cec6 100644 --- a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/config/ApiClientConfiguration.java +++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/config/ApiClientConfiguration.java @@ -11,7 +11,14 @@ import org.springframework.context.annotation.Configuration; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.ClientHttpRequestInterceptor; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; -import org.springframework.security.oauth2.client.OAuth2AuthorizedClientManager; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.oauth2.client.*; +import org.springframework.security.oauth2.client.endpoint.OAuth2ClientCredentialsGrantRequestEntityConverter; +import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; +import org.springframework.security.oauth2.client.registration.ClientRegistrations; +import org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository; +import org.springframework.security.oauth2.client.web.DefaultOAuth2AuthorizedClientManager; +import org.springframework.security.oauth2.client.web.OAuth2AuthorizedClientRepository; import org.springframework.security.oauth2.client.web.client.OAuth2ClientHttpRequestInterceptor; import org.springframework.web.client.RestClient; @@ -20,6 +27,7 @@ import de.ozgcloud.nachrichten.postfach.osiv2.gen.api.MessageExchangeApi; import lombok.RequiredArgsConstructor; @Configuration +@EnableWebSecurity @RequiredArgsConstructor @ConditionalOnProperty("ozgcloud.osiv2-postfach.enabled") public class ApiClientConfiguration { @@ -34,6 +42,7 @@ public class ApiClientConfiguration { @Bean ApiClient apiClient(OAuth2AuthorizedClientManager authorizedClientManager) { + RestClient restClient = RestClient.builder() .requestFactory(createProxyRequestFactory()) .requestInterceptor(createOAuth2Interceptor(authorizedClientManager)) @@ -42,15 +51,15 @@ public class ApiClientConfiguration { return new ApiClient(restClient); } - - private ClientHttpRequestFactory createProxyRequestFactory(){ var requestFactory = new HttpComponentsClientHttpRequestFactory(); if(proxyConfiguration.isEnabled()){ var credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials( new AuthScope(proxyConfiguration.getHost(), proxyConfiguration.getPort()), - new UsernamePasswordCredentials(proxyConfiguration.getUsername(), proxyConfiguration.getPassword().toCharArray()) +//TODO: hier brauchen wir noch eine Ordentliche Lösung +// new UsernamePasswordCredentials(proxyConfiguration.getUsername(), proxyConfiguration.getPassword().toCharArray()) + new UsernamePasswordCredentials("bla", "blub".toCharArray()) ); var httpClient = HttpClientBuilder.create() .setProxy(new HttpHost(proxyConfiguration.getHost(), proxyConfiguration.getPort())) @@ -65,83 +74,4 @@ public class ApiClientConfiguration { var interceptor = new OAuth2ClientHttpRequestInterceptor(authorizedClientManager); return interceptor; } - - -// @Bean -// ApiClient apiClient(ReactiveClientRegistrationRepository clientRegistrations) { -// return new ApiClient(osi2PostfachWebClient(clientRegistrations)) -// .setBasePath(apiConfiguration.getUrl()); -// } - -// private WebClient osi2PostfachWebClient( -// ReactiveClientRegistrationRepository clientRegistrations) { -// return WebClient.builder() -// .clientConnector(new ReactorClientHttpConnector(httpClient())) -// .filter(serverOAuth2AuthorizedClientExchangeFilterFunction(clientRegistrations)) -// .build(); -// } -// -// @SuppressWarnings("ConstantConditions") -// private HttpClient httpClient() { -// var webClient = HttpClient.create(); -// return proxyConfiguration.isEnabled() ? webClient -// .proxy(proxy -> proxy -// .type(ProxyProvider.Proxy.HTTP) -// .host(proxyConfiguration.getHost()) -// .port(proxyConfiguration.getPort()) -// .username(proxyConfiguration.getUsername()) -// .password(username -> proxyConfiguration.getPassword()) -// ) : webClient; -// } -// -// private ServerOAuth2AuthorizedClientExchangeFilterFunction serverOAuth2AuthorizedClientExchangeFilterFunction( -// ReactiveClientRegistrationRepository clientRegistrations) { -// -// var oauth = new ServerOAuth2AuthorizedClientExchangeFilterFunction(authorizedClientManager(clientRegistrations)); -// oauth.setDefaultClientRegistrationId("osi2"); -// return oauth; -// } -// -// private AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager authorizedClientManager( -// ReactiveClientRegistrationRepository clientRegistrations) { -// var clientService = new InMemoryReactiveOAuth2AuthorizedClientService( -// clientRegistrations); -// var authorizedClientManager = new AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager( -// clientRegistrations, clientService); -// -// authorizedClientManager.setAuthorizedClientProvider(authorizedClientProvider()); -// -// return authorizedClientManager; -// } -// -// private ReactiveOAuth2AuthorizedClientProvider authorizedClientProvider() { -// return ReactiveOAuth2AuthorizedClientProviderBuilder.builder() -// .clientCredentials(builder -> -// builder.accessTokenResponseClient(clientCredentialsTokenResponseClient()) -// ) -// .build(); -// } -// -// private WebClientReactiveClientCredentialsTokenResponseClient clientCredentialsTokenResponseClient() { -// var client = new WebClientReactiveClientCredentialsTokenResponseClient(); -// configureHttpClientForTokenRequests(client); -// configureParametersForTokenRequests(client); -// return client; -// } -// -// private void configureHttpClientForTokenRequests(WebClientReactiveClientCredentialsTokenResponseClient client) { -// client.setWebClient(WebClient.builder() -// .clientConnector(new ReactorClientHttpConnector(httpClient())) -// .build()); -// } -// -// private void configureParametersForTokenRequests(WebClientReactiveClientCredentialsTokenResponseClient client) { -// client.addParametersConverter(source -> { -// MultiValueMap<String, String> parameters = new LinkedMultiValueMap<>(); -// // Pass a resource indicator parameter https://datatracker.ietf.org/doc/html/rfc8707 -// parameters.add("resource", apiConfiguration.getResource()); -// return parameters; -// }); -// } - } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 172d0ad8a7a1e127b094913f30707cc9e805b69e..deb72e59d86b8c919bdf0f0a109e51c795aae4ca 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,6 +1,4 @@ spring: - main: - web-application-type: reactive jackson: default-property-inclusion: NON_NULL security: diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java index 2c07c7829eecea5369ae091c96b892161fe2095d..293a3ef02fd74d17fd0d0321b2c5ffe4b99af08b 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java @@ -43,7 +43,7 @@ import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.V1ReplyBehavior; import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.V1ReplyMessage; import lombok.SneakyThrows; -@SpringBootTest(classes = TestApplication.class, webEnvironment = SpringBootTest.WebEnvironment.NONE) +@SpringBootTest(classes = TestApplication.class) @ActiveProfiles("itcase") @TestPropertySource(properties = { "ozgcloud.osiv2-postfach.http-proxy.enabled=false", diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceRemoteITCase.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceRemoteITCase.java index 344c3de7e35a2f68761a726cf963248aae4dbcf8..7d11c14de4c60c1dbc0ce895e61c99403ef914b8 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceRemoteITCase.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceRemoteITCase.java @@ -22,7 +22,7 @@ import de.ozgcloud.nachrichten.postfach.osiv2.factory.DummyStringBasedIdentifier import de.ozgcloud.nachrichten.postfach.osiv2.factory.PostfachAddressTestFactory; import de.ozgcloud.nachrichten.postfach.osiv2.factory.PostfachNachrichtTestFactory; -@SpringBootTest(classes = TestApplication.class, webEnvironment = SpringBootTest.WebEnvironment.NONE) +@SpringBootTest(classes = TestApplication.class) @ActiveProfiles("itcase") @EnabledIfEnvironmentVariable(named = "SH_STAGE_CLIENT_SECRET", matches = ".+") public class OsiPostfachRemoteServiceRemoteITCase {