diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java index 83938212fb1f..3e9c54fed53e 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java @@ -17,6 +17,9 @@ package org.openapitools.codegen.languages; +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.security.SecurityScheme; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.openapitools.codegen.*; @@ -499,8 +502,28 @@ public int compare(CodegenParameter one, CodegenParameter another) { supportingFiles.add(new SupportingFile("auth/RetryingOAuth.mustache", authFolder, "RetryingOAuth.java")); } + boolean isOAuth = Optional + .ofNullable(this.openAPI) + .map(OpenAPI::getComponents) + .map(Components::getSecuritySchemes) + .map(v -> !v.isEmpty()) + .orElse(false) + + && + + this + .openAPI + .getComponents() + .getSecuritySchemes() + .values() + .stream() + .findFirst() + .map(SecurityScheme::getType) + .map(v -> v.equals(SecurityScheme.Type.OAUTH2)) + .orElse(false); + // google-api-client doesn't use the OpenAPI auth, because it uses Google Credential directly (HttpRequestInitializer) - if ((!(GOOGLE_API_CLIENT.equals(getLibrary()) || REST_ASSURED.equals(getLibrary()) || usePlayWS)) && ProcessUtils.hasOAuthMethods(objs)) { + if ((!(GOOGLE_API_CLIENT.equals(getLibrary()) || REST_ASSURED.equals(getLibrary()) || usePlayWS)) && (ProcessUtils.hasOAuthMethods(objs) || isOAuth)) { supportingFiles.add(new SupportingFile("auth/OAuth.mustache", authFolder, "OAuth.java")); supportingFiles.add(new SupportingFile("auth/OAuthFlow.mustache", authFolder, "OAuthFlow.java")); } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java index 48183b49efba..f5fd1497b29e 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java @@ -261,6 +261,65 @@ public void updateCodegenPropertyEnumWithCustomNames() { Assert.assertEquals(testedEnumVar.getOrDefault("value", ""), "1"); } + @Test + public void testGenerateJavaClientOauth2() throws Exception { + Map properties = new HashMap<>(); + properties.put(JavaClientCodegen.JAVA8_MODE, true); + properties.put(CodegenConstants.MODEL_PACKAGE, "xyz.abcdef.model"); + properties.put(CodegenConstants.API_PACKAGE, "xyz.abcdef.api"); + + File output = Files.createTempDirectory("test").toFile(); + + final CodegenConfigurator configurator = new CodegenConfigurator() + .setGeneratorName("java") + .setLibrary(JavaClientCodegen.RESTTEMPLATE) + .setAdditionalProperties(properties) + .setInputSpec("src/test/resources/2_0/javaClientOauth2.yaml") + .setOutputDir(output.getAbsolutePath().replace("\\", "/")); + + final ClientOptInput clientOptInput = configurator.toClientOptInput(); + MockDefaultGenerator generator = new MockDefaultGenerator(); + generator.opts(clientOptInput).generate(); + + Map generatedFiles = generator.getFiles(); + Assert.assertEquals(generatedFiles.size(), 28); + TestUtils.ensureContainsFile(generatedFiles, output, ".gitignore"); + TestUtils.ensureContainsFile(generatedFiles, output, ".openapi-generator-ignore"); + TestUtils.ensureContainsFile(generatedFiles, output, ".openapi-generator/VERSION"); + TestUtils.ensureContainsFile(generatedFiles, output, ".travis.yml"); + TestUtils.ensureContainsFile(generatedFiles, output, "build.gradle"); + TestUtils.ensureContainsFile(generatedFiles, output, "build.sbt"); + TestUtils.ensureContainsFile(generatedFiles, output, "docs/DefaultApi.md"); + TestUtils.ensureContainsFile(generatedFiles, output, "git_push.sh"); + TestUtils.ensureContainsFile(generatedFiles, output, "gradle.properties"); + TestUtils.ensureContainsFile(generatedFiles, output, "gradle/wrapper/gradle-wrapper.jar"); + TestUtils.ensureContainsFile(generatedFiles, output, "gradle/wrapper/gradle-wrapper.properties"); + TestUtils.ensureContainsFile(generatedFiles, output, "gradlew.bat"); + TestUtils.ensureContainsFile(generatedFiles, output, "gradlew"); + TestUtils.ensureContainsFile(generatedFiles, output, "pom.xml"); + TestUtils.ensureContainsFile(generatedFiles, output, "README.md"); + TestUtils.ensureContainsFile(generatedFiles, output, "settings.gradle"); + TestUtils.ensureContainsFile(generatedFiles, output, "src/main/AndroidManifest.xml"); + TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/api/DefaultApi.java"); + TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/ApiClient.java"); + TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/auth/ApiKeyAuth.java"); + TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/auth/Authentication.java"); + TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/auth/HttpBasicAuth.java"); + TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/auth/HttpBearerAuth.java"); + TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/auth/OAuth.java"); + TestUtils.ensureContainsFile(generatedFiles, output, "src/main/java/xyz/abcdef/auth/OAuthFlow.java"); + TestUtils.ensureContainsFile(generatedFiles, output, "src/test/java/xyz/abcdef/api/DefaultApiTest.java"); + + String defaultApiFilename = new File(output, "src/main/java/xyz/abcdef/api/DefaultApi.java").getAbsolutePath().replace("\\", "/"); + String defaultApiConent = generatedFiles.get(defaultApiFilename); + assertTrue(defaultApiConent.contains("public class DefaultApi")); + + WrittenTemplateBasedFile templateBasedFile = TestUtils.getTemplateBasedFile(generator, output, "src/main/java/xyz/abcdef/api/DefaultApi.java"); + Assert.assertEquals(templateBasedFile.getTemplateData().get("classname"), "DefaultApi"); + + output.deleteOnExit(); + } + @Test public void testGeneratePing() throws Exception { Map properties = new HashMap<>(); diff --git a/modules/openapi-generator/src/test/resources/2_0/javaClientOauth2.yaml b/modules/openapi-generator/src/test/resources/2_0/javaClientOauth2.yaml new file mode 100644 index 000000000000..81d0bcdece13 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/2_0/javaClientOauth2.yaml @@ -0,0 +1,23 @@ +swagger: '2.0' +info: + description: '' + version: 1.0.0 + title: AtknIchzurKtovetLakoach +schemes: + - https + - http +basePath: /services/1.0.0 +paths: + /java-client-oauth2: + post: + operationId: javaClientOauth2 + responses: + '201': + description: OK +host: 'localhost:8243' +securityDefinitions: + default: + type: oauth2 + authorizationUrl: 'https://localhost:8243/authorize' + flow: implicit + scopes: {}