diff --git a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Validate.java b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Validate.java index 726aaf300d6..63ce1f6cb5d 100644 --- a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Validate.java +++ b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Validate.java @@ -22,9 +22,11 @@ import io.airlift.airline.Option; import io.swagger.parser.OpenAPIParser; import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.parser.core.models.AuthorizationValue; import io.swagger.v3.parser.core.models.ParseOptions; import io.swagger.v3.parser.core.models.SwaggerParseResult; import org.apache.commons.text.WordUtils; +import org.openapitools.codegen.auth.AuthParser; import org.openapitools.codegen.validation.ValidationResult; import org.openapitools.codegen.validations.oas.OpenApiEvaluator; import org.openapitools.codegen.validations.oas.RuleConfiguration; @@ -44,12 +46,20 @@ public class Validate extends OpenApiGeneratorCommand { @Option(name = { "--recommend"}, title = "recommend spec improvements") private Boolean recommend; + @Option( + name = {"-a", "--auth"}, + title = "authorization", + description = "adds authorization headers when fetching the OpenAPI definitions remotely. " + + "Pass in a URL-encoded string of name:header with a comma separating multiple values") + private String auth; + @Override public void execute() { System.out.println("Validating spec (" + spec + ")"); ParseOptions options = new ParseOptions(); options.setResolve(true); - SwaggerParseResult result = new OpenAPIParser().readLocation(spec, null, options); + final List authorizationValues = AuthParser.parse(this.auth); + SwaggerParseResult result = new OpenAPIParser().readLocation(spec, authorizationValues, options); List messageList = result.getMessages(); Set errors = new HashSet<>(messageList); Set warnings = new HashSet<>(); diff --git a/modules/openapi-generator-maven-plugin/src/main/java/org/openapitools/codegen/plugin/CodeGenMojo.java b/modules/openapi-generator-maven-plugin/src/main/java/org/openapitools/codegen/plugin/CodeGenMojo.java index 792ca0dda2c..11112e96fa5 100644 --- a/modules/openapi-generator-maven-plugin/src/main/java/org/openapitools/codegen/plugin/CodeGenMojo.java +++ b/modules/openapi-generator-maven-plugin/src/main/java/org/openapitools/codegen/plugin/CodeGenMojo.java @@ -24,6 +24,7 @@ import io.swagger.v3.core.util.Json; import io.swagger.v3.core.util.Yaml; import io.swagger.v3.parser.OpenAPIResolver; import io.swagger.v3.parser.OpenAPIV3Parser; +import io.swagger.v3.parser.core.models.AuthorizationValue; import io.swagger.v3.parser.core.models.ParseOptions; import lombok.Setter; import org.apache.commons.io.FileUtils; @@ -37,6 +38,7 @@ import org.apache.maven.plugins.annotations.*; import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectHelper; import org.openapitools.codegen.*; +import org.openapitools.codegen.auth.AuthParser; import org.openapitools.codegen.config.CodegenConfigurator; import org.openapitools.codegen.config.GlobalSettings; import org.openapitools.codegen.config.MergedSpecBuilder; @@ -1002,8 +1004,10 @@ public class CodeGenMojo extends AbstractMojo { parseOptions.setResolve(true); final URL remoteUrl = inputSpecRemoteUrl(); + final List authorizationValues = AuthParser.parse(this.auth); + return Hashing.sha256().hashBytes( - new OpenAPIParser().readLocation(remoteUrl == null ? inputSpec : remoteUrl.toString(), null, parseOptions) + new OpenAPIParser().readLocation(remoteUrl == null ? inputSpec : remoteUrl.toString(), authorizationValues, parseOptions) .getOpenAPI().toString().getBytes(StandardCharsets.UTF_8) ).toString(); } @@ -1089,7 +1093,9 @@ public class CodeGenMojo extends AbstractMojo { // Merge the OpenAPI spec file. final var parseOptions = new ParseOptions(); parseOptions.setResolve(true); - final var openApiMerged = new OpenAPIResolver(new OpenAPIV3Parser().readLocation(inputSpec, null, parseOptions).getOpenAPI()).resolve(); + final List authorizationValues = AuthParser.parse(this.auth); + + final var openApiMerged = new OpenAPIResolver(new OpenAPIV3Parser().readLocation(inputSpec, authorizationValues, parseOptions).getOpenAPI()).resolve(); // Switch based on JSON or YAML. final var extension = inputSpec.toLowerCase(Locale.ROOT).endsWith(".json") ? ".json" : ".yaml";