Search in sources :

Example 1 with Api

use of io.swagger.models.apideclaration.Api in project swagger-parser by swagger-api.

the class ApiDeclarationParser method readApis.

List<Api> readApis(List<Map<String, Object>> om, MessageBuilder messages) {
    List<Api> output = new ArrayList<Api>();
    for (Map<String, Object> o : om) {
        Api op = new Api();
        String path = readString(o.get("path"));
        if (path != null) {
            op.setPath(path);
        } else {
            messages.append(new Message("ApiDeclaration.apis", "path is missing", Severity.ERROR));
        }
        Object operations = o.get("operations");
        if (operations instanceof List) {
            List<Operation> ops = readOperations((List<Map<String, Object>>) operations, messages);
            op.setOperations(ops);
        }
        output.add(op);
    }
    return output;
}
Also used : Message(io.swagger.report.Message) ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) List(java.util.List) Api(io.swagger.models.apideclaration.Api) Operation(io.swagger.models.apideclaration.Operation) HashMap(java.util.HashMap) Map(java.util.Map)

Example 2 with Api

use of io.swagger.models.apideclaration.Api in project swagger-parser by swagger-api.

the class ApiDeclarationParser method read.

public ApiDeclaration read(String json, MessageBuilder messages) {
    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
    mapper.setSerializationInclusion(Include.NON_NULL);
    try {
        Map<String, Object> m = mapper.readValue(json, Map.class);
        ApiDeclaration api = new ApiDeclaration();
        String apiVersion = readString(m.get("apiVersion"));
        if (apiVersion != null) {
            api.setApiVersion(apiVersion);
        } else {
            messages.append(new Message("ApiDeclaration.apiVersion", "apiVersion is missing", Severity.RECOMMENDED));
        }
        String swaggerVersion = readString(m.get("swaggerVersion"));
        if (swaggerVersion != null) {
            api.setSwaggerVersion(swaggerVersion);
        } else {
            messages.append(new Message("ApiDeclaration.swaggerVersion", "swaggerVersion is missing", Severity.ERROR));
        }
        String basePath = readString(m.get("basePath"));
        if (basePath != null) {
            api.setBasePath(basePath);
        } else {
            messages.append(new Message("ApiDeclaration.basePath", "basePath is missing", Severity.ERROR));
        }
        String resourcePath = readString(m.get("resourcePath"));
        if (resourcePath != null) {
            api.setResourcePath(resourcePath);
        } else {
            messages.append(new Message("ApiDeclaration.resourcePath", "resourcePath is missing", Severity.ERROR));
        }
        String produces = readString(m.get("produces"));
        Object apis = m.get("apis");
        if (apis != null) {
            List<Api> o = readApis((List<Map<String, Object>>) apis, messages);
            if (o.size() > 0) {
                api.setApis(o);
            }
        }
        Object models = m.get("models");
        if (models != null) {
            Map<String, Model> modelMap = readModels((Map<String, Object>) models, messages);
            api.setModels(modelMap);
        }
        return api;
    } catch (Exception e) {
        messages.append(new Message("ApiDeclaration", "invalid json", Severity.ERROR));
        return null;
    }
}
Also used : ApiDeclaration(io.swagger.models.apideclaration.ApiDeclaration) Message(io.swagger.report.Message) Model(io.swagger.models.apideclaration.Model) Api(io.swagger.models.apideclaration.Api) HashMap(java.util.HashMap) Map(java.util.Map) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper)

Example 3 with Api

use of io.swagger.models.apideclaration.Api in project swagger-parser by swagger-api.

the class SwaggerCompatConverter method convert.

public Swagger convert(ResourceListing resourceListing, List<ApiDeclaration> apiDeclarations) {
    Info info = new Info();
    if (resourceListing.getInfo() != null) {
        ApiInfo apiInfo = resourceListing.getInfo();
        Contact contact = null;
        if (apiInfo.getContact() != null) {
            contact = new Contact().url(apiInfo.getContact());
        }
        License license = null;
        if (apiInfo.getLicense() != null) {
            license = new License().name(apiInfo.getLicense()).url(apiInfo.getLicenseUrl());
        }
        info = new Info().description(apiInfo.getDescription()).version(resourceListing.getApiVersion()).title(apiInfo.getTitle()).termsOfService(apiInfo.getTermsOfServiceUrl()).contact(contact).license(license);
    } else if (resourceListing.getApiVersion() != null) {
        info = new Info().version(resourceListing.getApiVersion());
    }
    Map<String, Path> paths = new HashMap<String, Path>();
    Map<String, Model> definitions = new HashMap<String, Model>();
    String basePath = null;
    for (ApiDeclaration apiDeclaration : apiDeclarations) {
        String tag;
        if (apiDeclaration.getApiListingRef() != null) {
            String refPath = apiDeclaration.getApiListingRef().getPath();
            tag = refPath.substring(refPath.lastIndexOf("/") + 1);
        } else {
            tag = apiDeclaration.getResourcePath();
        }
        if (tag != null) {
            tag = tag.replaceAll("/", "");
        }
        if (basePath != null) {
            if (!basePath.equals(apiDeclaration.getBasePath()) && apiDeclaration.getBasePath() != null) {
                LOGGER.warn("warning!  multiple basePath values not supported!");
            }
        } else {
            basePath = apiDeclaration.getBasePath();
        }
        List<Api> apis = apiDeclaration.getApis();
        for (Api api : apis) {
            String apiPath = api.getPath();
            String description = api.getDescription();
            List<io.swagger.models.apideclaration.Operation> ops = api.getOperations();
            Path path = paths.get(apiPath);
            if (path == null) {
                path = new Path();
                paths.put(apiPath, path);
            }
            for (io.swagger.models.apideclaration.Operation op : ops) {
                Operation operation = convertOperation(tag, op, apiDeclaration);
                if (op.getMethod() != null) {
                    path.set(op.getMethod().toString().toLowerCase(), operation);
                } else {
                    LOGGER.info("skipping operation with missing method:\n" + Json.pretty(op));
                }
            }
        }
        // model definitions
        Map<String, io.swagger.models.apideclaration.Model> apiModels = apiDeclaration.getModels();
        for (String key : apiModels.keySet()) {
            Model model = convertModel(apiModels.get(key));
            definitions.put(key, model);
        }
    }
    String host = null;
    String scheme = "http";
    if (basePath != null) {
        String[] parts = basePath.split("://");
        if (parts.length == 2) {
            scheme = parts[0];
            int pos = parts[1].indexOf("/");
            if (pos != -1) {
                host = parts[1].substring(0, pos);
                basePath = parts[1].substring(pos);
            } else {
                host = parts[1];
                basePath = "/";
            }
        }
        if (!basePath.startsWith("/")) {
            basePath = "/" + basePath;
        }
    }
    Swagger swagger = new Swagger().host(host).scheme(Scheme.forValue(scheme)).basePath(basePath).info(info).paths(paths).basePath(basePath);
    swagger.setDefinitions(definitions);
    // host is read from the api declarations
    Map<String, Authorization> authorizations = resourceListing.getAuthorizations();
    if (authorizations != null) {
        for (String authNickname : authorizations.keySet()) {
            Authorization auth = authorizations.get(authNickname);
            if (auth instanceof OAuth2Authorization) {
                OAuth2Authorization o2 = (OAuth2Authorization) auth;
                List<AuthorizationScope> scopes = o2.getScopes();
                if (o2.getGrantTypes().getImplicit() != null) {
                    ImplicitGrant ig = o2.getGrantTypes().getImplicit();
                    OAuth2Definition oauth2 = new OAuth2Definition().implicit(ig.getLoginEndpoint().getUrl());
                    if (swagger.getSecurityDefinitions() != null && swagger.getSecurityDefinitions().keySet().contains(authNickname)) {
                        System.err.println("Warning!  Authorization nickname already in use!");
                    } else {
                        swagger.securityDefinition(authNickname, oauth2);
                    }
                    for (AuthorizationScope scope : scopes) {
                        oauth2.scope(scope.getScope(), scope.getDescription());
                    }
                } else if (o2.getGrantTypes().getAuthorization_code() != null) {
                    AuthorizationCodeGrant ac = (AuthorizationCodeGrant) o2.getGrantTypes().getAuthorization_code();
                    OAuth2Definition oauth2 = new OAuth2Definition().accessCode(ac.getTokenRequestEndpoint().getUrl(), ac.getTokenEndpoint().getUrl());
                    if (swagger.getSecurityDefinitions() != null && swagger.getSecurityDefinitions().keySet().contains(authNickname)) {
                        System.err.println("Warning!  Authorization nickname already in use!");
                    } else {
                        swagger.securityDefinition(authNickname, oauth2);
                    }
                    for (AuthorizationScope scope : scopes) {
                        oauth2.scope(scope.getScope(), scope.getDescription());
                    }
                }
            } else if (auth instanceof ApiKeyAuthorization) {
                ApiKeyAuthorization o2 = (ApiKeyAuthorization) auth;
                ApiKeyAuthDefinition def = new ApiKeyAuthDefinition();
                PassAs passAs = o2.getPassAs();
                if (PassAs.HEADER.equals(passAs)) {
                    def.in(In.HEADER);
                } else {
                    def.in(In.QUERY);
                }
                def.setName(o2.getKeyname());
                swagger.securityDefinition(authNickname, def);
            } else if (auth instanceof BasicAuthorization) {
                BasicAuthDefinition def = new BasicAuthDefinition();
                swagger.securityDefinition(authNickname, def);
            }
        }
    }
    return swagger;
}
Also used : HashMap(java.util.HashMap) BasicAuthorization(io.swagger.models.resourcelisting.BasicAuthorization) License(io.swagger.models.License) OAuth2Definition(io.swagger.models.auth.OAuth2Definition) Operation(io.swagger.models.Operation) BasicAuthorization(io.swagger.models.resourcelisting.BasicAuthorization) ApiKeyAuthorization(io.swagger.models.resourcelisting.ApiKeyAuthorization) Authorization(io.swagger.models.resourcelisting.Authorization) OAuth2Authorization(io.swagger.models.resourcelisting.OAuth2Authorization) PassAs(io.swagger.models.PassAs) Swagger(io.swagger.models.Swagger) ApiKeyAuthorization(io.swagger.models.resourcelisting.ApiKeyAuthorization) Path(io.swagger.models.Path) ApiDeclaration(io.swagger.models.apideclaration.ApiDeclaration) OAuth2Authorization(io.swagger.models.resourcelisting.OAuth2Authorization) Info(io.swagger.models.Info) ApiInfo(io.swagger.models.resourcelisting.ApiInfo) BasicAuthDefinition(io.swagger.models.auth.BasicAuthDefinition) Contact(io.swagger.models.Contact) ApiKeyAuthDefinition(io.swagger.models.auth.ApiKeyAuthDefinition) AuthorizationCodeGrant(io.swagger.models.resourcelisting.AuthorizationCodeGrant) ApiInfo(io.swagger.models.resourcelisting.ApiInfo) Model(io.swagger.models.Model) RefModel(io.swagger.models.RefModel) ArrayModel(io.swagger.models.ArrayModel) ImplicitGrant(io.swagger.models.resourcelisting.ImplicitGrant) Api(io.swagger.models.apideclaration.Api) AuthorizationScope(io.swagger.models.AuthorizationScope)

Aggregations

Api (io.swagger.models.apideclaration.Api)3 HashMap (java.util.HashMap)3 ApiDeclaration (io.swagger.models.apideclaration.ApiDeclaration)2 Message (io.swagger.report.Message)2 Map (java.util.Map)2 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)1 ArrayModel (io.swagger.models.ArrayModel)1 AuthorizationScope (io.swagger.models.AuthorizationScope)1 Contact (io.swagger.models.Contact)1 Info (io.swagger.models.Info)1 License (io.swagger.models.License)1 Model (io.swagger.models.Model)1 Operation (io.swagger.models.Operation)1 PassAs (io.swagger.models.PassAs)1 Path (io.swagger.models.Path)1 RefModel (io.swagger.models.RefModel)1 Swagger (io.swagger.models.Swagger)1 Model (io.swagger.models.apideclaration.Model)1 Operation (io.swagger.models.apideclaration.Operation)1 ApiKeyAuthDefinition (io.swagger.models.auth.ApiKeyAuthDefinition)1