Skip to content
Snippets Groups Projects
Commit 558cf07f authored by Jörg Bolay's avatar Jörg Bolay
Browse files

OZG-2964 generierung umstellung von webclient auf restclient

parent b9e94f0b
No related branches found
No related tags found
1 merge request!10KOP-2964 umstellen von WebClient auf RestClient und entfernen von...
Pipeline #1488 failed
......@@ -6,7 +6,7 @@
<parent>
<groupId>de.ozgcloud.common</groupId>
<artifactId>ozgcloud-common-parent</artifactId>
<version>4.6.0</version>
<version>4.9.0-SNAPSHOT</version>
</parent>
<groupId>de.ozgcloud.osiv2</groupId>
......@@ -42,13 +42,23 @@
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<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>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
......@@ -95,8 +105,6 @@
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
</dependency>
<!-- used by generated code -->
<!-- @Nullable annotation -->
<dependency>
......
......@@ -2,7 +2,6 @@ package de.ozgcloud.nachrichten.postfach.osiv2.config;
import org.apache.hc.client5.http.auth.AuthScope;
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
import org.apache.hc.client5.http.classic.HttpClient;
import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
import org.apache.hc.core5.http.HttpHost;
......@@ -12,19 +11,9 @@ 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.http.client.reactive.ReactorClientHttpConnector;
import org.springframework.security.oauth2.client.AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager;
import org.springframework.security.oauth2.client.InMemoryReactiveOAuth2AuthorizedClientService;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientManager;
import org.springframework.security.oauth2.client.ReactiveOAuth2AuthorizedClientProvider;
import org.springframework.security.oauth2.client.ReactiveOAuth2AuthorizedClientProviderBuilder;
import org.springframework.security.oauth2.client.endpoint.WebClientReactiveClientCredentialsTokenResponseClient;
import org.springframework.security.oauth2.client.registration.ReactiveClientRegistrationRepository;
import org.springframework.security.oauth2.client.web.reactive.function.client.ServerOAuth2AuthorizedClientExchangeFilterFunction;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.security.oauth2.client.web.client.OAuth2ClientHttpRequestInterceptor;
import org.springframework.web.client.RestClient;
import org.springframework.web.reactive.function.client.WebClient;
import de.ozgcloud.nachrichten.postfach.osiv2.gen.ApiClient;
import de.ozgcloud.nachrichten.postfach.osiv2.gen.api.MessageExchangeApi;
......@@ -73,86 +62,86 @@ public class ApiClientConfiguration {
}
private ClientHttpRequestInterceptor createOAuth2Interceptor(OAuth2AuthorizedClientManager authorizedClientManager) {
OAuth2ClientHttpRequestInterceptor interceptor = new OAuth2ClientHttpRequestInterceptor(authorizedClientManager);
}
@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;
var interceptor = new OAuth2ClientHttpRequestInterceptor(authorizedClientManager);
return interceptor;
}
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;
});
}
// @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;
// });
// }
}
......@@ -22,7 +22,6 @@ import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.MessageExchangeReceiveMe
import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.MessageExchangeSendMessageResponse;
import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.OutSendMessageRequestV2;
import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.V1ReplyMessage;
import reactor.core.publisher.Mono;
class PostfachApiFacadeServiceTest {
......@@ -52,10 +51,9 @@ class PostfachApiFacadeServiceTest {
@BeforeEach
void mock() {
var responseMono = Mono.just(messageExchangeSendMessageResponse);
when(requestMapper.mapMailboxId(nachricht)).thenReturn(MAILBOX_ID);
when(requestMapper.mapOutSendMessageRequestV2(nachricht)).thenReturn(outSendMessageRequestV2);
when(messageExchangeApi.sendMessage(any(), any())).thenReturn(responseMono);
when(messageExchangeApi.sendMessage(any(), any())).thenReturn(messageExchangeSendMessageResponse);
}
@DisplayName("should call sendMessage")
......@@ -77,8 +75,7 @@ class PostfachApiFacadeServiceTest {
@BeforeEach
void mock(){
var responseMono = Mono.just(messageExchangeReceiveMessagesResponse);
when(messageExchangeApi.receiveMessages(anyInt(),anyInt())).thenReturn(responseMono);
when(messageExchangeApi.receiveMessages(anyInt(),anyInt())).thenReturn(messageExchangeReceiveMessagesResponse);
}
@Test
......@@ -100,8 +97,7 @@ class PostfachApiFacadeServiceTest {
@Test
void shouldCallGetMessage(){
var replyMono = Mono.just(replyMessage);
when(messageExchangeApi.getMessage(any())).thenReturn(replyMono);
when(messageExchangeApi.getMessage(any())).thenReturn(replyMessage);
postfachApiFacadeService.fetchMessageByGuid(receiveMessage);
......@@ -110,8 +106,7 @@ class PostfachApiFacadeServiceTest {
@Test
void shouldCallResponseMapper(){
var replyMono = Mono.just(replyMessage);
when(messageExchangeApi.getMessage(any())).thenReturn(replyMono);
when(messageExchangeApi.getMessage(any())).thenReturn(replyMessage);
when(responseMapper.toPostfachNachricht(any())).thenReturn(PostfachNachrichtTestFactory.create());
postfachApiFacadeService.fetchMessageByGuid(receiveMessage);
......@@ -121,8 +116,7 @@ class PostfachApiFacadeServiceTest {
@Test
void shouldReturnPostfachNachricht(){
var replyMono = Mono.just(replyMessage);
when(messageExchangeApi.getMessage(any())).thenReturn(replyMono);
when(messageExchangeApi.getMessage(any())).thenReturn(replyMessage);
when(responseMapper.toPostfachNachricht(any())).thenReturn(PostfachNachrichtTestFactory.create());
var postfachNachricht = postfachApiFacadeService.fetchMessageByGuid(receiveMessage);
......@@ -139,8 +133,7 @@ class PostfachApiFacadeServiceTest {
@Test
void shouldCallDeleteMessage(){
var replyMono = Mono.just(replyMessage);
when(messageExchangeApi.deleteMessage(any())).thenReturn(replyMono);
when(messageExchangeApi.deleteMessage(any())).thenReturn(replyMessage);
postfachApiFacadeService.deleteMessage(UUID.randomUUID().toString());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment