diff --git a/bin/configs/kotlin-json-request-string.yaml b/bin/configs/kotlin-json-request-string.yaml index 375622ae5df0..bbe5ddd4283b 100644 --- a/bin/configs/kotlin-json-request-string.yaml +++ b/bin/configs/kotlin-json-request-string.yaml @@ -6,3 +6,4 @@ additionalProperties: requestDateConverter: toString artifactId: kotlin-petstore-json-request-string parcelizeModels: true + supportAndroidApiLevel25AndBelow: true diff --git a/docs/generators/kotlin.md b/docs/generators/kotlin.md index f4b0aceeb60a..6432fc5be67a 100644 --- a/docs/generators/kotlin.md +++ b/docs/generators/kotlin.md @@ -25,6 +25,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |null| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |null| |sourceFolder|source folder for generated code| |src/main/kotlin| +|supportAndroidApiLevel25AndBelow|[WARNING] This flag will generate code that has a known security vulnerability. It uses `kotlin.io.createTempFile` instead of `java.nio.file.Files.createTempFile` in oder to support Android API level 25 and bellow. For more info, please check the following links https://github.com/OpenAPITools/openapi-generator/security/advisories/GHSA-23x4-m842-fmwf, https://github.com/OpenAPITools/openapi-generator/pull/9284| |false| |useCoroutines|Whether to use the Coroutines adapter with the retrofit2 library.| |false| |useRxJava|Whether to use the RxJava adapter with the retrofit2 library.| |false| |useRxJava2|Whether to use the RxJava2 adapter with the retrofit2 library.| |false| diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java index d2a229fe9888..c98ffd60e72e 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java @@ -63,6 +63,8 @@ public class KotlinClientCodegen extends AbstractKotlinCodegen { public static final String MOSHI_CODE_GEN = "moshiCodeGen"; + public static final String SUPPORT_ANDROID_API_LEVEL_25_AND_BELLOW = "supportAndroidApiLevel25AndBelow"; + protected static final String VENDOR_EXTENSION_BASE_NAME_LITERAL = "x-base-name-literal"; protected String dateLibrary = DateLibrary.JAVA8.value; @@ -208,6 +210,8 @@ public class KotlinClientCodegen extends AbstractKotlinCodegen { cliOptions.add(CliOption.newBoolean(USE_COROUTINES, "Whether to use the Coroutines adapter with the retrofit2 library.")); cliOptions.add(CliOption.newBoolean(MOSHI_CODE_GEN, "Whether to enable codegen with the Moshi library. Refer to the [official Moshi doc](https://github.com/square/moshi#codegen) for more info.")); + + cliOptions.add(CliOption.newBoolean(SUPPORT_ANDROID_API_LEVEL_25_AND_BELLOW, "[WARNING] This flag will generate code that has a known security vulnerability. It uses `kotlin.io.createTempFile` instead of `java.nio.file.Files.createTempFile` in oder to support Android API level 25 and bellow. For more info, please check the following links https://github.com/OpenAPITools/openapi-generator/security/advisories/GHSA-23x4-m842-fmwf, https://github.com/OpenAPITools/openapi-generator/pull/9284")); } public CodegenType getTag() { diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache index aa5a275a9f37..b470beae2e5d 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache @@ -1,5 +1,8 @@ package {{packageName}}.infrastructure +{{#supportAndroidApiLevel25AndBelow}} +import android.os.Build +{{/supportAndroidApiLevel25AndBelow}} import okhttp3.Credentials import okhttp3.OkHttpClient import okhttp3.RequestBody @@ -28,7 +31,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date {{^threetenbp}} import java.time.LocalDate @@ -176,7 +178,17 @@ import org.threeten.bp.OffsetTime } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.{{packageName}}", null).toFile() + {{^supportAndroidApiLevel25AndBelow}} + val f = java.nio.file.Files.createTempFile("tmp.{{packageName}}", null).toFile() + {{/supportAndroidApiLevel25AndBelow}} + {{#supportAndroidApiLevel25AndBelow}} + val f = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + java.nio.file.Files.createTempFile("tmp.net.medicineone.teleconsultationandroid.openapi.openapicommon", null).toFile() + } else { + @Suppress("DEPRECATION") + createTempFile("tmp.net.medicineone.teleconsultationandroid.openapi.openapicommon", null) + } + {{/supportAndroidApiLevel25AndBelow}} f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 8ffe54035961..a1c98200ac47 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -16,7 +16,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -119,7 +118,7 @@ open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = java.nio.file.Files.createTempFile("tmp.org.openapitools.client", null).toFile() f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 0ea33dc522cc..e9bcbc7981c3 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -16,7 +16,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -119,7 +118,7 @@ open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = java.nio.file.Files.createTempFile("tmp.org.openapitools.client", null).toFile() f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index cd2898923dd3..a9fe6b46d778 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -1,5 +1,6 @@ package org.openapitools.client.infrastructure +import android.os.Build import okhttp3.Credentials import okhttp3.OkHttpClient import okhttp3.RequestBody @@ -16,7 +17,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -119,7 +119,12 @@ open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + java.nio.file.Files.createTempFile("tmp.net.medicineone.teleconsultationandroid.openapi.openapicommon", null).toFile() + } else { + @Suppress("DEPRECATION") + createTempFile("tmp.net.medicineone.teleconsultationandroid.openapi.openapicommon", null) + } f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 8ffe54035961..a1c98200ac47 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -16,7 +16,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -119,7 +118,7 @@ open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = java.nio.file.Files.createTempFile("tmp.org.openapitools.client", null).toFile() f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index bc9ed02c0f16..c548762e28be 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -16,7 +16,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -119,7 +118,7 @@ open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = java.nio.file.Files.createTempFile("tmp.org.openapitools.client", null).toFile() f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index d43c0c614d57..98b12a971509 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -16,7 +16,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -119,7 +118,7 @@ internal open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = java.nio.file.Files.createTempFile("tmp.org.openapitools.client", null).toFile() f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index bc9ed02c0f16..c548762e28be 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -16,7 +16,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -119,7 +118,7 @@ open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = java.nio.file.Files.createTempFile("tmp.org.openapitools.client", null).toFile() f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 8fad7b08960f..72929a5dc0fc 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -14,7 +14,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -117,7 +116,7 @@ open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = java.nio.file.Files.createTempFile("tmp.org.openapitools.client", null).toFile() f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index bc9ed02c0f16..c548762e28be 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -16,7 +16,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -119,7 +118,7 @@ open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = java.nio.file.Files.createTempFile("tmp.org.openapitools.client", null).toFile() f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index bd6833418965..12ea3e7c065e 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -16,7 +16,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import org.threeten.bp.LocalDate import org.threeten.bp.LocalDateTime @@ -119,7 +118,7 @@ open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = java.nio.file.Files.createTempFile("tmp.org.openapitools.client", null).toFile() f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index a9f5f6ce2a23..9da041200e1c 100644 --- a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -16,7 +16,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -119,7 +118,7 @@ open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = java.nio.file.Files.createTempFile("tmp.org.openapitools.client", null).toFile() f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index bc9ed02c0f16..c548762e28be 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -16,7 +16,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -119,7 +118,7 @@ open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = java.nio.file.Files.createTempFile("tmp.org.openapitools.client", null).toFile() f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent)