diff --git a/fda-table-service/Dockerfile b/fda-table-service/Dockerfile index bef6bcef18c4f3967aa0ab6dfecc4848841f8b7c..1640c9ce44afd311e43aa11f681db6577ff322bb 100644 --- a/fda-table-service/Dockerfile +++ b/fda-table-service/Dockerfile @@ -14,6 +14,8 @@ COPY --from=dependency /root/.m2/repository/at/tuwien /root/.m2/repository/at/tu COPY ./rest-service ./rest-service COPY ./services ./services COPY ./report ./report +COPY ./gateway ./gateway +COPY ./api ./api RUN mvn -q clean package -DskipTests diff --git a/fda-table-service/api/pom.xml b/fda-table-service/api/pom.xml index dfa54dc753e804ea17501cf6451424936d2915a1..a89f234fde1cbe809ace2bdfcf892f319c27f3d5 100644 --- a/fda-table-service/api/pom.xml +++ b/fda-table-service/api/pom.xml @@ -11,9 +11,4 @@ <artifactId>api</artifactId> - <properties> - <maven.compiler.source>11</maven.compiler.source> - <maven.compiler.target>11</maven.compiler.target> - </properties> - </project> \ No newline at end of file diff --git a/fda-table-service/gateway/pom.xml b/fda-table-service/gateway/pom.xml index 41a83e81356c7633027984b55b96b8143cf84aa9..7dfdc8ff5dd216409a56159be3365d6b11187847 100644 --- a/fda-table-service/gateway/pom.xml +++ b/fda-table-service/gateway/pom.xml @@ -10,6 +10,7 @@ <modelVersion>4.0.0</modelVersion> <artifactId>gateway</artifactId> + <dependencies> <dependency> <groupId>at.tuwien</groupId> @@ -19,9 +20,4 @@ </dependency> </dependencies> - <properties> - <maven.compiler.source>11</maven.compiler.source> - <maven.compiler.target>11</maven.compiler.target> - </properties> - </project> \ No newline at end of file diff --git a/fda-table-service/gateway/src/main/java/at/tuwien/config/ZenodoConfig.java b/fda-table-service/gateway/src/main/java/at/tuwien/config/ZenodoConfig.java index 15df9c3db026b5b9872b1cd43ab093c46e285a7b..1798b96c3e76f8338d832996c68c3cedcafbbbc0 100644 --- a/fda-table-service/gateway/src/main/java/at/tuwien/config/ZenodoConfig.java +++ b/fda-table-service/gateway/src/main/java/at/tuwien/config/ZenodoConfig.java @@ -1,5 +1,6 @@ package at.tuwien.config; +import at.tuwien.gateway.ZenodoTemplateInterceptor; import lombok.Getter; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.client.RestTemplateBuilder; @@ -9,6 +10,7 @@ import org.springframework.web.client.RestTemplate; import org.springframework.web.util.DefaultUriTemplateHandler; import javax.validation.constraints.NotNull; +import java.util.List; @Configuration public class ZenodoConfig { @@ -27,9 +29,11 @@ public class ZenodoConfig { public RestTemplate zenodo() { DefaultUriTemplateHandler defaultUriTemplateHandler = new DefaultUriTemplateHandler(); defaultUriTemplateHandler.setBaseUrl(zenodoEndpoint); - return new RestTemplateBuilder() + final RestTemplate template = new RestTemplateBuilder() .uriTemplateHandler(defaultUriTemplateHandler) .build(); + template.setInterceptors(List.of(new ZenodoTemplateInterceptor())); + return template; } } diff --git a/fda-table-service/gateway/src/main/java/at/tuwien/gateway/ZenodoGateway.java b/fda-table-service/gateway/src/main/java/at/tuwien/gateway/ZenodoGateway.java index 02564d73edd151f6bdc215abd4026c46fea7fce4..f1bcc0eee27d3aec77bb271a012afa05fd0a69d1 100644 --- a/fda-table-service/gateway/src/main/java/at/tuwien/gateway/ZenodoGateway.java +++ b/fda-table-service/gateway/src/main/java/at/tuwien/gateway/ZenodoGateway.java @@ -5,12 +5,12 @@ import at.tuwien.config.ZenodoConfig; import at.tuwien.exception.ZenodoApiException; import at.tuwien.exception.ZenodoAuthenticationException; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpMethod; -import org.springframework.http.ResponseEntity; +import org.springframework.http.*; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; import java.util.Arrays; +import java.util.Collections; import java.util.List; @Component @@ -37,4 +37,17 @@ public class ZenodoGateway { return Arrays.asList(response.getBody()); } + + public DepositDto createDeposit() throws ZenodoAuthenticationException, ZenodoApiException { + final ResponseEntity<DepositDto> response = zenodoRestTemplate.exchange("/api/deposit/depositions?access_token={token}", + HttpMethod.POST, null, DepositDto.class, zenodoConfig.getZenodoApiKey()); + if (response.getStatusCode().is4xxClientError()) { + throw new ZenodoAuthenticationException("Token is missing or invalid."); + } + if (response.getBody() == null) { + throw new ZenodoApiException("Endpoint returned null body"); + } + + return response.getBody(); + } } diff --git a/fda-table-service/gateway/src/main/java/at/tuwien/gateway/ZenodoTemplateInterceptor.java b/fda-table-service/gateway/src/main/java/at/tuwien/gateway/ZenodoTemplateInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..b0015e0506a969160082ffd28cd7ca1f359b5c7e --- /dev/null +++ b/fda-table-service/gateway/src/main/java/at/tuwien/gateway/ZenodoTemplateInterceptor.java @@ -0,0 +1,23 @@ +package at.tuwien.gateway; + +import org.springframework.http.HttpRequest; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; + +import java.io.IOException; + +@Service +public class ZenodoTemplateInterceptor implements ClientHttpRequestInterceptor { + + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) + throws IOException { + ClientHttpResponse response = execution.execute(request, body); + response.getHeaders().add("Content-Type", "application/json"); + response.getHeaders().add("Accept", "application/json"); + return response; + } +} diff --git a/fda-table-service/rest-service/src/test/java/at/tuwien/gateway/ZenodoIntegrationTest.java b/fda-table-service/rest-service/src/test/java/at/tuwien/gateway/ZenodoIntegrationTest.java index 6014546d4954fd6b39e9ddd60e698262da2516f5..171f06ac9c5b5f97a881533d049d2e1e737003b8 100644 --- a/fda-table-service/rest-service/src/test/java/at/tuwien/gateway/ZenodoIntegrationTest.java +++ b/fda-table-service/rest-service/src/test/java/at/tuwien/gateway/ZenodoIntegrationTest.java @@ -45,8 +45,13 @@ public class ZenodoIntegrationTest extends BaseUnitTest { /* test */ final List<DepositDto> response = zenodoGateway.listDeposits(); - assertEquals(1, response.size()); - assertEquals(DEPOSIT_1_ID, response.get(0).getId()); + } + + @Test + public void createDeposit_succeeds() throws ZenodoApiException, ZenodoAuthenticationException { + + /* test */ + final DepositDto response = zenodoGateway.createDeposit(); } } \ No newline at end of file diff --git a/fda-table-service/rest-service/src/test/java/at/tuwien/gateway/ZenodoUnitTest.java b/fda-table-service/rest-service/src/test/java/at/tuwien/gateway/ZenodoUnitTest.java index 1cd3091f8992db23b2c190a453206652d33f991e..e71d6991f7810c5571bb3792ee629ee90918e2f5 100644 --- a/fda-table-service/rest-service/src/test/java/at/tuwien/gateway/ZenodoUnitTest.java +++ b/fda-table-service/rest-service/src/test/java/at/tuwien/gateway/ZenodoUnitTest.java @@ -74,4 +74,24 @@ public class ZenodoUnitTest extends BaseUnitTest { }); } + @Test + public void createDeposit_succeed() throws ZenodoApiException, ZenodoAuthenticationException { + when(zenodoTemplate.exchange(anyString(), eq(HttpMethod.POST), eq(null), eq(DepositDto.class), anyString())) + .thenReturn(ResponseEntity.ok(DEPOSIT_1_DTO)); + + /* test */ + final DepositDto response = zenodoGateway.createDeposit(); + } + + @Test + public void createDeposit_noToken_fails() { + when(zenodoTemplate.exchange(anyString(), eq(HttpMethod.POST), eq(null), eq(DepositDto.class), anyString())) + .thenReturn(ResponseEntity.status(HttpStatus.UNAUTHORIZED).build()); + + /* test */ + assertThrows(ZenodoAuthenticationException.class, () -> { + zenodoGateway.createDeposit(); + }); + } + } \ No newline at end of file