Fix configuration handling with Feign (#17860)

* Fix configuration handling with Feign

* Fix test

* Fix compile error

* Fix compile error
This commit is contained in:
Dennis Melzer 2024-02-15 10:01:01 +01:00 committed by GitHub
parent 82bb813aeb
commit 7d76d0af61
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
22 changed files with 123 additions and 71 deletions

View File

@ -68,6 +68,7 @@ import org.openapitools.codegen.model.OperationsMap;
import org.openapitools.codegen.templating.mustache.SplitStringLambda;
import org.openapitools.codegen.templating.mustache.SpringHttpStatusLambda;
import org.openapitools.codegen.templating.mustache.TrimWhitespaceLambda;
import org.openapitools.codegen.utils.ProcessUtils;
import org.openapitools.codegen.utils.URLPathUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -594,16 +595,16 @@ public class SpringCodegen extends AbstractJavaCodegen
(sourceFolder + File.separator + configPackage).replace(".", java.io.File.separator),
"ApiKeyRequestInterceptor.java"));
supportingFiles.add(new SupportingFile("oauth2ClientProperties.mustache",
resourceFolder, "oauth2-client.properties"));
supportingFiles.add(new SupportingFile("clientPropertiesConfiguration.mustache",
(sourceFolder + File.separator + configPackage).replace(".", java.io.File.separator),
"ClientPropertiesConfiguration.java"));
if (ProcessUtils.hasOAuthMethods(openAPI)) {
supportingFiles.add(new SupportingFile("clientPropertiesConfiguration.mustache",
(sourceFolder + File.separator + configPackage).replace(".", java.io.File.separator),
"ClientPropertiesConfiguration.java"));
}
supportingFiles.add(new SupportingFile("clientConfiguration.mustache",
(sourceFolder + File.separator + configPackage).replace(".", java.io.File.separator),
"ClientConfiguration.java"));
apiTemplateFiles.put("apiClient.mustache", "Client.java");
if (!additionalProperties.containsKey(SINGLE_CONTENT_TYPES)) {
additionalProperties.put(SINGLE_CONTENT_TYPES, "true");

View File

@ -35,7 +35,6 @@ import feign.RequestTemplate;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ClientConfiguration {
{{#authMethods}}

View File

@ -2,17 +2,40 @@ package {{configPackage}};
{{#authMethods}}
{{#isOAuth}}
import org.springframework.context.annotation.PropertySource;
{{/isOAuth}}
{{/authMethods}}
import java.util.Properties;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.PropertiesPropertySource;
{{#hasAuthMethods}}
{{#hasOAuthMethods}}
@PropertySource( "classpath:/oauth2-client.properties" )
{{/hasOAuthMethods}}
{{/hasAuthMethods}}
@Configuration
@Configuration(value = "{{configPackage}}.clientPropertiesConfiguration")
public class ClientPropertiesConfiguration {
public ClientPropertiesConfiguration( final ConfigurableEnvironment configurableEnvironment ) {
final Properties properties = new Properties();
properties.put("spring.security.oauth2.client.registration.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.client-id", "set-{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}-client-id" );
properties.put("{{#scopes}}{{#-first}}spring.security.oauth2.client.registration.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.scope", "{{/-first}}{{scope}}{{^-last}},{{/-last}}{{/scopes}}" );
{{#isCode}}
properties.put("spring.security.oauth2.client.registration.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.authorization-grant-type", "authorization_code" );
properties.put("spring.security.oauth2.client.registration.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.redirect-uri", "set-{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}-redirect-uri" );
properties.put("spring.security.oauth2.client.provider.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.token-uri", {{{tokenUrl}}}" );
properties.put("spring.security.oauth2.client.provider.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.authorization-uri", "{{{authorizationUrl}}}" );
{{/isCode}}
{{#isPassword}}
properties.put("spring.security.oauth2.client.registration.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.authorization-grant-type", "password" );
properties.put("spring.security.oauth2.client.provider.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.token-uri", "{{{tokenUrl}}}" );
{{/isPassword}}
{{#isApplication}}
properties.put("spring.security.oauth2.client.registration.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.authorization-grant-type", "client_credentials" );
properties.put("spring.security.oauth2.client.provider.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.token-uri", "{{{tokenUrl}}}" );
{{/isApplication}}
{{#isImplicit}}
properties.put("spring.security.oauth2.client.registration.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.authorization-grant-type", "implicit" );
properties.put("spring.security.oauth2.client.provider.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.authorization-uri", "{{{authorizationUrl}}}" );
{{/isImplicit}}
final PropertiesPropertySource propertiesPropertySource = new PropertiesPropertySource("{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}", properties );
configurableEnvironment.getPropertySources().addLast( propertiesPropertySource );
}
}
{{/isOAuth}}
{{/authMethods}}

View File

@ -1,25 +0,0 @@
{{#authMethods}}
{{#isOAuth}}
spring.security.oauth2.client.registration.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.enabled=false
spring.security.oauth2.client.registration.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.client-id=set-{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}-client-id
{{#scopes}}{{#-first}}spring.security.oauth2.client.registration.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.scope={{/-first}}{{scope}}{{^-last}},{{/-last}}{{/scopes}}
{{#isCode}}
spring.security.oauth2.client.registration.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.redirect-uri=set-{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}-redirect-uri
spring.security.oauth2.client.provider.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.token-uri={{{tokenUrl}}}
spring.security.oauth2.client.provider.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.authorization-uri={{{authorizationUrl}}}
{{/isCode}}
{{#isPassword}}
spring.security.oauth2.client.registration.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.authorization-grant-type=password
spring.security.oauth2.client.provider.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.token-uri={{{tokenUrl}}}
{{/isPassword}}
{{#isApplication}}
spring.security.oauth2.client.registration.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.authorization-grant-type=client_credentials
spring.security.oauth2.client.provider.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.token-uri={{{tokenUrl}}}
{{/isApplication}}
{{#isImplicit}}
spring.security.oauth2.client.registration.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.authorization-grant-type=implicit
spring.security.oauth2.client.provider.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}.authorization-uri={{{authorizationUrl}}}
{{/isImplicit}}
{{/isOAuth}}
{{/authMethods}}

View File

@ -15,4 +15,3 @@ src/main/java/org/openapitools/model/Order.java
src/main/java/org/openapitools/model/Pet.java
src/main/java/org/openapitools/model/Tag.java
src/main/java/org/openapitools/model/User.java
src/main/resources/oauth2-client.properties

View File

@ -21,7 +21,6 @@ import feign.RequestTemplate;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ClientConfiguration {
private static final String CLIENT_PRINCIPAL_IMPLICIT = "oauth2FeignClient";

View File

@ -1,10 +1,21 @@
package org.openapitools.configuration;
import org.springframework.context.annotation.PropertySource;
import java.util.Properties;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.PropertiesPropertySource;
@PropertySource( "classpath:/oauth2-client.properties" )
@Configuration
@Configuration(value = "org.openapitools.configuration.clientPropertiesConfiguration")
public class ClientPropertiesConfiguration {
public ClientPropertiesConfiguration( final ConfigurableEnvironment configurableEnvironment ) {
final Properties properties = new Properties();
properties.put("spring.security.oauth2.client.registration.petstoreAuthImplicit.client-id", "set-petstoreAuthImplicit-client-id" );
properties.put("spring.security.oauth2.client.registration.petstoreAuthImplicit.scope", "write:pets,read:pets" );
properties.put("spring.security.oauth2.client.registration.petstoreAuthImplicit.authorization-grant-type", "implicit" );
properties.put("spring.security.oauth2.client.provider.petstoreAuthImplicit.authorization-uri", "http://petstore.swagger.io/api/oauth/dialog" );
final PropertiesPropertySource propertiesPropertySource = new PropertiesPropertySource("petstoreAuthImplicit", properties );
configurableEnvironment.getPropertySources().addLast( propertiesPropertySource );
}
}

View File

@ -15,4 +15,3 @@ src/main/java/org/openapitools/model/Order.java
src/main/java/org/openapitools/model/Pet.java
src/main/java/org/openapitools/model/Tag.java
src/main/java/org/openapitools/model/User.java
src/main/resources/oauth2-client.properties

View File

@ -21,7 +21,6 @@ import feign.RequestTemplate;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ClientConfiguration {
private static final String CLIENT_PRINCIPAL_IMPLICIT = "oauth2FeignClient";

View File

@ -1,10 +1,21 @@
package org.openapitools.configuration;
import org.springframework.context.annotation.PropertySource;
import java.util.Properties;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.PropertiesPropertySource;
@PropertySource( "classpath:/oauth2-client.properties" )
@Configuration
@Configuration(value = "org.openapitools.configuration.clientPropertiesConfiguration")
public class ClientPropertiesConfiguration {
public ClientPropertiesConfiguration( final ConfigurableEnvironment configurableEnvironment ) {
final Properties properties = new Properties();
properties.put("spring.security.oauth2.client.registration.petstoreAuthImplicit.client-id", "set-petstoreAuthImplicit-client-id" );
properties.put("spring.security.oauth2.client.registration.petstoreAuthImplicit.scope", "write:pets,read:pets" );
properties.put("spring.security.oauth2.client.registration.petstoreAuthImplicit.authorization-grant-type", "implicit" );
properties.put("spring.security.oauth2.client.provider.petstoreAuthImplicit.authorization-uri", "http://petstore.swagger.io/api/oauth/dialog" );
final PropertiesPropertySource propertiesPropertySource = new PropertiesPropertySource("petstoreAuthImplicit", properties );
configurableEnvironment.getPropertySources().addLast( propertiesPropertySource );
}
}

View File

@ -15,4 +15,3 @@ src/main/java/org/openapitools/model/Order.java
src/main/java/org/openapitools/model/Pet.java
src/main/java/org/openapitools/model/Tag.java
src/main/java/org/openapitools/model/User.java
src/main/resources/oauth2-client.properties

View File

@ -21,7 +21,6 @@ import feign.RequestTemplate;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ClientConfiguration {
private static final String CLIENT_PRINCIPAL_IMPLICIT = "oauth2FeignClient";

View File

@ -1,10 +1,21 @@
package org.openapitools.configuration;
import org.springframework.context.annotation.PropertySource;
import java.util.Properties;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.PropertiesPropertySource;
@PropertySource( "classpath:/oauth2-client.properties" )
@Configuration
@Configuration(value = "org.openapitools.configuration.clientPropertiesConfiguration")
public class ClientPropertiesConfiguration {
public ClientPropertiesConfiguration( final ConfigurableEnvironment configurableEnvironment ) {
final Properties properties = new Properties();
properties.put("spring.security.oauth2.client.registration.petstoreAuthImplicit.client-id", "set-petstoreAuthImplicit-client-id" );
properties.put("spring.security.oauth2.client.registration.petstoreAuthImplicit.scope", "write:pets,read:pets" );
properties.put("spring.security.oauth2.client.registration.petstoreAuthImplicit.authorization-grant-type", "implicit" );
properties.put("spring.security.oauth2.client.provider.petstoreAuthImplicit.authorization-uri", "http://petstore.swagger.io/api/oauth/dialog" );
final PropertiesPropertySource propertiesPropertySource = new PropertiesPropertySource("petstoreAuthImplicit", properties );
configurableEnvironment.getPropertySources().addLast( propertiesPropertySource );
}
}

View File

@ -15,4 +15,3 @@ src/main/java/org/openapitools/model/Order.java
src/main/java/org/openapitools/model/Pet.java
src/main/java/org/openapitools/model/Tag.java
src/main/java/org/openapitools/model/User.java
src/main/resources/oauth2-client.properties

View File

@ -21,7 +21,6 @@ import feign.RequestTemplate;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ClientConfiguration {
private static final String CLIENT_PRINCIPAL_IMPLICIT = "oauth2FeignClient";

View File

@ -1,10 +1,21 @@
package org.openapitools.configuration;
import org.springframework.context.annotation.PropertySource;
import java.util.Properties;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.PropertiesPropertySource;
@PropertySource( "classpath:/oauth2-client.properties" )
@Configuration
@Configuration(value = "org.openapitools.configuration.clientPropertiesConfiguration")
public class ClientPropertiesConfiguration {
public ClientPropertiesConfiguration( final ConfigurableEnvironment configurableEnvironment ) {
final Properties properties = new Properties();
properties.put("spring.security.oauth2.client.registration.petstoreAuthImplicit.client-id", "set-petstoreAuthImplicit-client-id" );
properties.put("spring.security.oauth2.client.registration.petstoreAuthImplicit.scope", "write:pets,read:pets" );
properties.put("spring.security.oauth2.client.registration.petstoreAuthImplicit.authorization-grant-type", "implicit" );
properties.put("spring.security.oauth2.client.provider.petstoreAuthImplicit.authorization-uri", "http://petstore.swagger.io/api/oauth/dialog" );
final PropertiesPropertySource propertiesPropertySource = new PropertiesPropertySource("petstoreAuthImplicit", properties );
configurableEnvironment.getPropertySources().addLast( propertiesPropertySource );
}
}

View File

@ -15,4 +15,3 @@ src/main/java/org/openapitools/model/Order.java
src/main/java/org/openapitools/model/Pet.java
src/main/java/org/openapitools/model/Tag.java
src/main/java/org/openapitools/model/User.java
src/main/resources/oauth2-client.properties

View File

@ -21,7 +21,6 @@ import feign.RequestTemplate;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ClientConfiguration {
private static final String CLIENT_PRINCIPAL_IMPLICIT = "oauth2FeignClient";

View File

@ -1,10 +1,21 @@
package org.openapitools.configuration;
import org.springframework.context.annotation.PropertySource;
import java.util.Properties;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.PropertiesPropertySource;
@PropertySource( "classpath:/oauth2-client.properties" )
@Configuration
@Configuration(value = "org.openapitools.configuration.clientPropertiesConfiguration")
public class ClientPropertiesConfiguration {
public ClientPropertiesConfiguration( final ConfigurableEnvironment configurableEnvironment ) {
final Properties properties = new Properties();
properties.put("spring.security.oauth2.client.registration.petstoreAuthImplicit.client-id", "set-petstoreAuthImplicit-client-id" );
properties.put("spring.security.oauth2.client.registration.petstoreAuthImplicit.scope", "write:pets,read:pets" );
properties.put("spring.security.oauth2.client.registration.petstoreAuthImplicit.authorization-grant-type", "implicit" );
properties.put("spring.security.oauth2.client.provider.petstoreAuthImplicit.authorization-uri", "http://petstore.swagger.io/api/oauth/dialog" );
final PropertiesPropertySource propertiesPropertySource = new PropertiesPropertySource("petstoreAuthImplicit", properties );
configurableEnvironment.getPropertySources().addLast( propertiesPropertySource );
}
}

View File

@ -15,4 +15,3 @@ src/main/java/org/openapitools/model/Order.java
src/main/java/org/openapitools/model/Pet.java
src/main/java/org/openapitools/model/Tag.java
src/main/java/org/openapitools/model/User.java
src/main/resources/oauth2-client.properties

View File

@ -21,7 +21,6 @@ import feign.RequestTemplate;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ClientConfiguration {
private static final String CLIENT_PRINCIPAL_IMPLICIT = "oauth2FeignClient";

View File

@ -1,10 +1,21 @@
package org.openapitools.configuration;
import org.springframework.context.annotation.PropertySource;
import java.util.Properties;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.PropertiesPropertySource;
@PropertySource( "classpath:/oauth2-client.properties" )
@Configuration
@Configuration(value = "org.openapitools.configuration.clientPropertiesConfiguration")
public class ClientPropertiesConfiguration {
public ClientPropertiesConfiguration( final ConfigurableEnvironment configurableEnvironment ) {
final Properties properties = new Properties();
properties.put("spring.security.oauth2.client.registration.petstoreAuthImplicit.client-id", "set-petstoreAuthImplicit-client-id" );
properties.put("spring.security.oauth2.client.registration.petstoreAuthImplicit.scope", "write:pets,read:pets" );
properties.put("spring.security.oauth2.client.registration.petstoreAuthImplicit.authorization-grant-type", "implicit" );
properties.put("spring.security.oauth2.client.provider.petstoreAuthImplicit.authorization-uri", "http://petstore.swagger.io/api/oauth/dialog" );
final PropertiesPropertySource propertiesPropertySource = new PropertiesPropertySource("petstoreAuthImplicit", properties );
configurableEnvironment.getPropertySources().addLast( propertiesPropertySource );
}
}