diff --git a/provider/storage-azure/src/main/resources/application.properties b/provider/storage-azure/src/main/resources/application.properties index 2588cba82036ae9212cda4642bb87e8622e4fabb..0808e3221a28e23911422d87d042d87833748d54 100644 --- a/provider/storage-azure/src/main/resources/application.properties +++ b/provider/storage-azure/src/main/resources/application.properties @@ -127,3 +127,4 @@ springdoc.swagger-ui.doc-expansion=none #Collaboration context featureflag name:partition specific featureFlag.strategy=dataPartition +collaborationFilter.excludedPaths=info,swagger,health,api-docs diff --git a/storage-core/src/main/java/org/opengroup/osdu/storage/util/CollaborationFilter.java b/storage-core/src/main/java/org/opengroup/osdu/storage/util/CollaborationFilter.java index 3beaa8b6857462ed68d3dafb19ead7c881aff421..628653f6f25a3ae1aa23c0f3f1b571c055899913 100644 --- a/storage-core/src/main/java/org/opengroup/osdu/storage/util/CollaborationFilter.java +++ b/storage-core/src/main/java/org/opengroup/osdu/storage/util/CollaborationFilter.java @@ -5,6 +5,7 @@ import org.apache.http.HttpStatus; import org.opengroup.osdu.core.common.feature.IFeatureFlag; import org.opengroup.osdu.core.common.model.http.AppError; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; import org.springframework.stereotype.Component; import javax.servlet.Filter; @@ -16,6 +17,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; +import java.util.List; import static org.opengroup.osdu.storage.util.StringConstants.COLLABORATIONS_FEATURE_NAME; @@ -26,20 +28,18 @@ public class CollaborationFilter implements Filter { @Autowired public IFeatureFlag collaborationFeatureFlag; + @Value("#{'${collaborationFilter.excludedPaths:info,swagger,health,api-docs}'.split(',')}") + private List<String> excludedPaths; + @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; - if(httpRequest.getRequestURI().contains("info") || - httpRequest.getRequestURI().contains("swagger") || - httpRequest.getRequestURI().contains("health") || - httpRequest.getRequestURI().contains("api-docs")) - return; HttpServletResponse httpResponse = (HttpServletResponse) response; - if (!collaborationFeatureFlag.isFeatureEnabled(COLLABORATIONS_FEATURE_NAME)) { + if (!isExcludedPath(httpRequest) && !collaborationFeatureFlag.isFeatureEnabled(COLLABORATIONS_FEATURE_NAME)) { String collaborationHeader = httpRequest.getHeader(X_COLLABORATION_HEADER_NAME); if (!Strings.isNullOrEmpty(collaborationHeader)) { httpResponse.setContentType(MediaType.APPLICATION_JSON_VALUE); @@ -59,4 +59,9 @@ public class CollaborationFilter implements Filter { return "{\"code\": " + appError.getCode() + ",\"reason\": \"" + appError.getReason() + "\",\"message\": \"" + appError.getMessage() + "\"}"; } + private boolean isExcludedPath(HttpServletRequest request) { + String path = request.getRequestURI().substring(request.getContextPath().length() + 1); + return excludedPaths.contains(path); + } + } diff --git a/storage-core/src/test/java/org/opengroup/osdu/storage/util/CollaborationFilterTest.java b/storage-core/src/test/java/org/opengroup/osdu/storage/util/CollaborationFilterTest.java index 39ba11271e00d6a7c4429e47b942a58f8a779b70..5037efd7b5a210ec0e009462ac873120a28db479 100644 --- a/storage-core/src/test/java/org/opengroup/osdu/storage/util/CollaborationFilterTest.java +++ b/storage-core/src/test/java/org/opengroup/osdu/storage/util/CollaborationFilterTest.java @@ -2,7 +2,6 @@ package org.opengroup.osdu.storage.util; import org.apache.http.HttpStatus; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; @@ -10,6 +9,7 @@ import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.opengroup.osdu.core.common.feature.IFeatureFlag; import org.opengroup.osdu.core.common.model.http.AppError; +import org.springframework.test.util.ReflectionTestUtils; import javax.servlet.FilterChain; import javax.servlet.ServletException; @@ -17,6 +17,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; +import java.util.Arrays; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; @@ -48,13 +49,15 @@ public class CollaborationFilterTest { public IFeatureFlag iCollaborationFeatureFlag; @Before public void setup() { + ReflectionTestUtils.setField(collaborationFilter, "excludedPaths", Arrays.asList("info", "swagger", "health", "api-docs")); initMocks(this); } @Test public void shouldThrowException_ifCollaborationHeaderProvided_whenCollaborationFeatureFlagDisabled() throws IOException, ServletException { when(httpServletRequest.getHeader(DATA_PARTITION_ID)).thenReturn(DATA_PARTITION); - when(httpServletRequest.getRequestURI()).thenReturn("https://my-service-url"); + when(httpServletRequest.getRequestURI()).thenReturn("https://my-service-url/api/storage/v2/"); + when(httpServletRequest.getContextPath()).thenReturn("/api/storage/v2/"); when(iCollaborationFeatureFlag.isFeatureEnabled(FEATURE_NAME)).thenReturn(false); when(httpServletRequest.getHeader(X_COLLABORATION_HEADER_NAME)).thenReturn(COLLABORATION_DIRECTIVES); when(httpServletResponse.getWriter()).thenReturn(writer);