Search in sources :

Example 1 with ServerVariables

use of io.swagger.v3.oas.models.servers.ServerVariables in project swagger-parser by swagger-api.

the class OpenAPIDeserializer method getServer.

public Server getServer(ObjectNode obj, String location, ParseResult result, String path) {
    if (obj == null) {
        return null;
    }
    Server server = new Server();
    if (obj.get("variables") != null) {
        ObjectNode variables = getObject("variables", obj, false, location, result);
        ServerVariables serverVariables = getServerVariables(variables, String.format("%s.%s", location, "variables"), result);
        if (serverVariables != null && serverVariables.size() > 0) {
            server.setVariables(serverVariables);
        }
    }
    String value = getString("url", obj, true, location, result);
    if ((result.isAllowEmptyStrings() && value != null) || (!result.isAllowEmptyStrings() && !StringUtils.isBlank(value))) {
        if (!isValidURL(value) && path != null) {
            try {
                final URI absURI = new URI(path.replaceAll("\\\\", "/"));
                if ("http".equals(absURI.getScheme()) || "https".equals(absURI.getScheme())) {
                    value = absURI.resolve(new URI(value)).toString();
                }
            } catch (URISyntaxException e) {
                String variable = value.substring(value.indexOf("{") + 1, value.indexOf("}"));
                if (server.getVariables() != null) {
                    if (!server.getVariables().containsKey(variable)) {
                        result.warning(location, "invalid url : " + value);
                    }
                }
            }
        }
        server.setUrl(value);
    }
    value = getString("description", obj, false, location, result);
    if ((result.isAllowEmptyStrings() && value != null) || (!result.isAllowEmptyStrings() && !StringUtils.isBlank(value))) {
        server.setDescription(value);
    }
    Map<String, Object> extensions = getExtensions(obj);
    if (extensions != null && extensions.size() > 0) {
        server.setExtensions(extensions);
    }
    Set<String> keys = getKeys(obj);
    for (String key : keys) {
        if (!SERVER_KEYS.contains(key) && !key.startsWith("x-")) {
            result.extra(location, key, obj.get(key));
        }
    }
    return server;
}
Also used : ServerVariables(io.swagger.v3.oas.models.servers.ServerVariables) Server(io.swagger.v3.oas.models.servers.Server) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) URISyntaxException(java.net.URISyntaxException) URI(java.net.URI)

Example 2 with ServerVariables

use of io.swagger.v3.oas.models.servers.ServerVariables in project swagger-core by swagger-api.

the class AnnotationsUtils method getServer.

public static Optional<Server> getServer(io.swagger.v3.oas.annotations.servers.Server server) {
    if (server == null) {
        return Optional.empty();
    }
    Server serverObject = new Server();
    boolean isEmpty = true;
    if (StringUtils.isNotBlank(server.url())) {
        serverObject.setUrl(server.url());
        isEmpty = false;
    }
    if (StringUtils.isNotBlank(server.description())) {
        serverObject.setDescription(server.description());
        isEmpty = false;
    }
    if (server.extensions().length > 0) {
        Map<String, Object> extensions = AnnotationsUtils.getExtensions(server.extensions());
        if (extensions != null) {
            extensions.forEach(serverObject::addExtension);
        }
        isEmpty = false;
    }
    if (isEmpty) {
        return Optional.empty();
    }
    io.swagger.v3.oas.annotations.servers.ServerVariable[] serverVariables = server.variables();
    ServerVariables serverVariablesObject = new ServerVariables();
    for (io.swagger.v3.oas.annotations.servers.ServerVariable serverVariable : serverVariables) {
        ServerVariable serverVariableObject = new ServerVariable();
        if (StringUtils.isNotBlank(serverVariable.description())) {
            serverVariableObject.setDescription(serverVariable.description());
        }
        if (StringUtils.isNotBlank(serverVariable.defaultValue())) {
            serverVariableObject.setDefault(serverVariable.defaultValue());
        }
        if (serverVariable.allowableValues() != null && serverVariable.allowableValues().length > 0) {
            if (StringUtils.isNotBlank(serverVariable.allowableValues()[0])) {
                serverVariableObject.setEnum(Arrays.asList(serverVariable.allowableValues()));
            }
        }
        if (serverVariable.extensions() != null && serverVariable.extensions().length > 0) {
            Map<String, Object> extensions = AnnotationsUtils.getExtensions(serverVariable.extensions());
            if (extensions != null) {
                extensions.forEach(serverVariableObject::addExtension);
            }
        }
        serverVariablesObject.addServerVariable(serverVariable.name(), serverVariableObject);
    }
    serverObject.setVariables(serverVariablesObject);
    return Optional.of(serverObject);
}
Also used : ServerVariables(io.swagger.v3.oas.models.servers.ServerVariables) Server(io.swagger.v3.oas.models.servers.Server) ServerVariable(io.swagger.v3.oas.models.servers.ServerVariable) ExampleObject(io.swagger.v3.oas.annotations.media.ExampleObject)

