From 50c0434cd555caf38f13f44b7c6725758a17ba5f Mon Sep 17 00:00:00 2001 From: Ashwani Pandey <ashwani.pandey3@ibm.com> Date: Tue, 18 Jan 2022 05:28:41 +0000 Subject: [PATCH] Spring fox upgrade --- indexer-core/pom.xml | 12 --- .../osdu/indexer/swagger/HomeController.java | 3 +- .../swagger/SpringfoxSwaggerHostResolver.java | 35 +++++++++ .../swagger/SwaggerDocumentationConfig.java | 74 +++++++++---------- pom.xml | 50 ++++++++++--- .../azure/security/AADSecurityConfig.java | 2 + 6 files changed, 114 insertions(+), 62 deletions(-) create mode 100644 indexer-core/src/main/java/org/opengroup/osdu/indexer/swagger/SpringfoxSwaggerHostResolver.java diff --git a/indexer-core/pom.xml b/indexer-core/pom.xml index c46de1cd7..72a876596 100644 --- a/indexer-core/pom.xml +++ b/indexer-core/pom.xml @@ -201,18 +201,6 @@ <scope>test</scope> </dependency> - <!-- swagger dependencies --> - <dependency> - <groupId>io.springfox</groupId> - <artifactId>springfox-swagger2</artifactId> - <version>${springfox-version}</version> - </dependency> - <dependency> - <groupId>io.springfox</groupId> - <artifactId>springfox-swagger-ui</artifactId> - <version>${springfox-version}</version> - </dependency> - </dependencies> <build> diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/swagger/HomeController.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/swagger/HomeController.java index eb1576dfb..9638ba469 100644 --- a/indexer-core/src/main/java/org/opengroup/osdu/indexer/swagger/HomeController.java +++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/swagger/HomeController.java @@ -7,7 +7,6 @@ import org.springframework.web.bind.annotation.RequestMapping; public class HomeController { @RequestMapping(value = "/swagger") public String swagger() { - System.out.println("swagger-ui.html"); - return "redirect:swagger-ui.html"; + return "redirect:swagger-ui/index.html"; } } diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/swagger/SpringfoxSwaggerHostResolver.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/swagger/SpringfoxSwaggerHostResolver.java new file mode 100644 index 000000000..ba3701ff9 --- /dev/null +++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/swagger/SpringfoxSwaggerHostResolver.java @@ -0,0 +1,35 @@ +package org.opengroup.osdu.indexer.swagger; + +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.servers.Server; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; +import springfox.documentation.oas.web.OpenApiTransformationContext; +import springfox.documentation.oas.web.WebMvcOpenApiTransformationFilter; +import springfox.documentation.spi.DocumentationType; + +import javax.servlet.http.HttpServletRequest; + +@Component +@Order(Ordered.LOWEST_PRECEDENCE) +public class SpringfoxSwaggerHostResolver implements WebMvcOpenApiTransformationFilter { + + @Override + public boolean supports(DocumentationType delimiter) { + return delimiter == DocumentationType.OAS_30; + } + + @Override + public OpenAPI transform(OpenApiTransformationContext<HttpServletRequest> context) { + OpenAPI swagger = context.getSpecification(); + + Server server = swagger.getServers().get(0); + if (server.getUrl().contains(":443")) { + // via the gateway + server.setUrl(server.getUrl().replace(":443", "")); + } + + return swagger; + } +} \ No newline at end of file diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/swagger/SwaggerDocumentationConfig.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/swagger/SwaggerDocumentationConfig.java index 5811f6bb8..1581a366b 100644 --- a/indexer-core/src/main/java/org/opengroup/osdu/indexer/swagger/SwaggerDocumentationConfig.java +++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/swagger/SwaggerDocumentationConfig.java @@ -3,67 +3,63 @@ package org.opengroup.osdu.indexer.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.builders.RequestParameterBuilder; +import springfox.documentation.oas.annotations.EnableOpenApi; import springfox.documentation.service.ApiKey; import springfox.documentation.service.AuthorizationScope; +import springfox.documentation.service.ParameterType; +import springfox.documentation.service.RequestParameter; 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 springfox.documentation.service.Parameter; - import java.util.ArrayList; import java.util.Collections; import java.util.List; @Configuration -@EnableSwagger2 +@EnableOpenApi public class SwaggerDocumentationConfig { - public static final String AUTHORIZATION_HEADER = "Authorization"; - public static final String DEFAULT_INCLUDE_PATTERN = "/.*"; + public static final String AUTHORIZATION_HEADER = "Authorization"; + public static final String DEFAULT_INCLUDE_PATTERN = "/.*"; - @Bean - public Docket api() { - ParameterBuilder builder = new ParameterBuilder(); - List<Parameter> parameters = new ArrayList<>(); - builder.name(DpsHeaders.DATA_PARTITION_ID) - .description("data partition id") - .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.indexer.api")) - .build() - .securityContexts(Collections.singletonList(securityContext())) - .securitySchemes(Collections.singletonList(apiKey())); - } + @Bean + public Docket api() { + RequestParameterBuilder builder = new RequestParameterBuilder(); + List<RequestParameter> parameters = new ArrayList<>(); + builder.name(DpsHeaders.DATA_PARTITION_ID) + .description("data partition id") + .in(ParameterType.HEADER) + .required(true) + .build(); + parameters.add(builder.build()); + return new Docket(DocumentationType.OAS_30) + .globalRequestParameters(parameters) + .select() + .apis(RequestHandlerSelectors.basePackage("org.opengroup.osdu.indexer.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(); - } + private ApiKey apiKey() { + return new ApiKey(AUTHORIZATION_HEADER, AUTHORIZATION_HEADER, "header"); + } + private SecurityContext securityContext() { + return SecurityContext.builder() + .securityReferences(defaultAuth()) + .operationSelector(o -> PathSelectors.regex(DEFAULT_INCLUDE_PATTERN).test(o.requestMappingPattern())) + .build(); + } List<SecurityReference> defaultAuth() { AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); AuthorizationScope[] authorizationScopes = new AuthorizationScope[]{authorizationScope}; return Collections.singletonList( - new SecurityReference("JWT", authorizationScopes)); + new SecurityReference(AUTHORIZATION_HEADER, authorizationScopes)); } } diff --git a/pom.xml b/pom.xml index e4b5cc89b..000613cc8 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,6 @@ <properties> <java.version>1.8</java.version> - <springfox-version>2.7.0</springfox-version> <spring-cloud.version>Greenwich.SR2</spring-cloud.version> <os-core-common.version>0.13.0-rc6</os-core-common.version> <snakeyaml.version>1.26</snakeyaml.version> @@ -38,6 +37,7 @@ <!-- <failOnMissingWebXml>false</failOnMissingWebXml>--> <!-- <spring-cloud.version>Greenwich.SR2</spring-cloud.version>--> <!-- <springfox-version>2.7.0</springfox-version>--> + <springfox.version>3.0.0</springfox.version> </properties> <licenses> @@ -130,14 +130,46 @@ </dependencies> </dependencyManagement> - <dependencies> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - <version>1.18.16</version> - <scope>provided</scope> - </dependency> - </dependencies> + <dependencies> + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <version>1.18.16</version> + <scope>provided</scope> + </dependency> + <!--Swagger --> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-boot-starter</artifactId> + <version>${springfox.version}</version> + <exclusions> + <exclusion> + <groupId>org.springframework.plugin</groupId> + <artifactId>spring-plugin-core</artifactId> + </exclusion> + <exclusion> + <groupId>org.springframework.plugin</groupId> + <artifactId>spring-plugin-metadata</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.springframework.plugin</groupId> + <artifactId>spring-plugin-core</artifactId> + <version>2.0.0.RELEASE</version> + </dependency> + <dependency> + <groupId>org.springframework.plugin</groupId> + <artifactId>spring-plugin-metadata</artifactId> + <version>2.0.0.RELEASE</version> + <exclusions> + <exclusion> + <groupId>org.springframework.plugin</groupId> + <artifactId>spring-plugin-core</artifactId> + </exclusion> + </exclusions> + </dependency> + </dependencies> <modules> <module>indexer-core</module> diff --git a/provider/indexer-azure/src/main/java/org/opengroup/osdu/indexer/azure/security/AADSecurityConfig.java b/provider/indexer-azure/src/main/java/org/opengroup/osdu/indexer/azure/security/AADSecurityConfig.java index ce59f2e5c..fd1150ce6 100644 --- a/provider/indexer-azure/src/main/java/org/opengroup/osdu/indexer/azure/security/AADSecurityConfig.java +++ b/provider/indexer-azure/src/main/java/org/opengroup/osdu/indexer/azure/security/AADSecurityConfig.java @@ -41,11 +41,13 @@ public class AADSecurityConfig extends WebSecurityConfigurerAdapter { "/index-worker", "/_dps/task-handlers", "/_dps/task-handlers/**", "/reindex", "/v2/api-docs", + "/v3/api-docs", "/swagger-resources/**", "/configuration/security", "/swagger", "/info", "/swagger-ui.html", + "/swagger-ui/**", "/webjars/**").permitAll() .anyRequest().authenticated() .and().addFilterBefore(appRoleAuthFilter, UsernamePasswordAuthenticationFilter.class); -- GitLab