diff --git a/legal-core/pom.xml b/legal-core/pom.xml index fbd8ed594f75f220e36beca8a4a3a0e2a2031b1c..44558fe4c2e9f1cac3494c381762280b5227838f 100644 --- a/legal-core/pom.xml +++ b/legal-core/pom.xml @@ -24,7 +24,6 @@ <dependency> <groupId>org.opengroup.osdu</groupId> <artifactId>os-core-common</artifactId> - <version>0.0.13</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> @@ -90,7 +89,7 @@ <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> - <version>2.9.9.3</version> + <version>2.9.10</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> diff --git a/legal-core/src/main/java/org/opengroup/osdu/legal/api/LegalTagApi.java b/legal-core/src/main/java/org/opengroup/osdu/legal/api/LegalTagApi.java index af147a96c7577b19fd5ab57bba6b0344fd32dd37..f78078a8db8184d95b28dc947367ac1cd46608fb 100644 --- a/legal-core/src/main/java/org/opengroup/osdu/legal/api/LegalTagApi.java +++ b/legal-core/src/main/java/org/opengroup/osdu/legal/api/LegalTagApi.java @@ -1,5 +1,6 @@ package org.opengroup.osdu.legal.api; +import com.google.gson.Gson; import org.opengroup.osdu.legal.countries.LegalTagCountriesService; import org.opengroup.osdu.legal.logging.AuditLogger; import org.opengroup.osdu.legal.tags.LegalTagService; @@ -28,6 +29,9 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import java.util.HashMap; +import java.util.Map; + @RestController @RequestMapping(path= "/") @Validated @@ -74,11 +78,11 @@ public class LegalTagApi { @PreAuthorize("@authorizationFilter.hasPermission('" + ServiceConfig.LEGAL_USER + "', '" + ServiceConfig.LEGAL_EDITOR + "', '" + ServiceConfig.LEGAL_ADMIN + "')") @GetMapping("/legaltags/{name}") - public ResponseEntity<LegalTagDto> getLegalTag(@PathVariable("name") @ValidName String name) { + public ResponseEntity getLegalTag(@PathVariable("name") @ValidName String name) { LegalTagDto output = legalTagService.get(name, requestInfo.getTenantInfo().getName()); if (output == null) - return new ResponseEntity<LegalTagDto>(output, HttpStatus.NOT_FOUND); + return new ResponseEntity<>(createNotFoundBody(), HttpStatus.NOT_FOUND); else { return new ResponseEntity<LegalTagDto>(output, HttpStatus.OK); } @@ -137,4 +141,10 @@ public class LegalTagApi { return new ResponseEntity<ReadablePropertyValues>(output, HttpStatus.OK); } + + private String createNotFoundBody() { + final Map<String, String> body = new HashMap<>(); + body.put("error", "Not found."); + return new Gson().toJson(body); + } } diff --git a/legal-core/src/main/java/org/opengroup/osdu/legal/middleware/GlobalExceptionMapper.java b/legal-core/src/main/java/org/opengroup/osdu/legal/middleware/GlobalExceptionMapper.java index 698eeae1c70fd3fd876f8fd74acd20caddfc52f0..eef26642158be23a7b095a98ce824ede5b3b8307 100644 --- a/legal-core/src/main/java/org/opengroup/osdu/legal/middleware/GlobalExceptionMapper.java +++ b/legal-core/src/main/java/org/opengroup/osdu/legal/middleware/GlobalExceptionMapper.java @@ -30,12 +30,16 @@ import javassist.NotFoundException; import org.opengroup.osdu.core.common.logging.JaxRsDpsLog; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.lang.NonNull; import org.springframework.security.access.AccessDeniedException; +import org.springframework.web.HttpRequestMethodNotSupportedException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.context.request.WebRequest; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; import org.opengroup.osdu.core.common.model.http.AppException; @@ -115,6 +119,17 @@ public class GlobalExceptionMapper extends ResponseEntityExceptionHandler { "An unknown error has occurred.")); } + @Override + @NonNull + protected ResponseEntity<Object> handleHttpRequestMethodNotSupported(@NonNull HttpRequestMethodNotSupportedException e, + @NonNull HttpHeaders headers, + @NonNull HttpStatus status, + @NonNull WebRequest request) { + return this.getErrorResponse( + new AppException(HttpStatus.METHOD_NOT_ALLOWED.value(), "Method not found.", + "Method not found.", e)); + } + private ResponseEntity<Object> getErrorResponse(AppException e) { String exceptionMsg = e.getError().getMessage(); diff --git a/legal-core/src/main/resources/DefaultCountryCode.json b/legal-core/src/main/resources/DefaultCountryCode.json index 22f0e9b0bda272b48a1aed2ed54302da0baccae1..4e5b17e3b34d2f1aa8f9a1b54059eb073cf00e00 100644 --- a/legal-core/src/main/resources/DefaultCountryCode.json +++ b/legal-core/src/main/resources/DefaultCountryCode.json @@ -290,7 +290,7 @@ "name": "Colombia", "alpha2": "CO", "numeric": 170, - "residencyRisk": "Default", + "residencyRisk": "No restriction", "typesNotApplyDataResidency": ["Transferred Data"] }, { "name": "Costa Rica", @@ -326,7 +326,7 @@ "name": "Czech Republic", "alpha2": "CZ", "numeric": 203, - "residencyRisk": "Default", + "residencyRisk": "No restriction", "typesNotApplyDataResidency": ["Transferred Data"] }, { "name": "Germany", @@ -590,7 +590,7 @@ "name": "Hungary", "alpha2": "HU", "numeric": 348, - "residencyRisk": "Default", + "residencyRisk": "No restriction", "typesNotApplyDataResidency": ["Transferred Data"] }, { "name": "Indonesia", @@ -1358,7 +1358,7 @@ "name": "Ukraine", "alpha2": "UA", "numeric": 804, - "residencyRisk": "Default", + "residencyRisk": "No restriction", "typesNotApplyDataResidency": ["Transferred Data"] }, { "name": "Uganda", @@ -1388,7 +1388,7 @@ "name": "Uzbekistan", "alpha2": "UZ", "numeric": 860, - "residencyRisk": "Default", + "residencyRisk": "No restriction", "typesNotApplyDataResidency": ["Transferred Data"] }, { "name": "Saint Vincent and the Grenadines", diff --git a/legal-core/src/test/java/org/opengroup/osdu/legal/api/LegalTagApiTests.java b/legal-core/src/test/java/org/opengroup/osdu/legal/api/LegalTagApiTests.java index 336af600160b7346854ed08d1c62d4de94c0d43c..a62d12e014ef4f0433afb7f35e7cfc3bf048cc3b 100644 --- a/legal-core/src/test/java/org/opengroup/osdu/legal/api/LegalTagApiTests.java +++ b/legal-core/src/test/java/org/opengroup/osdu/legal/api/LegalTagApiTests.java @@ -102,7 +102,7 @@ public class LegalTagApiTests { ResponseEntity<LegalTagDto> result = sut.getLegalTag("k"); assertEquals(404, result.getStatusCodeValue()); - assertEquals(null, result.getBody()); + assertEquals("{\"error\":\"Not found.\"}", result.getBody()); } @Test diff --git a/legal-core/src/test/java/org/opengroup/osdu/legal/countries/LegalTagCountriesServiceTests.java b/legal-core/src/test/java/org/opengroup/osdu/legal/countries/LegalTagCountriesServiceTests.java index a9e664c52f67454fb955d1842555889dda122609..4e98122945083dcb4dad11f18541b6f3aa8411a7 100644 --- a/legal-core/src/test/java/org/opengroup/osdu/legal/countries/LegalTagCountriesServiceTests.java +++ b/legal-core/src/test/java/org/opengroup/osdu/legal/countries/LegalTagCountriesServiceTests.java @@ -63,7 +63,7 @@ public class LegalTagCountriesServiceTests { @Test public void should_returnNormalValidCoo_withoutSpecialDataType() { Map<String, String> validCoos = this.sut.getValidCOOs("Public Domain Data"); - Assert.assertEquals(54, validCoos.size()); + Assert.assertEquals(59, validCoos.size()); } @Test @@ -90,7 +90,7 @@ public class LegalTagCountriesServiceTests { } } Map<String, String> validCoos = this.sut.getValidCOOs("Public Domain Data"); - Assert.assertEquals(55, validCoos.size()); + Assert.assertEquals(60, validCoos.size()); } @Test @@ -103,6 +103,6 @@ public class LegalTagCountriesServiceTests { } //the empty array should already be there, or null pointer exception would be thrown Map<String, String> validCoos = this.sut.getValidCOOs("Public Domain Data"); - Assert.assertEquals(55, validCoos.size()); + Assert.assertEquals(60, validCoos.size()); } } diff --git a/legal-core/src/test/java/org/opengroup/osdu/legal/middleware/GlobalExceptionMapperTests.java b/legal-core/src/test/java/org/opengroup/osdu/legal/middleware/GlobalExceptionMapperTests.java index 8791fc8e594cb6102c69668061a255330cceab65..2a74171a4d1164ceff02a0189feb7166e7c1bf41 100644 --- a/legal-core/src/test/java/org/opengroup/osdu/legal/middleware/GlobalExceptionMapperTests.java +++ b/legal-core/src/test/java/org/opengroup/osdu/legal/middleware/GlobalExceptionMapperTests.java @@ -1,17 +1,22 @@ package org.opengroup.osdu.legal.middleware; import static org.junit.Assert.assertEquals; +import static org.powermock.api.mockito.PowerMockito.mock; import javassist.NotFoundException; import org.opengroup.osdu.core.common.model.http.AppException; import org.opengroup.osdu.core.common.logging.JaxRsDpsLog; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.context.request.WebRequest; @RunWith(MockitoJUnitRunner.class) public class GlobalExceptionMapperTests { @@ -60,6 +65,14 @@ public class GlobalExceptionMapperTests { //assertEquals(null, response.getBody().getMessage()); } @Test + public void should_use405ValueInResponse_When_HttpRequestMethodNotSupportedExceptionIsHandledByGlobalExceptionMapper() { + HttpHeaders httpHeaders = mock(HttpHeaders.class); + WebRequest webRequest = mock(WebRequest.class); + HttpRequestMethodNotSupportedException exception = new HttpRequestMethodNotSupportedException("any message"); + ResponseEntity<Object> response = sut.handleHttpRequestMethodNotSupported(exception, httpHeaders, HttpStatus.METHOD_NOT_ALLOWED, webRequest); + assertEquals(405, response.getStatusCodeValue()); + } + @Test public void should_useGenericValuesInResponse_When_ExceptionIsHandledByGlobalExceptionMapper() { Exception exception = new Exception("any message"); diff --git a/legal-core/src/test/java/org/opengroup/osdu/legal/middleware/LegalFilterTest.java b/legal-core/src/test/java/org/opengroup/osdu/legal/middleware/LegalFilterTest.java new file mode 100644 index 0000000000000000000000000000000000000000..347ec6502434a2371999a88356b6f9f3b33f3e30 --- /dev/null +++ b/legal-core/src/test/java/org/opengroup/osdu/legal/middleware/LegalFilterTest.java @@ -0,0 +1,65 @@ +package org.opengroup.osdu.legal.middleware; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; +import org.opengroup.osdu.core.common.logging.JaxRsDpsLog; +import org.opengroup.osdu.core.common.model.http.DpsHeaders; +import org.opengroup.osdu.core.common.model.http.Request; +import org.opengroup.osdu.core.common.model.http.RequestInfo; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import java.io.IOException; +import java.util.Collections; + +@RunWith(MockitoJUnitRunner.class) +public class LegalFilterTest { + + @Mock + private DpsHeaders headers; + + @Mock + private RequestInfo requestInfo; + + @Mock + private JaxRsDpsLog logger; + + @InjectMocks + private LegalFilter legalFilter; + + @Test + public void shouldSetCorrectResponseHeaders() throws IOException, ServletException { + HttpServletRequest httpServletRequest = Mockito.mock(HttpServletRequest.class); + HttpServletResponse httpServletResponse = Mockito.mock(HttpServletResponse.class); + FilterChain filterChain = Mockito.mock(FilterChain.class); + Mockito.when(requestInfo.getUri()).thenReturn("https://test.com"); + Mockito.when(requestInfo.isHttps()).thenReturn(true); + Mockito.when(headers.getAuthorization()).thenReturn("authorization-header-value"); + Mockito.when(headers.getCorrelationId()).thenReturn("correlation-id-value"); + Mockito.when(httpServletRequest.getMethod()).thenReturn("POST"); + + legalFilter.doFilter(httpServletRequest, httpServletResponse, filterChain); + + Mockito.verify(httpServletResponse).addHeader("Access-Control-Allow-Origin", Collections.singletonList("*").toString()); + Mockito.verify(httpServletResponse).addHeader("Access-Control-Allow-Headers", Collections.singletonList("origin, content-type, accept, authorization, data-partition-id, correlation-id, appkey").toString()); + Mockito.verify(httpServletResponse).addHeader("Access-Control-Allow-Methods", Collections.singletonList("GET, POST, PUT, DELETE, OPTIONS, HEAD").toString()); + Mockito.verify(httpServletResponse).addHeader("Access-Control-Allow-Credentials", Collections.singletonList("true").toString()); + Mockito.verify(httpServletResponse).addHeader("X-Frame-Options", Collections.singletonList("DENY").toString()); + Mockito.verify(httpServletResponse).addHeader("X-XSS-Protection", Collections.singletonList("1; mode=block").toString()); + Mockito.verify(httpServletResponse).addHeader("X-Content-Type-Options", Collections.singletonList("nosniff").toString()); + Mockito.verify(httpServletResponse).addHeader("Cache-Control", Collections.singletonList("no-cache, no-store, must-revalidate").toString()); + Mockito.verify(httpServletResponse).addHeader("Content-Security-Policy", Collections.singletonList("default-src 'self'").toString()); + Mockito.verify(httpServletResponse).addHeader("Strict-Transport-Security", Collections.singletonList("max-age=31536000; includeSubDomains").toString()); + Mockito.verify(httpServletResponse).addHeader("Expires", Collections.singletonList("0").toString()); + Mockito.verify(httpServletResponse).addHeader("correlation-id", "correlation-id-value"); + Mockito.verify(filterChain).doFilter(httpServletRequest, httpServletResponse); + Mockito.verify(logger).request(Mockito.any(Request.class)); + } +} diff --git a/legal-core/src/test/java/org/opengroup/osdu/legal/tags/validation/ExportClassificationValidatorTests.java b/legal-core/src/test/java/org/opengroup/osdu/legal/tags/validation/ExportClassificationValidatorTests.java index e23f2c9f9a2fa89af43231fea6ba39b1a501baa9..d8b03e710726c3e0d4c46bdf1b254246d69e2d9e 100644 --- a/legal-core/src/test/java/org/opengroup/osdu/legal/tags/validation/ExportClassificationValidatorTests.java +++ b/legal-core/src/test/java/org/opengroup/osdu/legal/tags/validation/ExportClassificationValidatorTests.java @@ -20,7 +20,7 @@ public class ExportClassificationValidatorTests { @Test public void should_ReturnTrue_When_GivenValidEccnPredefinedValue(){ - assertTrue(sut.isValid(AllowedLegaltagPropertyValues.EAR99, null)); + assertTrue(sut.isValid(AllowedLegaltagPropertyValues.ECCN_EAR99, null)); } @Test public void should_ReturnTrue_When_GivenValidEccn(){ diff --git a/pom.xml b/pom.xml index 368cb60de33ab2b17a04f7e486d11bcb50fa1a29..e3f09a80bf93097d49dc7c98db7467f4d99a8f2f 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ <maven.compiler.source>1.8</maven.compiler.source> <docker.image.prefix>opendes</docker.image.prefix> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <os-core-common.version>0.0.18</os-core-common.version> </properties> <licenses> @@ -59,4 +60,15 @@ <url>https://community.opengroup.org/api/v4/projects/74/packages/maven</url> </snapshotRepository> </distributionManagement> + + <dependencyManagement> + <dependencies> + <dependency> + <groupId>org.opengroup.osdu</groupId> + <artifactId>os-core-common</artifactId> + <version>${os-core-common.version}</version> + </dependency> + </dependencies> + </dependencyManagement> + </project> diff --git a/provider/legal-aws/pom.xml b/provider/legal-aws/pom.xml index 8cea0ccfe29b2728e70318be77194c57c8485e2e..b7301c50633cc5e4902ccad664e992d8eb0a87cc 100644 --- a/provider/legal-aws/pom.xml +++ b/provider/legal-aws/pom.xml @@ -44,7 +44,6 @@ <dependency> <groupId>org.opengroup.osdu</groupId> <artifactId>os-core-common</artifactId> - <version>0.0.13</version> </dependency> <dependency> <groupId>org.opengroup.osdu.legal</groupId> diff --git a/provider/legal-azure/pom.xml b/provider/legal-azure/pom.xml index 701def5c19ae4ae6e65132bfe89cdaafdda7dbe8..67c6feadab517a89932e208844901518c673f7db 100644 --- a/provider/legal-azure/pom.xml +++ b/provider/legal-azure/pom.xml @@ -40,12 +40,11 @@ <dependency> <groupId>org.opengroup.osdu</groupId> <artifactId>os-core-common</artifactId> - <version>0.0.13</version> </dependency> <dependency> <groupId>org.opengroup.osdu.legal</groupId> <artifactId>legal-core</artifactId> - <version>0.0.3</version> + <version>0.0.5-SNAPSHOT</version> </dependency> <dependency> <groupId>javax.inject</groupId> diff --git a/provider/legal-byoc/pom.xml b/provider/legal-byoc/pom.xml index 1287b5f3692a06b77a2f884434f59ba2c59f6e4a..15cec91a5154d5cbbe97ba363b773ecf8ffe1614 100644 --- a/provider/legal-byoc/pom.xml +++ b/provider/legal-byoc/pom.xml @@ -17,7 +17,6 @@ <dependency> <groupId>org.opengroup.osdu</groupId> <artifactId>os-core-common</artifactId> - <version>0.0.13</version> </dependency> <dependency> <groupId>org.opengroup.osdu.legal</groupId> diff --git a/provider/legal-gcp/pom.xml b/provider/legal-gcp/pom.xml index 02166dcdc45233ff845fbaf8613aa1b00deac3b9..7b4f228bfc245164ae1dc852127628988f05a473 100644 --- a/provider/legal-gcp/pom.xml +++ b/provider/legal-gcp/pom.xml @@ -48,12 +48,12 @@ <dependency> <groupId>org.opengroup.osdu</groupId> <artifactId>os-core-common</artifactId> - <version>0.0.13</version> + <version>0.0.18</version> </dependency> <dependency> <groupId>org.opengroup.osdu</groupId> <artifactId>core-lib-gcp</artifactId> - <version>0.1.17</version> + <version>0.1.21</version> </dependency> <dependency> <groupId>javax.servlet</groupId> @@ -98,7 +98,7 @@ <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> - <version>2.9.9.3</version> + <version>2.9.10</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> diff --git a/provider/legal-gcp/src/main/java/org/opengroup/osdu/legal/di/AppengineLogFactory.java b/provider/legal-gcp/src/main/java/org/opengroup/osdu/legal/di/AppengineLogFactory.java deleted file mode 100644 index 11331edbe984844026b06f038b77901ce85cd93f..0000000000000000000000000000000000000000 --- a/provider/legal-gcp/src/main/java/org/opengroup/osdu/legal/di/AppengineLogFactory.java +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2017-2019, Schlumberger -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package org.opengroup.osdu.legal.di; - -import org.opengroup.osdu.core.common.logging.ILogger; -import org.opengroup.osdu.core.gcp.logging.logger.AppEngineLoggingProvider; - -import org.springframework.beans.factory.FactoryBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Lazy; -import org.springframework.context.annotation.Primary; -import org.springframework.stereotype.Component; - -@ConditionalOnProperty(name="disable.appengine.log.factory", havingValue = "false", matchIfMissing = true ) -@Component -@Primary -@Lazy -public class AppengineLogFactory implements FactoryBean<ILogger> { - - private AppEngineLoggingProvider appEngineLoggingProvider = new AppEngineLoggingProvider(); - - @Override - public ILogger getObject() throws Exception { - return appEngineLoggingProvider.getLogger(); - } - - @Override - public Class<?> getObjectType() { - return ILogger.class; - } -} diff --git a/provider/legal-ibm/pom.xml b/provider/legal-ibm/pom.xml index f0a35b15aab4cdc798ba0cec922ed9e4905fac0f..18673e544a706354376c7ce36c8006183c176813 100644 --- a/provider/legal-ibm/pom.xml +++ b/provider/legal-ibm/pom.xml @@ -13,7 +13,7 @@ <artifactId>legal-ibm</artifactId> <packaging>jar</packaging> <properties> - <osdu.ibmcore.version>0.0.14-SNAPSHOT</osdu.ibmcore.version> + <os-core-lib-ibm.version>0.0.18</os-core-lib-ibm.version> </properties> @@ -44,7 +44,7 @@ <dependency> <groupId>org.opengroup.osdu</groupId> <artifactId>os-core-lib-ibm</artifactId> - <version>${osdu.ibmcore.version}</version> + <version>${os-core-lib-ibm.version}</version> </dependency> <dependency> diff --git a/testing/legal-test-ibm/pom.xml b/testing/legal-test-ibm/pom.xml index 653cb5355e20dfbf84e3804772caaae99ff00a00..52b36a2fa716bcbd391f32af598e5f69ba0a9153 100644 --- a/testing/legal-test-ibm/pom.xml +++ b/testing/legal-test-ibm/pom.xml @@ -22,6 +22,7 @@ <maven.compiler.source>1.8</maven.compiler.source> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.main.basedir>${project.basedir}</project.main.basedir> + <os-core-lib-ibm.version>0.0.18</os-core-lib-ibm.version> </properties> <dependencies> <dependency> @@ -33,7 +34,7 @@ <dependency> <groupId>org.opengroup.osdu</groupId> <artifactId>os-core-lib-ibm</artifactId> - <version>0.0.14-SNAPSHOT</version> + <version>${os-core-lib-ibm.version}</version> </dependency> <!-- Tests -->