diff --git a/notification-core/pom.xml b/notification-core/pom.xml index cfd2725b551ff023cc439fbbd2a0685a1de80617..d135c3adefd3d460801b7e8659ae3a2f80c56b00 100644 --- a/notification-core/pom.xml +++ b/notification-core/pom.xml @@ -35,7 +35,6 @@ <java.version>8</java.version> <maven.compiler.target>${java.version}</maven.compiler.target> <maven.compiler.source>${java.version}</maven.compiler.source> - <springfox-version>2.7.0</springfox-version> <netty.version>4.1.65.Final</netty.version> <undertow.version>2.1.7.Final</undertow.version> </properties> @@ -165,25 +164,7 @@ <version>2.8.5</version> </dependency> - <!-- swagger dependencies --> - <dependency> - <groupId>io.springfox</groupId> - <artifactId>springfox-swagger2</artifactId> - <version>${springfox-version}</version> - <exclusions> - <exclusion> - <groupId>com.google.guava</groupId> - <artifactId>guava</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>io.springfox</groupId> - <artifactId>springfox-swagger-ui</artifactId> - <version>${springfox-version}</version> - </dependency> - - <dependency> + <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito2</artifactId> <version>2.0.2</version> diff --git a/notification-core/src/main/java/org/opengroup/osdu/notification/swagger/SpringfoxSwaggerHostResolver.java b/notification-core/src/main/java/org/opengroup/osdu/notification/swagger/SpringfoxSwaggerHostResolver.java new file mode 100644 index 0000000000000000000000000000000000000000..28a63a922ce37928977d02b8c26e8324a0fe08e7 --- /dev/null +++ b/notification-core/src/main/java/org/opengroup/osdu/notification/swagger/SpringfoxSwaggerHostResolver.java @@ -0,0 +1,35 @@ +package org.opengroup.osdu.notification.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/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 index 2aea7a909d3786007ab3c033d460b81f407a63db..ef0645c9663802605c4d0203c9f30233b46a8f56 100644 --- 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 @@ -3,43 +3,47 @@ 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.builders.RequestParameterBuilder; +import springfox.documentation.oas.annotations.EnableOpenApi; + import springfox.documentation.service.ApiKey; import springfox.documentation.service.AuthorizationScope; -import springfox.documentation.service.Parameter; + +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 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 = "/.*"; @Bean public Docket api() { - ParameterBuilder builder = new ParameterBuilder(); - List<Parameter> parameters = new ArrayList<>(); + RequestParameterBuilder builder = new RequestParameterBuilder(); + List<RequestParameter> parameters = new ArrayList<>(); + builder.name(DpsHeaders.DATA_PARTITION_ID) .description("tenant") - .defaultValue("common") - .modelRef(new ModelRef("string")) - .parameterType("header") + .in(ParameterType.HEADER) .required(true) .build(); parameters.add(builder.build()); - return new Docket(DocumentationType.SWAGGER_2) - .globalOperationParameters(parameters) + return new Docket(DocumentationType.OAS_30) + .globalRequestParameters(parameters) + .select() .apis(RequestHandlerSelectors.basePackage("org.opengroup.osdu.notification.api")) .build() @@ -48,13 +52,13 @@ public class SwaggerDocumentationConfig { } private ApiKey apiKey() { - return new ApiKey("JWT", AUTHORIZATION_HEADER, "header"); + return new ApiKey(AUTHORIZATION_HEADER, AUTHORIZATION_HEADER, "header"); } private SecurityContext securityContext() { return SecurityContext.builder() .securityReferences(defaultAuth()) - .forPaths(PathSelectors.regex(DEFAULT_INCLUDE_PATTERN)) + .operationSelector(o -> PathSelectors.regex(DEFAULT_INCLUDE_PATTERN).test(o.requestMappingPattern())) .build(); } @@ -64,6 +68,6 @@ public class SwaggerDocumentationConfig { AuthorizationScope[] authorizationScopes = new AuthorizationScope[]{authorizationScope}; return Collections.singletonList( - new SecurityReference("JWT", authorizationScopes)); + new SecurityReference(AUTHORIZATION_HEADER, authorizationScopes)); } } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 195d6e8a179a27e37a07369eaace5e871e6bfb89..5fc068cd1f0e1cf46ff4994046e0090cd59df210 100644 --- a/pom.xml +++ b/pom.xml @@ -27,6 +27,7 @@ <maven.compiler.source>${java.version}</maven.compiler.source> <os-core-common.version>0.13.0-rc4</os-core-common.version> <log4j2.version>2.17.0</log4j2.version> + <springfox.version>3.0.0</springfox.version> </properties> <licenses> @@ -93,6 +94,39 @@ <version>1.18.8</version> <scope>provided</scope> </dependency> + <!-- swagger dependency --> + <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>