forked from loafle/openapi-generator-original
Added Micronaut configuration points (#15005)
* Added ability to configure the AuthorizationFilter pattern * Added configuration for the Client annotation * Generated samples * Remove extra newline from template * Updated samples * Declarative client annotation path attribute only supported when id attribute is set * Cleaned up style of generated file --------- Co-authored-by: Shane Perry <shane.perry@acimacredit.com>
This commit is contained in:
@@ -29,10 +29,13 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|
||||
|artifactId|artifactId in generated pom.xml. This also becomes part of the generated library's filename| |openapi-micronaut-client|
|
||||
|artifactUrl|artifact URL in generated pom.xml| |https://github.com/openapitools/openapi-generator|
|
||||
|artifactVersion|artifact version in generated pom.xml. This also becomes part of the generated library's filename| |1.0.0|
|
||||
|authorizationFilterPattern|Configure the authorization filter pattern for the client. Generally defined when generating clients from multiple specification files| |null|
|
||||
|basePathSeparator|Configure the separator to use between the application name and base path when referencing the property| |-|
|
||||
|bigDecimalAsString|Treat BigDecimal values as Strings to avoid precision loss.| |false|
|
||||
|booleanGetterPrefix|Set booleanGetterPrefix| |get|
|
||||
|build|Specify for which build tool to generate files|<dl><dt>**gradle**</dt><dd>Gradle configuration is generated for the project</dd><dt>**all**</dt><dd>Both Gradle and Maven configurations are generated</dd><dt>**maven**</dt><dd>Maven configuration is generated for the project</dd></dl>|all|
|
||||
|camelCaseDollarSign|Fix camelCase when starting with $ sign. when true : $Value when false : $value| |false|
|
||||
|clientId|Configure the service ID for the Client| |null|
|
||||
|configureAuth|Configure all the authorization methods as specified in the file| |false|
|
||||
|containerDefaultToNull|Set containers (array, set, map) default to null| |false|
|
||||
|dateFormat|Specify the format pattern of date as a string| |null|
|
||||
|
||||
@@ -13,12 +13,20 @@ import org.openapitools.codegen.meta.Stability;
|
||||
public class JavaMicronautClientCodegen extends JavaMicronautAbstractCodegen {
|
||||
|
||||
public static final String OPT_CONFIGURE_AUTH = "configureAuth";
|
||||
public static final String OPT_CONFIGURE_AUTH_FILTER_PATTERN = "configureAuthFilterPattern";
|
||||
public static final String OPT_CONFIGURE_CLIENT_ID = "configureClientId";
|
||||
public static final String ADDITIONAL_CLIENT_TYPE_ANNOTATIONS = "additionalClientTypeAnnotations";
|
||||
public static final String AUTHORIZATION_FILTER_PATTERN = "authorizationFilterPattern";
|
||||
public static final String BASE_PATH_SEPARATOR = "basePathSeparator";
|
||||
public static final String CLIENT_ID = "clientId";
|
||||
|
||||
public static final String NAME = "java-micronaut-client";
|
||||
|
||||
protected boolean configureAuthorization;
|
||||
protected List<String> additionalClientTypeAnnotations;
|
||||
protected String authorizationFilterPattern;
|
||||
protected String basePathSeparator = "-";
|
||||
protected String clientId;
|
||||
|
||||
public JavaMicronautClientCodegen() {
|
||||
super();
|
||||
@@ -33,6 +41,9 @@ public class JavaMicronautClientCodegen extends JavaMicronautAbstractCodegen {
|
||||
|
||||
cliOptions.add(CliOption.newBoolean(OPT_CONFIGURE_AUTH, "Configure all the authorization methods as specified in the file", configureAuthorization));
|
||||
cliOptions.add(CliOption.newString(ADDITIONAL_CLIENT_TYPE_ANNOTATIONS, "Additional annotations for client type(class level annotations). List separated by semicolon(;) or new line (Linux or Windows)"));
|
||||
cliOptions.add(CliOption.newString(AUTHORIZATION_FILTER_PATTERN, "Configure the authorization filter pattern for the client. Generally defined when generating clients from multiple specification files"));
|
||||
cliOptions.add(CliOption.newString(BASE_PATH_SEPARATOR, "Configure the separator to use between the application name and base path when referencing the property").defaultValue(basePathSeparator));
|
||||
cliOptions.add(CliOption.newString(CLIENT_ID, "Configure the service ID for the Client"));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -66,6 +77,14 @@ public class JavaMicronautClientCodegen extends JavaMicronautAbstractCodegen {
|
||||
// Write property that is present in server
|
||||
writePropertyBack(OPT_USE_AUTH, true);
|
||||
|
||||
writePropertyBack(OPT_CONFIGURE_AUTH_FILTER_PATTERN, false);
|
||||
writePropertyBack(OPT_CONFIGURE_CLIENT_ID, false);
|
||||
|
||||
if(additionalProperties.containsKey(BASE_PATH_SEPARATOR)) {
|
||||
basePathSeparator = additionalProperties.get(BASE_PATH_SEPARATOR).toString();
|
||||
}
|
||||
writePropertyBack(BASE_PATH_SEPARATOR, basePathSeparator);
|
||||
|
||||
final String invokerFolder = (sourceFolder + '/' + invokerPackage).replace(".", "/");
|
||||
|
||||
// Authorization files
|
||||
@@ -79,6 +98,12 @@ public class JavaMicronautClientCodegen extends JavaMicronautAbstractCodegen {
|
||||
supportingFiles.add(new SupportingFile("client/auth/configuration/ApiKeyAuthConfiguration.mustache", authConfigurationFolder, "ApiKeyAuthConfiguration.java"));
|
||||
supportingFiles.add(new SupportingFile("client/auth/configuration/ConfigurableAuthorization.mustache", authConfigurationFolder, "ConfigurableAuthorization.java"));
|
||||
supportingFiles.add(new SupportingFile("client/auth/configuration/HttpBasicAuthConfiguration.mustache", authConfigurationFolder, "HttpBasicAuthConfiguration.java"));
|
||||
|
||||
if (additionalProperties.containsKey(AUTHORIZATION_FILTER_PATTERN)) {
|
||||
String pattern = additionalProperties.get(AUTHORIZATION_FILTER_PATTERN).toString();
|
||||
this.setAuthorizationFilterPattern(pattern);
|
||||
additionalProperties.put(AUTHORIZATION_FILTER_PATTERN, authorizationFilterPattern);
|
||||
}
|
||||
}
|
||||
|
||||
if (additionalProperties.containsKey(ADDITIONAL_CLIENT_TYPE_ANNOTATIONS)) {
|
||||
@@ -87,6 +112,18 @@ public class JavaMicronautClientCodegen extends JavaMicronautAbstractCodegen {
|
||||
additionalProperties.put(ADDITIONAL_CLIENT_TYPE_ANNOTATIONS, additionalClientTypeAnnotations);
|
||||
}
|
||||
|
||||
if (additionalProperties.containsKey(CLIENT_ID)) {
|
||||
String id = additionalProperties.get(CLIENT_ID).toString();
|
||||
this.setClientId(id);
|
||||
additionalProperties.put(CLIENT_ID, clientId);
|
||||
}
|
||||
|
||||
if (additionalProperties.containsKey(BASE_PATH_SEPARATOR)) {
|
||||
String separator = additionalProperties.get(BASE_PATH_SEPARATOR).toString();
|
||||
this.setBasePathSeparator(separator);
|
||||
additionalProperties.put(BASE_PATH_SEPARATOR, basePathSeparator);
|
||||
}
|
||||
|
||||
// Api file
|
||||
apiTemplateFiles.clear();
|
||||
apiTemplateFiles.put("client/api.mustache", ".java");
|
||||
@@ -109,4 +146,18 @@ public class JavaMicronautClientCodegen extends JavaMicronautAbstractCodegen {
|
||||
public void setAdditionalClientTypeAnnotations(final List<String> additionalClientTypeAnnotations) {
|
||||
this.additionalClientTypeAnnotations = additionalClientTypeAnnotations;
|
||||
}
|
||||
|
||||
public void setAuthorizationFilterPattern(final String pattern) {
|
||||
writePropertyBack(OPT_CONFIGURE_AUTH_FILTER_PATTERN, true);
|
||||
this.authorizationFilterPattern = pattern;
|
||||
}
|
||||
|
||||
public void setClientId(final String id) {
|
||||
writePropertyBack(OPT_CONFIGURE_CLIENT_ID, true);
|
||||
this.clientId = id;
|
||||
}
|
||||
|
||||
public void setBasePathSeparator(final String separator) {
|
||||
this.basePathSeparator = separator;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,7 +45,9 @@ import io.swagger.v3.oas.annotations.security.SecurityRequirement;
|
||||
{{{.}}}
|
||||
{{/additionalClientTypeAnnotations}}
|
||||
{{>common/generatedAnnotation}}
|
||||
@Client("${{openbrace}}{{{applicationName}}}-base-path{{closebrace}}")
|
||||
@Client({{#configureClientId}}
|
||||
id = "{{clientId}}",
|
||||
path = {{/configureClientId}}"${{openbrace}}{{{applicationName}}}{{basePathSeparator}}base-path{{closebrace}}")
|
||||
public interface {{classname}} {
|
||||
{{#operations}}
|
||||
{{#operation}}
|
||||
|
||||
@@ -37,7 +37,7 @@ import {{javaxPackage}}.annotation.Generated;
|
||||
|
||||
|
||||
{{>common/generatedAnnotation}}
|
||||
@Filter(Filter.MATCH_ALL_PATTERN)
|
||||
@Filter({{#configureAuthFilterPattern}}"{{authorizationFilterPattern}}"{{/configureAuthFilterPattern}}{{^configureAuthFilterPattern}}Filter.MATCH_ALL_PATTERN{{/configureAuthFilterPattern}})
|
||||
public class AuthorizationFilter implements HttpClientFilter {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(ClientCredentialsHttpClientFilter.class);
|
||||
|
||||
|
||||
@@ -251,4 +251,63 @@ public class MicronautClientCodegenTest extends AbstractMicronautCodegenTest {
|
||||
assertFileContains(outputPath + "/src/main/java/org/openapitools/api/PetApi.java", "MyAdditionalAnnotation1(1,${param1})");
|
||||
assertFileContains(outputPath + "/src/main/java/org/openapitools/api/PetApi.java", "MyAdditionalAnnotation2(2,${param2})");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDefaultAuthorizationFilterPattern() {
|
||||
JavaMicronautClientCodegen codegen = new JavaMicronautClientCodegen();
|
||||
codegen.additionalProperties().put(JavaMicronautClientCodegen.OPT_CONFIGURE_AUTH, "true");
|
||||
String outputPath = generateFiles(codegen, PETSTORE_PATH, CodegenConstants.SUPPORTING_FILES, CodegenConstants.APIS);
|
||||
|
||||
// Micronaut AuthorizationFilter should default to match all patterns
|
||||
assertFileContains(outputPath + "/src/main/java/org/openapitools/auth/AuthorizationFilter.java", "@Filter(Filter.MATCH_ALL_PATTERN)");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAuthorizationFilterPattern() {
|
||||
JavaMicronautClientCodegen codegen = new JavaMicronautClientCodegen();
|
||||
codegen.additionalProperties().put(JavaMicronautClientCodegen.OPT_CONFIGURE_AUTH, "true");
|
||||
codegen.additionalProperties().put(JavaMicronautClientCodegen.AUTHORIZATION_FILTER_PATTERN, "pet/**");
|
||||
String outputPath = generateFiles(codegen, PETSTORE_PATH, CodegenConstants.SUPPORTING_FILES, CodegenConstants.APIS);
|
||||
|
||||
// Micronaut AuthorizationFilter should match the provided pattern
|
||||
assertFileContains(outputPath + "/src/main/java/org/openapitools/auth/AuthorizationFilter.java", "@Filter(\"pet/**\")");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNoConfigureClientId() {
|
||||
JavaMicronautClientCodegen codegen = new JavaMicronautClientCodegen();
|
||||
String outputPath = generateFiles(codegen, PETSTORE_PATH, CodegenConstants.APIS);
|
||||
|
||||
// Micronaut declarative http client should not specify a Client id
|
||||
assertFileContains(outputPath + "/src/main/java/org/openapitools/api/PetApi.java", "@Client(\"${openapi-micronaut-client-base-path}\")");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testConfigureClientId() {
|
||||
JavaMicronautClientCodegen codegen = new JavaMicronautClientCodegen();
|
||||
codegen.additionalProperties().put(JavaMicronautClientCodegen.CLIENT_ID, "unit-test");
|
||||
String outputPath = generateFiles(codegen, PETSTORE_PATH, CodegenConstants.APIS);
|
||||
|
||||
// Micronaut declarative http client should use the provided Client id
|
||||
assertFileContains(outputPath + "/src/main/java/org/openapitools/api/PetApi.java", "@Client( id = \"unit-test\", path = \"${openapi-micronaut-client-base-path}\")");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDefaultPathSeparator() {
|
||||
JavaMicronautClientCodegen codegen = new JavaMicronautClientCodegen();
|
||||
String outputPath = generateFiles(codegen, PETSTORE_PATH, CodegenConstants.APIS);
|
||||
|
||||
// Micronaut declarative http client should use the default path separator
|
||||
assertFileContains(outputPath + "/src/main/java/org/openapitools/api/PetApi.java", "@Client(\"${openapi-micronaut-client-base-path}\")");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testConfigurePathSeparator() {
|
||||
JavaMicronautClientCodegen codegen = new JavaMicronautClientCodegen();
|
||||
codegen.additionalProperties().put(JavaMicronautClientCodegen.BASE_PATH_SEPARATOR, ".");
|
||||
String outputPath = generateFiles(codegen, PETSTORE_PATH, CodegenConstants.APIS);
|
||||
|
||||
// Micronaut declarative http client should use the provided path separator
|
||||
assertFileContains(outputPath + "/src/main/java/org/openapitools/api/PetApi.java", "@Client(\"${openapi-micronaut-client.base-path}\")");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user