Example 3 with ServerVariables

use of io.swagger.v3.oas.models.servers.ServerVariables in project openremote by openremote.

the class ManagerWebService method init.

@Override
public void init(Container container) throws Exception {
    super.init(container);
    String rootRedirectPath = getString(container.getConfig(), ROOT_REDIRECT_PATH, ROOT_REDIRECT_PATH_DEFAULT);
    // Modify swagger object mapper to match ours
    configureObjectMapper(Json.mapper());
    Json.mapper().addMixIn(ServerVariable.class, ServerVariableMixin.class);
    // Add swagger resource
    OpenAPI oas = new OpenAPI().servers(Collections.singletonList(new Server().url("/api/{realm}/").variables(new ServerVariables().addServerVariable("realm", new ServerVariable()._default("master"))))).schemaRequirement("openid", new SecurityScheme().type(SecurityScheme.Type.OAUTH2).flows(new OAuthFlows().authorizationCode(new OAuthFlow().authorizationUrl("/auth/realms/master/protocol/openid-connect/auth").refreshUrl("/auth/realms/master/protocol/openid-connect/token").tokenUrl("/auth/realms/master/protocol/openid-connect/token")))).security(Collections.singletonList(new SecurityRequirement().addList("openid")));
    Info info = new Info().title("OpenRemote Manager REST API").description("This is the documentation for the OpenRemote Manager HTTP REST API.  Please see the [wiki](https://github.com/openremote/openremote/wiki) for more info.").contact(new Contact().email("info@openremote.io")).license(new License().name("AGPL 3.0").url("https://www.gnu.org/licenses/agpl-3.0.en.html"));
    oas.info(info);
    SwaggerConfiguration oasConfig = new SwaggerConfiguration().resourcePackages(Stream.of("org.openremote.model.*").collect(Collectors.toSet())).openAPI(oas);
    OpenApiResource openApiResource = new OpenApiResource();
    openApiResource.openApiConfiguration(oasConfig);
    addApiSingleton(openApiResource);
    initialised = true;
    ResteasyDeployment resteasyDeployment = createResteasyDeployment(container, getApiClasses(), apiSingletons, true);
    // Serve REST API
    HttpHandler apiHandler = createApiHandler(container, resteasyDeployment);
    if (apiHandler != null) {
        // Authenticating requests requires a realm, either we receive this in a header or
        // we extract it (e.g. from request path segment) and set it as a header before
        // processing the request
        HttpHandler baseApiHandler = apiHandler;
        apiHandler = exchange -> {
            String path = exchange.getRelativePath().substring(API_PATH.length());
            Matcher realmSubMatcher = PATTERN_REALM_SUB.matcher(path);
            if (!realmSubMatcher.matches()) {
                exchange.setStatusCode(NOT_FOUND.getStatusCode());
                throw new WebApplicationException(NOT_FOUND);
            }
            // Extract realm from path and push it into REQUEST_HEADER_REALM header
            String realm = realmSubMatcher.group(1);
            // Move the realm from path segment to header
            exchange.getRequestHeaders().put(HttpString.tryFromString(REALM_PARAM_NAME), realm);
            URI url = fromUri(exchange.getRequestURL()).replacePath(realmSubMatcher.group(2)).build();
            exchange.setRequestURI(url.toString(), true);
            exchange.setRequestPath(url.getPath());
            exchange.setRelativePath(url.getPath());
            baseApiHandler.handleRequest(exchange);
        };
    }
    // Serve deployment files unsecured (explicitly map deployment folders to request paths)
    builtInAppDocRoot = Paths.get(getString(container.getConfig(), APP_DOCROOT, APP_DOCROOT_DEFAULT));
    customAppDocRoot = Paths.get(getString(container.getConfig(), CUSTOM_APP_DOCROOT, CUSTOM_APP_DOCROOT_DEFAULT));
    HttpHandler defaultHandler = null;
    if (Files.isDirectory(customAppDocRoot)) {
        HttpHandler customBaseFileHandler = createFileHandler(container, customAppDocRoot, null);
        defaultHandler = exchange -> {
            if (exchange.getRelativePath().isEmpty() || "/".equals(exchange.getRelativePath())) {
                exchange.setRelativePath("/index.html");
            }
            customBaseFileHandler.handleRequest(exchange);
        };
    }
    PathHandler deploymentHandler = defaultHandler != null ? new PathHandler(defaultHandler) : new PathHandler();
    // Serve deployment files
    if (Files.isDirectory(builtInAppDocRoot)) {
        HttpHandler appBaseFileHandler = createFileHandler(container, builtInAppDocRoot, null);
        HttpHandler appFileHandler = exchange -> {
            if (exchange.getRelativePath().isEmpty() || "/".equals(exchange.getRelativePath())) {
                exchange.setRelativePath("/index.html");
            }
            // Reinstate the full path
            exchange.setRelativePath(exchange.getRequestPath());
            appBaseFileHandler.handleRequest(exchange);
        };
        deploymentHandler.addPrefixPath(MANAGER_APP_PATH, appFileHandler);
        deploymentHandler.addPrefixPath(SWAGGER_APP_PATH, appFileHandler);
        deploymentHandler.addPrefixPath(CONSOLE_LOADER_APP_PATH, appFileHandler);
        deploymentHandler.addPrefixPath(SHARED_PATH, appFileHandler);
    }
    // Redirect / to default app
    if (rootRedirectPath != null) {
        getRequestHandlers().add(new RequestHandler("Default app redirect", exchange -> exchange.getRequestPath().equals("/"), exchange -> {
            LOG.finer("Handling root request, redirecting client to default app");
            new RedirectHandler(redirect(exchange, rootRedirectPath)).handleRequest(exchange);
        }));
    }
    if (apiHandler != null) {
        getRequestHandlers().add(pathStartsWithHandler("REST API Handler", API_PATH, apiHandler));
    }
    // This will try and handle any request that makes it to this handler
    getRequestHandlers().add(new RequestHandler("Deployment files", exchange -> true, deploymentHandler));
}
Also used : JsonProperty(com.fasterxml.jackson.annotation.JsonProperty) Json(io.swagger.v3.core.util.Json) CanonicalPathHandler(io.undertow.server.handlers.CanonicalPathHandler) WebService(org.openremote.container.web.WebService) UriBuilder.fromUri(javax.ws.rs.core.UriBuilder.fromUri) ValueUtil.configureObjectMapper(org.openremote.model.util.ValueUtil.configureObjectMapper) OpenApiResource(io.swagger.v3.jaxrs2.integration.resources.OpenApiResource) ServletInfo(io.undertow.servlet.api.ServletInfo) MapAccess.getString(org.openremote.container.util.MapAccess.getString) HttpString(io.undertow.util.HttpString) RedirectHandler(io.undertow.server.handlers.RedirectHandler) Servlets(io.undertow.servlet.Servlets) HashSet(java.util.HashSet) License(io.swagger.v3.oas.models.info.License) PathHandler(io.undertow.server.handlers.PathHandler) Matcher(java.util.regex.Matcher) ResteasyDeployment(org.jboss.resteasy.spi.ResteasyDeployment) OpenAPI(io.swagger.v3.oas.models.OpenAPI) io.swagger.v3.oas.models.security(io.swagger.v3.oas.models.security) ServerVariables(io.swagger.v3.oas.models.servers.ServerVariables) URI(java.net.URI) Path(java.nio.file.Path) REALM_PARAM_NAME(org.openremote.model.Constants.REALM_PARAM_NAME) Files(java.nio.file.Files) Collection(java.util.Collection) NOT_FOUND(javax.ws.rs.core.Response.Status.NOT_FOUND) Info(io.swagger.v3.oas.models.info.Info) Logger(java.util.logging.Logger) Collectors(java.util.stream.Collectors) SwaggerConfiguration(io.swagger.v3.oas.integration.SwaggerConfiguration) HttpServlet30Dispatcher(org.jboss.resteasy.plugins.server.servlet.HttpServlet30Dispatcher) HttpHandler(io.undertow.server.HttpHandler) Container(org.openremote.model.Container) IdentityService(org.openremote.container.security.IdentityService) Server(io.swagger.v3.oas.models.servers.Server) Stream(java.util.stream.Stream) Contact(io.swagger.v3.oas.models.info.Contact) Paths(java.nio.file.Paths) ServerVariable(io.swagger.v3.oas.models.servers.ServerVariable) WebApplicationException(javax.ws.rs.WebApplicationException) DeploymentInfo(io.undertow.servlet.api.DeploymentInfo) Pattern(java.util.regex.Pattern) Collections(java.util.Collections) RedirectBuilder.redirect(io.undertow.util.RedirectBuilder.redirect) ServerVariables(io.swagger.v3.oas.models.servers.ServerVariables) HttpHandler(io.undertow.server.HttpHandler) Server(io.swagger.v3.oas.models.servers.Server) WebApplicationException(javax.ws.rs.WebApplicationException) Matcher(java.util.regex.Matcher) RedirectHandler(io.undertow.server.handlers.RedirectHandler) License(io.swagger.v3.oas.models.info.License) CanonicalPathHandler(io.undertow.server.handlers.CanonicalPathHandler) PathHandler(io.undertow.server.handlers.PathHandler) MapAccess.getString(org.openremote.container.util.MapAccess.getString) HttpString(io.undertow.util.HttpString) ServletInfo(io.undertow.servlet.api.ServletInfo) Info(io.swagger.v3.oas.models.info.Info) DeploymentInfo(io.undertow.servlet.api.DeploymentInfo) ServerVariable(io.swagger.v3.oas.models.servers.ServerVariable) URI(java.net.URI) SwaggerConfiguration(io.swagger.v3.oas.integration.SwaggerConfiguration) Contact(io.swagger.v3.oas.models.info.Contact) OpenApiResource(io.swagger.v3.jaxrs2.integration.resources.OpenApiResource) ResteasyDeployment(org.jboss.resteasy.spi.ResteasyDeployment) OpenAPI(io.swagger.v3.oas.models.OpenAPI)

