use of io.gravitee.rest.api.model.api.SwaggerApiEntity in project gravitee-management-rest-api by gravitee-io.
the class SwaggerService_CreateAPITest method shouldPrepareAPIFromSwaggerV3WithMultiServer.
@Test
public void shouldPrepareAPIFromSwaggerV3WithMultiServer() throws IOException {
final SwaggerApiEntity api = prepareInline("io/gravitee/rest/api/management/service/mock/openapi-multiserver.yaml", true);
assertEquals("/v1", api.getProxy().getVirtualHosts().get(0).getPath());
final List<String> endpoints = api.getProxy().getGroups().iterator().next().getEndpoints().stream().map(Endpoint::getTarget).collect(Collectors.toList());
assertEquals(3, endpoints.size());
assertTrue(endpoints.contains("https://development.gigantic-server.com/v1"));
assertTrue(endpoints.contains("https://staging.gigantic-server.com/v1"));
assertTrue(endpoints.contains("https://api.gigantic-server.com/v1"));
}
use of io.gravitee.rest.api.model.api.SwaggerApiEntity in project gravitee-management-rest-api by gravitee-io.
the class SwaggerService_CreateAPITest method shouldPrepareAPIFromSwaggerV3WithMonoServer.
@Test
public void shouldPrepareAPIFromSwaggerV3WithMonoServer() throws IOException {
final SwaggerApiEntity api = prepareInline("io/gravitee/rest/api/management/service/mock/openapi-monoserver.yaml", true);
assertEquals("/v1", api.getProxy().getVirtualHosts().get(0).getPath());
final List<String> endpoints = api.getProxy().getGroups().iterator().next().getEndpoints().stream().map(Endpoint::getTarget).collect(Collectors.toList());
assertEquals(1, 2, endpoints.size());
assertTrue(endpoints.contains("https://development.gigantic-server.com/v1"));
}
use of io.gravitee.rest.api.model.api.SwaggerApiEntity in project gravitee-management-rest-api by gravitee-io.
the class OAIToAPIConverter method visit.
@Override
public SwaggerApiEntity visit(OpenAPI oai) {
final SwaggerApiEntity apiEntity = new SwaggerApiEntity();
// Name
apiEntity.setName(oai.getInfo().getTitle());
// Description
apiEntity.setDescription(oai.getInfo().getDescription() == null ? "Description of " + apiEntity.getName() : oai.getInfo().getDescription());
// Version
apiEntity.setVersion(oai.getInfo().getVersion());
fill(apiEntity, oai);
// Use X-Gravitee to add information in API
XGraviteeIODefinition xGraviteeIODefinition = null;
if (oai.getExtensions() != null && oai.getExtensions().get(X_GRAVITEEIO_DEFINITION_VENDOR_EXTENSION) != null) {
xGraviteeIODefinition = new ObjectMapper().convertValue(oai.getExtensions().get(X_GRAVITEEIO_DEFINITION_VENDOR_EXTENSION), XGraviteeIODefinition.class);
}
// Proxy
Proxy proxy = new Proxy();
String defaultEndpoint = null;
// Proxy - Endpoints
if (!oai.getServers().isEmpty()) {
List<String> evaluatedServerUrl = mapServersToEndpoint(oai.getServers());
EndpointGroup defaultGroup = new EndpointGroup();
defaultGroup.setName("default-group");
if (evaluatedServerUrl == null) {
defaultGroup.setEndpoints(singleton(new HttpEndpoint("default", defaultEndpoint)));
} else if (evaluatedServerUrl.size() == 1) {
defaultEndpoint = evaluatedServerUrl.get(0);
defaultGroup.setEndpoints(singleton(new HttpEndpoint("default", defaultEndpoint)));
} else {
defaultEndpoint = evaluatedServerUrl.get(0);
defaultGroup.setEndpoints(new HashSet<>());
for (int i = 0; i < evaluatedServerUrl.size(); i++) {
defaultGroup.getEndpoints().add(new HttpEndpoint("server" + (i + 1), evaluatedServerUrl.get(i)));
}
}
proxy.setGroups(singleton(defaultGroup));
apiEntity.setProxy(proxy);
}
// Proxy - Context Path / Virtual Host
if (xGraviteeIODefinition != null && xGraviteeIODefinition.getVirtualHosts() != null) {
proxy.setVirtualHosts(xGraviteeIODefinition.getVirtualHosts().stream().map(vHost -> new VirtualHost(vHost.getHost(), vHost.getPath(), (vHost.getOverrideEntrypoint() != null ? vHost.getOverrideEntrypoint() : false))).collect(Collectors.toList()));
} else {
String contextPath = null;
if (defaultEndpoint != null) {
contextPath = URI.create(defaultEndpoint).getPath();
}
if (contextPath == null || contextPath.equals("/")) {
contextPath = apiEntity.getName().replaceAll("\\s+", "").toLowerCase();
}
proxy.setVirtualHosts(singletonList(new VirtualHost(contextPath)));
}
apiEntity.setProxy(proxy);
// Add xGraviteeIODefinition config
if (xGraviteeIODefinition != null) {
// Categories
if (xGraviteeIODefinition.getCategories() != null && !xGraviteeIODefinition.getCategories().isEmpty()) {
apiEntity.setCategories(new HashSet<>(xGraviteeIODefinition.getCategories()));
}
// Groups
if (xGraviteeIODefinition.getGroups() != null && !xGraviteeIODefinition.getGroups().isEmpty()) {
// Groups in schema are group name. Replace them by id
Set<String> groupIdsToImport = xGraviteeIODefinition.getGroups().stream().flatMap(group -> groupService.findByName(group).stream()).map(GroupEntity::getId).collect(Collectors.toSet());
apiEntity.setGroups(groupIdsToImport);
}
// Labels
if (xGraviteeIODefinition.getLabels() != null && !xGraviteeIODefinition.getLabels().isEmpty()) {
apiEntity.setLabels(xGraviteeIODefinition.getLabels());
}
// Metadata
if (xGraviteeIODefinition.getMetadata() != null && !xGraviteeIODefinition.getMetadata().isEmpty()) {
final List<ApiMetadataEntity> apiMetadataEntities = xGraviteeIODefinition.getMetadata().stream().map(metadata -> {
ApiMetadataEntity apiMetadata = new ApiMetadataEntity();
apiMetadata.setKey(IdGenerator.generate(metadata.getName()));
apiMetadata.setName(metadata.getName());
apiMetadata.setValue(metadata.getValue());
apiMetadata.setFormat(metadata.getFormat() != null ? MetadataFormat.valueOf(metadata.getFormat().name()) : MetadataFormat.STRING);
return apiMetadata;
}).collect(Collectors.toList());
apiEntity.setMetadata(apiMetadataEntities);
}
// Picture
if (xGraviteeIODefinition.getPicture() != null && !StringUtils.isEmpty(xGraviteeIODefinition.getPicture())) {
if (xGraviteeIODefinition.getPicture().matches(PICTURE_REGEX)) {
apiEntity.setPicture(xGraviteeIODefinition.getPicture());
}
}
// Properties
if (xGraviteeIODefinition.getProperties() != null && !xGraviteeIODefinition.getProperties().isEmpty()) {
Properties properties = new Properties();
properties.setProperties(xGraviteeIODefinition.getProperties().stream().map(prop -> new Property(prop.getKey(), prop.getValue())).collect(Collectors.toList()));
apiEntity.setProperties(properties);
}
// Tags
if (xGraviteeIODefinition.getTags() != null && !xGraviteeIODefinition.getTags().isEmpty()) {
final Map<String, String> tagMap = tagService.findByReference(GraviteeContext.getCurrentOrganization(), TagReferenceType.ORGANIZATION).stream().collect(toMap(TagEntity::getId, TagEntity::getName));
final Set<String> tagIdToAdd = xGraviteeIODefinition.getTags().stream().map(tag -> findTagIdByName(tagMap, tag)).filter(Objects::nonNull).collect(Collectors.toSet());
if (tagIdToAdd != null && !tagIdToAdd.isEmpty()) {
apiEntity.setTags(tagIdToAdd);
}
}
// Visibility
if (xGraviteeIODefinition.getVisibility() != null) {
apiEntity.setVisibility(Visibility.valueOf(xGraviteeIODefinition.getVisibility().name()));
}
}
return apiEntity;
}
use of io.gravitee.rest.api.model.api.SwaggerApiEntity in project gravitee-management-rest-api by gravitee-io.
the class OAIToAPIV2Converter method fill.
@Override
protected SwaggerApiEntity fill(SwaggerApiEntity apiEntity, OpenAPI oai) {
// flows
apiEntity.setGraviteeDefinitionVersion(DefinitionVersion.V2.getLabel());
if (swaggerDescriptor.isWithPolicyPaths()) {
List<Flow> allFlows = new ArrayList();
oai.getPaths().forEach((key, pathItem) -> {
String path = key.replaceAll("\\{(.[^/\\}]*)\\}", ":$1");
Map<PathItem.HttpMethod, Operation> operations = pathItem.readOperationsMap();
operations.forEach((httpMethod, operation) -> {
final Flow flow = createFlow(path, Collections.singleton(HttpMethod.valueOf(httpMethod.name())));
getVisitors().forEach((Consumer<OAIOperationVisitor>) oaiOperationVisitor -> {
Optional<Policy> policy = (Optional<Policy>) oaiOperationVisitor.visit(oai, operation);
if (policy.isPresent()) {
final Step step = new Step();
step.setName(policy.get().getName());
step.setEnabled(true);
step.setDescription(operation.getSummary() == null ? (operation.getOperationId() == null ? operation.getDescription() : operation.getOperationId()) : operation.getSummary());
step.setPolicy(policy.get().getName());
String configuration = clearNullValues(policy.get().getConfiguration());
step.setConfiguration(configuration);
String scope = getScope(configuration);
if (scope != null && scope.toLowerCase().equals("response")) {
flow.getPost().add(step);
} else {
flow.getPre().add(step);
}
}
});
allFlows.add(flow);
});
});
apiEntity.setFlows(allFlows);
if (swaggerDescriptor.isWithPathMapping() && allFlows.size() > 0) {
apiEntity.setPathMappings(allFlows.stream().map(flow -> flow.getPath()).collect(Collectors.toSet()));
}
}
final String defaultDeclaredPath = "/";
if (!swaggerDescriptor.isWithPathMapping()) {
apiEntity.setPathMappings(singleton(defaultDeclaredPath));
}
return apiEntity;
}
use of io.gravitee.rest.api.model.api.SwaggerApiEntity in project gravitee-management-rest-api by gravitee-io.
the class SwaggerService_CreateAPITest method shouldPrepareAPIFromSwaggerV3WithPetstoreExpanded.
@Test
public void shouldPrepareAPIFromSwaggerV3WithPetstoreExpanded() throws IOException {
final SwaggerApiEntity api = prepareInline("io/gravitee/rest/api/management/service/mock/petstore-expanded.yaml", true, true);
assertEquals("1.0.0", api.getVersion());
assertEquals("Swagger Petstore", api.getName());
assertEquals("/api", api.getProxy().getVirtualHosts().get(0).getPath());
assertEquals("http://petstore.swagger.io/api", api.getProxy().getGroups().iterator().next().getEndpoints().iterator().next().getTarget());
validatePolicies(api, 2, 4, asList("/pets", "/pets/:id"));
}
Aggregations