Skip to content

Commit 1b22b41

Browse files
committed
fix: also fix auth generation for sttp4
1 parent e414593 commit 1b22b41

3 files changed

Lines changed: 60 additions & 4 deletions

File tree

modules/openapi-generator/src/main/resources/scala-sttp4/api.mustache

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ class {{classname}}(baseUrl: String) {
2222
{{/javadocRenderer}}
2323
def {{operationId}}({{>methodParameters}}): Request[{{#separateErrorChannel}}Either[ResponseException[String, Exception], {{>operationReturnType}}]{{/separateErrorChannel}}{{^separateErrorChannel}}{{>operationReturnType}}{{/separateErrorChannel}}] =
2424
basicRequest
25-
.method(Method.{{httpMethod.toUpperCase}}, uri"$baseUrl{{{path}}}{{#queryParams.0}}?{{#queryParams}}{{baseName}}=${ {{{paramName}}} }{{^-last}}&{{/-last}}{{/queryParams}}{{/queryParams.0}}{{#isApiKey}}{{#isKeyInQuery}}{{^queryParams.0}}?{{/queryParams.0}}{{#queryParams.0}}&{{/queryParams.0}}{{keyParamName}}=${apiKey.value}&{{/isKeyInQuery}}{{/isApiKey}}")
25+
.method(Method.{{httpMethod.toUpperCase}}, uri"$baseUrl{{{path}}}{{#queryParams.0}}?{{/queryParams.0}}{{#queryParams}}{{baseName}}=${{{paramName}}}{{^-last}}&{{/-last}}{{/queryParams}}{{#authMethods}}{{#isApiKey}}{{#isKeyInQuery}}{{#queryParams.0}}&{{/queryParams.0}}{{^queryParams.0}}?{{/queryParams.0}}{{keyParamName}}=${apiKeyQuery}{{/isKeyInQuery}}{{/isApiKey}}{{/authMethods}}")
2626
.contentType({{#consumes.0}}"{{{mediaType}}}"{{/consumes.0}}{{^consumes}}"application/json"{{/consumes}}){{#headerParams}}
2727
.header({{>paramCreation}}){{/headerParams}}{{#authMethods}}{{#isBasic}}{{#isBasicBasic}}
2828
.auth.basic(username, password){{/isBasicBasic}}{{#isBasicBearer}}
2929
.auth.bearer(bearerToken){{/isBasicBearer}}{{/isBasic}}{{#isApiKey}}{{#isKeyInHeader}}
30-
.header("{{keyParamName}}", apiKey){{/isKeyInHeader}}{{#isKeyInCookie}}
31-
.cookie("{{keyParamName}}", apiKey){{/isKeyInCookie}}{{/isApiKey}}{{/authMethods}}{{#formParams.0}}{{^isMultipart}}
30+
.header("{{keyParamName}}", apiKeyHeader){{/isKeyInHeader}}{{#isKeyInCookie}}
31+
.cookie("{{keyParamName}}", apiKeyCookie){{/isKeyInCookie}}{{/isApiKey}}{{/authMethods}}{{#formParams.0}}{{^isMultipart}}
3232
.body(Map({{#formParams}}
3333
{{>paramFormCreation}}{{^-last}},{{/-last}}{{/formParams}}
3434
)){{/isMultipart}}{{#isMultipart}}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{{#authMethods.0}}{{#authMethods}}{{#isApiKey}}apiKey: String{{/isApiKey}}{{#isBasic}}{{#isBasicBasic}}username: String, password: String{{/isBasicBasic}}{{#isBasicBearer}}bearerToken: String{{/isBasicBearer}}{{/isBasic}}{{^-last}}, {{/-last}}{{/authMethods}})({{/authMethods.0}}{{#allParams}}{{paramName}}: {{#required}}{{dataType}}{{/required}}{{^required}}{{#isContainer}}{{dataType}}{{/isContainer}}{{^isContainer}}Option[{{dataType}}]{{/isContainer}}{{/required}}{{^defaultValue}}{{^required}}{{^isContainer}} = None{{/isContainer}}{{/required}}{{/defaultValue}}{{^-last}}, {{/-last}}{{/allParams}}
1+
{{#authMethods.0}}{{#authMethods}}{{#isApiKey}}{{#isKeyInHeader}}apiKeyHeader: String{{/isKeyInHeader}}{{#isKeyInQuery}}apiKeyQuery: String{{/isKeyInQuery}}{{#isKeyInCookie}}apiKeyCookie: String{{/isKeyInCookie}}{{/isApiKey}}{{#isBasic}}{{#isBasicBasic}}username: String, password: String{{/isBasicBasic}}{{#isBasicBearer}}bearerToken: String{{/isBasicBearer}}{{/isBasic}}{{^-last}}, {{/-last}}{{/authMethods}})({{/authMethods.0}}{{#allParams}}{{paramName}}: {{#required}}{{dataType}}{{/required}}{{^required}}{{#isContainer}}{{dataType}}{{/isContainer}}{{^isContainer}}Option[{{dataType}}]{{/isContainer}}{{/required}}{{^defaultValue}}{{^required}}{{^isContainer}} = None{{/isContainer}}{{/required}}{{/defaultValue}}{{^-last}}, {{/-last}}{{/allParams}}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package org.openapitools.codegen.scala;
2+
3+
import io.swagger.parser.OpenAPIParser;
4+
import io.swagger.v3.oas.models.OpenAPI;
5+
import io.swagger.v3.oas.models.media.Schema;
6+
import io.swagger.v3.parser.core.models.ParseOptions;
7+
import org.openapitools.codegen.ClientOptInput;
8+
import org.openapitools.codegen.CodegenConstants;
9+
import org.openapitools.codegen.DefaultGenerator;
10+
import org.openapitools.codegen.languages.ScalaSttp4ClientCodegen;
11+
import org.openapitools.codegen.languages.features.CXFServerFeatures;
12+
import org.testng.Assert;
13+
import org.testng.annotations.Test;
14+
15+
import java.io.File;
16+
import java.io.IOException;
17+
import java.nio.file.Files;
18+
import java.nio.file.Path;
19+
import java.nio.file.Paths;
20+
21+
import static org.openapitools.codegen.TestUtils.assertFileContains;
22+
23+
public class Sttp4CodegenTest {
24+
25+
@Test
26+
public void verifyApiKeyLocations() throws IOException {
27+
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
28+
output.deleteOnExit();
29+
String outputPath = output.getAbsolutePath().replace('\\', '/');
30+
31+
OpenAPI openAPI = new OpenAPIParser()
32+
.readLocation("src/test/resources/bugs/issue_13474.json", null, new ParseOptions()).getOpenAPI();
33+
34+
ScalaSttp4ClientCodegen codegen = new ScalaSttp4ClientCodegen();
35+
codegen.setOutputDir(output.getAbsolutePath());
36+
codegen.additionalProperties().put(CXFServerFeatures.LOAD_TEST_DATA_FROM_FILE, "true");
37+
38+
ClientOptInput input = new ClientOptInput();
39+
input.openAPI(openAPI);
40+
input.config(codegen);
41+
42+
DefaultGenerator generator = new DefaultGenerator();
43+
44+
generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true");
45+
generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false");
46+
generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false");
47+
generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true");
48+
generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false");
49+
generator.opts(input).generate();
50+
51+
Path path = Paths.get(outputPath + "/src/main/scala/org/openapitools/client/api/DefaultApi.scala");
52+
assertFileContains(path, ".method(Method.GET, uri\"$baseUrl/entities/?api_key=${apiKeyQuery}\")\n");
53+
assertFileContains(path, ".header(\"X-Api-Key\", apiKeyHeader)");
54+
assertFileContains(path, ".cookie(\"apikey\", apiKeyCookie)");
55+
}
56+
}

0 commit comments

Comments
 (0)