Example 4 with ServerVariables

use of io.swagger.v3.oas.models.servers.ServerVariables in project swagger-parser by swagger-api.

the class OpenAPIDeserializer method getServerVariables.

public ServerVariables getServerVariables(ObjectNode obj, String location, ParseResult result) {
    ServerVariables serverVariables = new ServerVariables();
    if (obj == null) {
        return null;
    }
    Set<String> serverKeys = getKeys(obj);
    for (String serverName : serverKeys) {
        JsonNode serverValue = obj.get(serverName);
        ObjectNode server = (ObjectNode) serverValue;
        ServerVariable serverVariable = getServerVariable(server, String.format("%s.%s", location, serverName), result);
        serverVariables.addServerVariable(serverName, serverVariable);
    }
    return serverVariables;
}
Also used : ServerVariables(io.swagger.v3.oas.models.servers.ServerVariables) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) JsonNode(com.fasterxml.jackson.databind.JsonNode) ServerVariable(io.swagger.v3.oas.models.servers.ServerVariable)

Aggregations

ServerVariables (io.swagger.v3.oas.models.servers.ServerVariables)4 Server (io.swagger.v3.oas.models.servers.Server)3 ServerVariable (io.swagger.v3.oas.models.servers.ServerVariable)3 ObjectNode (com.fasterxml.jackson.databind.node.ObjectNode)2 URI (java.net.URI)2 JsonProperty (com.fasterxml.jackson.annotation.JsonProperty)1 JsonNode (com.fasterxml.jackson.databind.JsonNode)1 Json (io.swagger.v3.core.util.Json)1 OpenApiResource (io.swagger.v3.jaxrs2.integration.resources.OpenApiResource)1 ExampleObject (io.swagger.v3.oas.annotations.media.ExampleObject)1 SwaggerConfiguration (io.swagger.v3.oas.integration.SwaggerConfiguration)1 OpenAPI (io.swagger.v3.oas.models.OpenAPI)1 Contact (io.swagger.v3.oas.models.info.Contact)1 Info (io.swagger.v3.oas.models.info.Info)1 License (io.swagger.v3.oas.models.info.License)1 io.swagger.v3.oas.models.security (io.swagger.v3.oas.models.security)1 HttpHandler (io.undertow.server.HttpHandler)1 CanonicalPathHandler (io.undertow.server.handlers.CanonicalPathHandler)1 PathHandler (io.undertow.server.handlers.PathHandler)1 RedirectHandler (io.undertow.server.handlers.RedirectHandler)1