diff --git a/pass-deposit-services/deposit-core/src/main/java/org/eclipse/pass/deposit/support/dspace/DSpaceDepositService.java b/pass-deposit-services/deposit-core/src/main/java/org/eclipse/pass/deposit/support/dspace/DSpaceDepositService.java index 9e074863..9dcda201 100644 --- a/pass-deposit-services/deposit-core/src/main/java/org/eclipse/pass/deposit/support/dspace/DSpaceDepositService.java +++ b/pass-deposit-services/deposit-core/src/main/java/org/eclipse/pass/deposit/support/dspace/DSpaceDepositService.java @@ -37,6 +37,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -80,8 +81,11 @@ public class DSpaceDepositService { public record AuthContext(String xsrfToken, String authToken){} - public DSpaceDepositService(@Value("${dspace.api.url}") String dspaceApiUrl, - RepositoryConnectivityService repositoryConnectivityService) { + public DSpaceDepositService( + @Value("${dspace.api.url}") String dspaceApiUrl, + @Value("${dspace.user.agent}") String dspaceUserAgent, + RepositoryConnectivityService repositoryConnectivityService + ) { this.repositoryConnectivityService = repositoryConnectivityService; PoolingHttpClientConnectionManager connectionManager = PoolingHttpClientConnectionManagerBuilder.create() @@ -102,6 +106,7 @@ public DSpaceDepositService(@Value("${dspace.api.url}") String dspaceApiUrl, this.restClient = RestClient.builder() .requestFactory(new HttpComponentsClientHttpRequestFactory(httpClient)) .baseUrl(dspaceApiUrl) + .defaultHeader(HttpHeaders.USER_AGENT, dspaceUserAgent) .build(); } diff --git a/pass-deposit-services/deposit-core/src/main/resources/application.properties b/pass-deposit-services/deposit-core/src/main/resources/application.properties index 7af5d535..069b78ed 100644 --- a/pass-deposit-services/deposit-core/src/main/resources/application.properties +++ b/pass-deposit-services/deposit-core/src/main/resources/application.properties @@ -33,6 +33,7 @@ dspace.website.url=${DSPACE_WEBSITE_URL} dspace.user=${DSPACE_USER} dspace.password=${DSPACE_PASSWORD} dspace.collection.handle=${DSPACE_COLLECTION_HANDLE} +dspace.user.agent=${DSPACE_USER_AGENT} inveniordm.api.baseUrl=${INVENIORDM_API_BASE_URL:} inveniordm.api.token=${INVENIORDM_API_TOKEN} diff --git a/pass-deposit-services/deposit-core/src/test/java/org/eclipse/pass/deposit/config/spring/AwsParamStoreConfigTest.java b/pass-deposit-services/deposit-core/src/test/java/org/eclipse/pass/deposit/config/spring/AwsParamStoreConfigTest.java index 3d8deb84..8f91edcf 100644 --- a/pass-deposit-services/deposit-core/src/test/java/org/eclipse/pass/deposit/config/spring/AwsParamStoreConfigTest.java +++ b/pass-deposit-services/deposit-core/src/test/java/org/eclipse/pass/deposit/config/spring/AwsParamStoreConfigTest.java @@ -49,6 +49,7 @@ dspace.api.url=http://localhost:8000/api dspace.website.url=http://localhost:8000/website dspace.collection.handle=1234/1 + dspace.user.agent=test-pass-user-agent """ ) @ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) diff --git a/pass-deposit-services/deposit-core/src/test/java/org/eclipse/pass/deposit/service/AbstractSubmissionIT.java b/pass-deposit-services/deposit-core/src/test/java/org/eclipse/pass/deposit/service/AbstractSubmissionIT.java index a27ace78..1311f554 100644 --- a/pass-deposit-services/deposit-core/src/test/java/org/eclipse/pass/deposit/service/AbstractSubmissionIT.java +++ b/pass-deposit-services/deposit-core/src/test/java/org/eclipse/pass/deposit/service/AbstractSubmissionIT.java @@ -15,6 +15,7 @@ */ package org.eclipse.pass.deposit.service; +import static com.github.tomakehurst.wiremock.client.WireMock.equalTo; import static com.github.tomakehurst.wiremock.client.WireMock.get; import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor; import static com.github.tomakehurst.wiremock.client.WireMock.ok; @@ -29,6 +30,7 @@ import org.eclipse.pass.deposit.AbstractDepositSubmissionIT; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.http.HttpHeaders; /** * @author Elliot Metsger (emetsger@jhu.edu) @@ -90,6 +92,32 @@ protected void verifyDSpaceApiStubs(int expectedCount) { urlEqualTo("/dspace/api/submission/workspaceitems?owningCollection=collectionuuid&embed=item"))); WireMock.verify(expectedCount, patchRequestedFor(urlEqualTo("/dspace/api/submission/workspaceitems/1"))); WireMock.verify(expectedCount, postRequestedFor(urlEqualTo("/dspace/api/workflow/workflowitems"))); + + // If no calls expected, don't check for user-agent headers. + if (expectedCount == 0) { + return; + } + + WireMock.verify(getRequestedFor(urlEqualTo("/dspace/api/security/csrf")) + .withHeader(HttpHeaders.USER_AGENT, equalTo("test-pass-user-agent")) + ); + WireMock.verify(postRequestedFor(urlEqualTo("/dspace/api/authn/login")) + .withHeader(HttpHeaders.USER_AGENT, equalTo("test-pass-user-agent")) + ); + WireMock.verify(getRequestedFor( + urlEqualTo("/dspace/api/discover/search/objects?query=handle:collectionhandle")) + .withHeader(HttpHeaders.USER_AGENT, equalTo("test-pass-user-agent")) + ); + WireMock.verify(postRequestedFor( + urlEqualTo("/dspace/api/submission/workspaceitems?owningCollection=collectionuuid&embed=item")) + .withHeader(HttpHeaders.USER_AGENT, equalTo("test-pass-user-agent")) + ); + WireMock.verify(patchRequestedFor(urlEqualTo("/dspace/api/submission/workspaceitems/1")) + .withHeader(HttpHeaders.USER_AGENT, equalTo("test-pass-user-agent")) + ); + WireMock.verify(postRequestedFor(urlEqualTo("/dspace/api/workflow/workflowitems")) + .withHeader(HttpHeaders.USER_AGENT, equalTo("test-pass-user-agent")) + ); } } diff --git a/pass-deposit-services/deposit-core/src/test/java/org/eclipse/pass/deposit/service/SubmissionProcessorIT.java b/pass-deposit-services/deposit-core/src/test/java/org/eclipse/pass/deposit/service/SubmissionProcessorIT.java index c392b05e..15d8472f 100644 --- a/pass-deposit-services/deposit-core/src/test/java/org/eclipse/pass/deposit/service/SubmissionProcessorIT.java +++ b/pass-deposit-services/deposit-core/src/test/java/org/eclipse/pass/deposit/service/SubmissionProcessorIT.java @@ -82,7 +82,8 @@ "dspace.server=localhost:9030", "dspace.api.url=http://localhost:9030/dspace/api", "dspace.website.url=http://localhost:9030/dspace/website", - "dspace.collection.handle=collectionhandle" + "dspace.collection.handle=collectionhandle", + "dspace.user.agent=test-pass-user-agent" }) @WireMockTest(httpPort = 9030) public class SubmissionProcessorIT extends AbstractSubmissionIT { diff --git a/pass-deposit-services/deposit-core/src/test/resources/test-application.properties b/pass-deposit-services/deposit-core/src/test/resources/test-application.properties index 4b8ba67f..1ad40034 100644 --- a/pass-deposit-services/deposit-core/src/test/resources/test-application.properties +++ b/pass-deposit-services/deposit-core/src/test/resources/test-application.properties @@ -28,3 +28,4 @@ dspace.password=test dspace.api.url=http://localhost:8000/api dspace.website.url=http://localhost:8000/website dspace.collection.handle=1234/1 +dspace.user.agent=test-pass-user-agent