Skip to content
Snippets Groups Projects
Commit 492dbb2a authored by Anthony Ittiyera vazhappilly's avatar Anthony Ittiyera vazhappilly
Browse files

create feature flag to toggle enableFullSwaggerUrlProperty

parent d2490546
No related branches found
No related tags found
1 merge request!433Use full URL instead of relative path
Pipeline #238087 failed
......@@ -30,6 +30,12 @@ See Integration-Testing [Readme](./testing/README.md).
All the Swagger and OpenAPI related common properties are managed here [swagger.properties](./entitlements-v2-core/src/main/resources/swagger.properties)
#### Server Url(full path vs relative path) configuration
- `api.server.fullUrl.enabled=true` It will generate full server url in the OpenAPI swagger
- `api.server.fullUrl.enabled=false` It will generate only the contextPath only
- default value is false (Currently only in Azure it is enabled)
[Reference]:(https://springdoc.org/faq.html#_how_is_server_url_generated)
# Updated github url test2
## AWS
......
......@@ -84,3 +84,6 @@ app.maxCacheSize=1000
#Partition Feature Flag
featureFlag.strategy=dataPartition
# To enable the full server path url in OpenAPI Swagger
api.server.fullUrl.enabled=${swaggerFullUrlEnabled:true}
\ No newline at end of file
package org.opengroup.osdu.register.swagger;
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.enums.SecuritySchemeType;
import io.swagger.v3.oas.annotations.info.Contact;
import io.swagger.v3.oas.annotations.info.Info;
import io.swagger.v3.oas.annotations.info.License;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.security.SecurityScheme;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.media.StringSchema;
import io.swagger.v3.oas.models.parameters.Parameter;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import io.swagger.v3.oas.models.servers.Server;
import io.swagger.v3.oas.models.tags.Tag;
import org.opengroup.osdu.core.common.model.http.DpsHeaders;
import org.springdoc.core.customizers.OperationCustomizer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@OpenAPIDefinition(
info = @Info(
title = "${api.title}",
description = "${api.description}",
version = "${api.version}",
contact = @Contact(name = "${api.contact.name}", email = "${api.contact.email}"),
license = @License(name = "${api.license.name}", url = "${api.license.url}")),
security = @SecurityRequirement(name = "Authorization"),
tags = {
@Tag(name = "action-api", description = "Action API"),
@Tag(name = "ddms-api", description = "Domain Data Management Service (DDMS) API"),
@Tag(name = "subscriber-api", description = "Subscriber API"),
@Tag(name = "health-checks-api", description = "Health Checks API"),
@Tag(name = "info", description = "Version info endpoint")
}
)
@SecurityScheme(name = "Authorization", scheme = "bearer", bearerFormat = "Authorization", type = SecuritySchemeType.HTTP)
@Configuration
@Profile("!noswagger")
public class SwaggerConfiguration {
@Value("${api.title}")
private String apiTitle;
@Value("${api.description}")
private String apiDescription;
@Value("${api.version}")
private String apiVersion;
@Value("${api.contact.name}")
private String contactName;
@Value("${api.contact.email}")
private String contactEmail;
@Value("${api.license.name}")
private String licenseName;
@Value("${api.license.url}")
private String licenseUrl;
@Value("${api.server.url}")
private String apiServerUrl;
@Value("${api.server.fullUrl.enabled:false}")
private boolean isServerFullUrlEnabled;
@Bean
public OperationCustomizer customize() {
public OpenAPI customOpenAPI() {
SecurityScheme securityScheme = new SecurityScheme()
.type(SecurityScheme.Type.HTTP)
.scheme("bearer")
.bearerFormat("Authorization")
.in(SecurityScheme.In.HEADER)
.name("Authorization");
final String securitySchemeName = "Authorization";
SecurityRequirement securityRequirement = new SecurityRequirement().addList(securitySchemeName);
Components components = new Components().addSecuritySchemes(securitySchemeName, securityScheme);
OpenAPI openAPI = new OpenAPI()
.addSecurityItem(securityRequirement)
.components(components)
.info(apiInfo())
.tags(tags());
if(isServerFullUrlEnabled)
return openAPI;
return openAPI
.servers(Arrays.asList(new Server().url(apiServerUrl)));
}
private List<Tag> tags() {
List<Tag> tags = new ArrayList<>();
tags.add(new Tag().name("action-api").description("Action API"));
tags.add(new Tag().name("ddms-api").description("Domain Data Management Service (DDMS) API"));
tags.add(new Tag().name("subscriber-api").description("Subscriber API"));
tags.add(new Tag().name("health-checks-api").description("Health Checks API"));
tags.add(new Tag().name("info").description("Version info endpoint"));
return tags;
}
private Info apiInfo() {
return new Info()
.title(apiTitle)
.description(apiDescription)
.version(apiVersion)
.license(new License().name(licenseName).url(licenseUrl))
.contact(new Contact().name(contactName).email(contactEmail));
}
@Bean
public OperationCustomizer operationCustomizer() {
return (operation, handlerMethod) -> {
Parameter dataPartitionId = new Parameter()
.name(DpsHeaders.DATA_PARTITION_ID)
......@@ -47,5 +109,4 @@ public class SwaggerConfiguration {
return operation.addParametersItem(dataPartitionId);
};
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment