From 978f2fde29fee45ddb6f25835f2032d7e1d77882 Mon Sep 17 00:00:00 2001 From: Neelesh Thakur Date: Wed, 29 Jul 2020 14:12:56 -0500 Subject: [PATCH 1/2] add swagger --- notification-core/pom.xml | 19 +++++ .../auth/AuthorizationFilter.java | 10 +++ .../notification/swagger/HomeController.java | 14 ++++ .../swagger/SwaggerDocumentationConfig.java | 69 +++++++++++++++++++ .../auth/AuthorizationFilterTest.java | 3 + 5 files changed, 115 insertions(+) create mode 100644 notification-core/src/main/java/org/opengroup/osdu/notification/swagger/HomeController.java create mode 100644 notification-core/src/main/java/org/opengroup/osdu/notification/swagger/SwaggerDocumentationConfig.java diff --git a/notification-core/pom.xml b/notification-core/pom.xml index c033c18a..085ffda7 100644 --- a/notification-core/pom.xml +++ b/notification-core/pom.xml @@ -37,6 +37,7 @@ 8 ${java.version} ${java.version} + 2.7.0 @@ -188,6 +189,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 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 c720b2d5..d11ece8d 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 00000000..3e568ff0 --- /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 00000000..2aea7a90 --- /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 c73e87d1..de0d7776 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.utils.ServiceAccountValidator; 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; -- GitLab From 60c9c037ad97d5d8066a853bf2bb106d0b91b144 Mon Sep 17 00:00:00 2001 From: Neelesh Thakur Date: Fri, 21 Aug 2020 10:05:06 -0500 Subject: [PATCH 2/2] add unit test --- notification-core/pom.xml | 5 +++ .../swagger/HomeControllerTest.java | 33 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 notification-core/src/test/java/org/opengroup/osdu/notification/swagger/HomeControllerTest.java diff --git a/notification-core/pom.xml b/notification-core/pom.xml index 2879c0c8..771a747e 100644 --- a/notification-core/pom.xml +++ b/notification-core/pom.xml @@ -230,6 +230,11 @@ 4.12 test + + org.springframework + spring-test + test + 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 00000000..6bd3e808 --- /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()); + } +} -- GitLab