diff --git a/notification-core/pom.xml b/notification-core/pom.xml
index 69d5f99b341a05db802f531f862883fc352af9af..771a747ec5b5b3a52898463f7cc61d2a99345cc3 100644
--- a/notification-core/pom.xml
+++ b/notification-core/pom.xml
@@ -37,6 +37,7 @@
8
${java.version}
${java.version}
+ 2.7.0
@@ -187,6 +188,24 @@
2.8.5
+
+
+ io.springfox
+ springfox-swagger2
+ ${springfox-version}
+
+
+ com.google.guava
+ guava
+
+
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${springfox-version}
+
+
org.powermock
powermock-api-mockito2
@@ -211,6 +230,11 @@
4.12
test
+
+ org.springframework
+ spring-test
+ test
+
diff --git a/notification-core/src/main/java/org/opengroup/osdu/notification/auth/AuthorizationFilter.java b/notification-core/src/main/java/org/opengroup/osdu/notification/auth/AuthorizationFilter.java
index 36bfc80393762c8fcee8abd64a82c39dda253e48..2eb23d060a1e3ce9e4abddd8fda4d2ce7a30e232 100644
--- a/notification-core/src/main/java/org/opengroup/osdu/notification/auth/AuthorizationFilter.java
+++ b/notification-core/src/main/java/org/opengroup/osdu/notification/auth/AuthorizationFilter.java
@@ -28,6 +28,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.RequestScope;
+import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
@Component("authorizationFilter")
@@ -35,6 +36,8 @@ import java.util.Arrays;
public class AuthorizationFilter {
private static final String BEARER_PREFIX = "Bearer ";
+ @Autowired
+ private HttpServletRequest request;
@Autowired
private IAuthorizationService authService;
@Autowired
@@ -51,6 +54,13 @@ public class AuthorizationFilter {
requestInfoExt.assignPartitionIdIfNotInHeader();
}
+ String path = request.getServletPath();
+ if ("GET".equals(request.getMethod())) {
+ if (path.equals("/swagger-ui.html")) {
+ return true;
+ }
+ }
+
if (Arrays.asList(requiredRoles).contains(Config.CRON) && requestInfoExt.isCronRequest()) {
dpsHeaders.put(DpsHeaders.USER_EMAIL, Config.CRON);
requestInfoExt.setHeaders(dpsHeaders);
diff --git a/notification-core/src/main/java/org/opengroup/osdu/notification/swagger/HomeController.java b/notification-core/src/main/java/org/opengroup/osdu/notification/swagger/HomeController.java
new file mode 100644
index 0000000000000000000000000000000000000000..3e568ff05233c163ec6e535e09e6ce06c09df98d
--- /dev/null
+++ b/notification-core/src/main/java/org/opengroup/osdu/notification/swagger/HomeController.java
@@ -0,0 +1,14 @@
+package org.opengroup.osdu.notification.swagger;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@Controller
+public class HomeController {
+
+ @RequestMapping(value = {"/", "/swagger"})
+ public String swagger() {
+ System.out.println("swagger-ui.html");
+ return "redirect:swagger-ui.html";
+ }
+}
diff --git a/notification-core/src/main/java/org/opengroup/osdu/notification/swagger/SwaggerDocumentationConfig.java b/notification-core/src/main/java/org/opengroup/osdu/notification/swagger/SwaggerDocumentationConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..2aea7a909d3786007ab3c033d460b81f407a63db
--- /dev/null
+++ b/notification-core/src/main/java/org/opengroup/osdu/notification/swagger/SwaggerDocumentationConfig.java
@@ -0,0 +1,69 @@
+package org.opengroup.osdu.notification.swagger;
+
+import org.opengroup.osdu.core.common.model.http.DpsHeaders;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ParameterBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.schema.ModelRef;
+import springfox.documentation.service.ApiKey;
+import springfox.documentation.service.AuthorizationScope;
+import springfox.documentation.service.Parameter;
+import springfox.documentation.service.SecurityReference;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.service.contexts.SecurityContext;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+@Configuration
+@EnableSwagger2
+public class SwaggerDocumentationConfig {
+ public static final String AUTHORIZATION_HEADER = "Authorization";
+ public static final String DEFAULT_INCLUDE_PATTERN = "/.*";
+
+ @Bean
+ public Docket api() {
+ ParameterBuilder builder = new ParameterBuilder();
+ List parameters = new ArrayList<>();
+ builder.name(DpsHeaders.DATA_PARTITION_ID)
+ .description("tenant")
+ .defaultValue("common")
+ .modelRef(new ModelRef("string"))
+ .parameterType("header")
+ .required(true)
+ .build();
+ parameters.add(builder.build());
+ return new Docket(DocumentationType.SWAGGER_2)
+ .globalOperationParameters(parameters)
+ .select()
+ .apis(RequestHandlerSelectors.basePackage("org.opengroup.osdu.notification.api"))
+ .build()
+ .securityContexts(Collections.singletonList(securityContext()))
+ .securitySchemes(Collections.singletonList(apiKey()));
+ }
+
+ private ApiKey apiKey() {
+ return new ApiKey("JWT", AUTHORIZATION_HEADER, "header");
+ }
+
+ private SecurityContext securityContext() {
+ return SecurityContext.builder()
+ .securityReferences(defaultAuth())
+ .forPaths(PathSelectors.regex(DEFAULT_INCLUDE_PATTERN))
+ .build();
+ }
+
+ List defaultAuth() {
+ AuthorizationScope authorizationScope
+ = new AuthorizationScope("global", "accessEverything");
+ AuthorizationScope[] authorizationScopes =
+ new AuthorizationScope[]{authorizationScope};
+ return Collections.singletonList(
+ new SecurityReference("JWT", authorizationScopes));
+ }
+}
\ No newline at end of file
diff --git a/notification-core/src/test/java/org/opengroup/osdu/notification/auth/AuthorizationFilterTest.java b/notification-core/src/test/java/org/opengroup/osdu/notification/auth/AuthorizationFilterTest.java
index 50a46790c9789b4d9257833fa0437771aca0eb40..cbf48fb7cc6d97a50bc105c2d2e18d1f47507fbd 100644
--- a/notification-core/src/test/java/org/opengroup/osdu/notification/auth/AuthorizationFilterTest.java
+++ b/notification-core/src/test/java/org/opengroup/osdu/notification/auth/AuthorizationFilterTest.java
@@ -31,6 +31,7 @@ import org.opengroup.osdu.notification.utils.Config;
import org.opengroup.osdu.notification.provider.interfaces.IServiceAccountValidator;
import org.powermock.modules.junit4.PowerMockRunner;
+import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
@@ -53,6 +54,8 @@ public class AuthorizationFilterTest {
@Mock
private DpsHeaders headers;
@Mock
+ private HttpServletRequest request;
+ @Mock
private RequestInfoExt requestInfo;
@Mock
private IAuthorizationService authorizationService;
diff --git a/notification-core/src/test/java/org/opengroup/osdu/notification/swagger/HomeControllerTest.java b/notification-core/src/test/java/org/opengroup/osdu/notification/swagger/HomeControllerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..6bd3e8084d58fd9a779c75d74f887b3901d0b349
--- /dev/null
+++ b/notification-core/src/test/java/org/opengroup/osdu/notification/swagger/HomeControllerTest.java
@@ -0,0 +1,33 @@
+package org.opengroup.osdu.notification.swagger;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.springframework.http.MediaType;
+import org.springframework.test.web.servlet.MockMvc;
+
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup;
+
+public class HomeControllerTest {
+
+ private MockMvc mockMvc;
+
+ @Before
+ public void setup() {
+ mockMvc = standaloneSetup(HomeController.class).build();
+ }
+
+ @Test
+ public void testSwaggerFound() throws Exception {
+ mockMvc.perform(get("/swagger")
+ .contentType(MediaType.APPLICATION_JSON)
+ .accept(MediaType.APPLICATION_JSON))
+ .andExpect(status().isFound());
+
+ mockMvc.perform(get("/")
+ .contentType(MediaType.APPLICATION_JSON)
+ .accept(MediaType.APPLICATION_JSON))
+ .andExpect(status().isFound());
+ }
+}