diff --git a/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/smartdocuments/SmartDocumentsConfiguration.java b/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/smartdocuments/SmartDocumentsConfiguration.java index 0462d99ab07a8d2ec4af61f9a6b034df974ef4e3..3ba22929eefaaa6a335360ee6a147b8fef6a9c1e 100644 --- a/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/smartdocuments/SmartDocumentsConfiguration.java +++ b/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/smartdocuments/SmartDocumentsConfiguration.java @@ -23,6 +23,8 @@ */ package de.ozgcloud.document.bescheid.smartdocuments; +import java.util.Objects; + import org.apache.hc.client5.http.auth.AuthScope; import org.apache.hc.client5.http.auth.CredentialsProvider; import org.apache.hc.client5.http.impl.auth.CredentialsProviderBuilder; @@ -35,6 +37,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpHeaders; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestClient; @@ -50,7 +53,7 @@ class SmartDocumentsConfiguration { return RestClient.builder() .requestFactory(new HttpComponentsClientHttpRequestFactory(buildHttpClient())) .baseUrl(properties.getUrl()) - .defaultHeaders(headers -> headers.setBasicAuth(properties.getBasicAuth().getUsername(), properties.getBasicAuth().getPassword())) + .defaultHeaders(this::addBasicAuthenticationIfConfigured) .build(); } @@ -85,4 +88,10 @@ class SmartDocumentsConfiguration { return CredentialsProviderBuilder.create().add(new AuthScope(host, port), username, password).build(); } + void addBasicAuthenticationIfConfigured(HttpHeaders headers) { + if (Objects.nonNull(properties.getBasicAuth())) { + headers.setBasicAuth(properties.getBasicAuth().getUsername(), properties.getBasicAuth().getPassword()); + } + } + } diff --git a/document-manager-server/src/test/java/de/ozgcloud/document/bescheid/smartdocuments/SmartDocumentsConfigurationTest.java b/document-manager-server/src/test/java/de/ozgcloud/document/bescheid/smartdocuments/SmartDocumentsConfigurationTest.java index 79739379d26d965c568a6c06f6600f530b8130aa..7d21660e84c927efc35aeb334991316b008b0697 100644 --- a/document-manager-server/src/test/java/de/ozgcloud/document/bescheid/smartdocuments/SmartDocumentsConfigurationTest.java +++ b/document-manager-server/src/test/java/de/ozgcloud/document/bescheid/smartdocuments/SmartDocumentsConfigurationTest.java @@ -16,6 +16,7 @@ import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import org.springframework.http.HttpHeaders; import de.ozgcloud.document.bescheid.smartdocuments.SmartDocumentsProperties.ProxyConfiguration; @@ -115,4 +116,30 @@ class SmartDocumentsConfigurationTest { assertThat(httpClient).isSameAs(nonProxyHttpClient); } } + + @Nested + class AddBasicAuthenticationIfConfiguredTest { + + @Test + void shouldNotAddBasicAuthentication() { + when(properties.getBasicAuth()).thenReturn(null); + var headers = new HttpHeaders(); + + smartDocumentsConfiguration.addBasicAuthenticationIfConfigured(headers); + + assertThat(headers.get(HttpHeaders.AUTHORIZATION)).isNull(); + } + + @Test + void shouldAddBasicAuthentication() { + when(properties.getBasicAuth()).thenReturn(UsernamePasswordTestFactory.create()); + var headers = new HttpHeaders(); + + smartDocumentsConfiguration.addBasicAuthenticationIfConfigured(headers); + + assertThat(headers.get(HttpHeaders.AUTHORIZATION)) + .isNotNull() + .containsExactly(UsernamePasswordTestFactory.getAsBasicAuthenticationHeader()); + } + } } \ No newline at end of file diff --git a/document-manager-server/src/test/java/de/ozgcloud/document/bescheid/smartdocuments/UsernamePasswordTestFactory.java b/document-manager-server/src/test/java/de/ozgcloud/document/bescheid/smartdocuments/UsernamePasswordTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..7ef947a7ab23db9abbbe6306752617edee323423 --- /dev/null +++ b/document-manager-server/src/test/java/de/ozgcloud/document/bescheid/smartdocuments/UsernamePasswordTestFactory.java @@ -0,0 +1,26 @@ +package de.ozgcloud.document.bescheid.smartdocuments; + +import org.bouncycastle.util.encoders.Base64; + +import de.ozgcloud.document.bescheid.smartdocuments.SmartDocumentsProperties.UsernamePassword; + +public class UsernamePasswordTestFactory { + + public static final String USERNAME = "max"; + public static final String PASSWORD = "max123"; + + public static UsernamePassword create() { + var usernamePassword = new UsernamePassword(); + usernamePassword.setUsername(USERNAME); + usernamePassword.setPassword(PASSWORD); + return usernamePassword; + } + + public static String getAsBasicAuthenticationHeader() { + var base64EncodedAuth = new String(Base64.encode( + (UsernamePasswordTestFactory.USERNAME + ":" + UsernamePasswordTestFactory.PASSWORD).getBytes())); + + return "Basic " + base64EncodedAuth; + } + +}