diff --git a/src/main/java/de/caritas/cob/agencyservice/config/apiclient/TenantServiceApiControllerFactory.java b/src/main/java/de/caritas/cob/agencyservice/config/apiclient/TenantServiceApiControllerFactory.java index 7d183e3b..6254e1db 100644 --- a/src/main/java/de/caritas/cob/agencyservice/config/apiclient/TenantServiceApiControllerFactory.java +++ b/src/main/java/de/caritas/cob/agencyservice/config/apiclient/TenantServiceApiControllerFactory.java @@ -2,14 +2,22 @@ import de.caritas.cob.agencyservice.tenantservice.generated.ApiClient; import de.caritas.cob.agencyservice.tenantservice.generated.web.TenantControllerApi; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import java.util.Arrays; +import java.util.Optional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; @Component public class TenantServiceApiControllerFactory { + private static final String DEFAULT_LANGUAGE = "de"; + private static final String LANGUAGE_COOKIE_NAME = "lang"; @Value("${tenant.service.api.url}") private String tenantServiceApiUrl; @@ -18,6 +26,27 @@ public class TenantServiceApiControllerFactory { public TenantControllerApi createControllerApi() { var apiClient = new ApiClient(restTemplate).setBasePath(this.tenantServiceApiUrl); + apiClient.addDefaultCookie(LANGUAGE_COOKIE_NAME, getCurrentLanguageContext()); return new TenantControllerApi(apiClient); } + + + public String getCurrentLanguageContext() { + HttpServletRequest currentRequest = + ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); + + if (currentRequest.getCookies() != null) { + Optional languageCookie = findLanguageCookie(currentRequest); + if (languageCookie.isPresent()) { + return languageCookie.get().getValue(); + } + } + return DEFAULT_LANGUAGE; + } + + private static Optional findLanguageCookie(HttpServletRequest currentRequest) { + return Arrays.stream(currentRequest.getCookies()) + .filter(cookie -> LANGUAGE_COOKIE_NAME.equals(cookie.getName())) + .findFirst(); + } } diff --git a/src/test/java/de/caritas/cob/agencyservice/config/apiclient/TenantServiceApiControllerFactoryTest.java b/src/test/java/de/caritas/cob/agencyservice/config/apiclient/TenantServiceApiControllerFactoryTest.java new file mode 100644 index 00000000..f4363a0f --- /dev/null +++ b/src/test/java/de/caritas/cob/agencyservice/config/apiclient/TenantServiceApiControllerFactoryTest.java @@ -0,0 +1,33 @@ +package de.caritas.cob.agencyservice.config.apiclient; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import static org.assertj.core.api.Assertions.assertThat; + +class TenantServiceApiControllerFactoryTest { + + @AfterEach + void tearDown() { + RequestContextHolder.resetRequestAttributes(); + } + + @Test + void createControllerApi_Should_CreateApiClientWithoutExceptions() { + // given + MockHttpServletRequest mockRequest = new MockHttpServletRequest(); + mockRequest.addHeader("Authorization", "Bearer token"); + RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(mockRequest)); + + var tenantServiceApiControllerFactory = new TenantServiceApiControllerFactory(); + + // when + var tenantControllerApi = tenantServiceApiControllerFactory.createControllerApi(); + + // then + assertThat(tenantControllerApi).isNotNull(); + } +} \ No newline at end of file