diff --git a/src/main/kotlin/com/papsign/ktor/openapigen/model/security/SecurityModel.kt b/src/main/kotlin/com/papsign/ktor/openapigen/model/security/SecurityModel.kt index 2960f5efe..5b44a318a 100644 --- a/src/main/kotlin/com/papsign/ktor/openapigen/model/security/SecurityModel.kt +++ b/src/main/kotlin/com/papsign/ktor/openapigen/model/security/SecurityModel.kt @@ -9,7 +9,7 @@ import com.papsign.ktor.openapigen.model.Described class SecurityModel : MutableMap> by mutableMapOf(), DataModel { operator fun set(scheme: SecuritySchemeModel, requirements: List) where T: Enum, T: Described { - this[scheme.name] = requirements + this[scheme.referenceName] = requirements } fun set(scheme: SecuritySchemeModel) where T: Enum, T: Described { diff --git a/src/main/kotlin/com/papsign/ktor/openapigen/model/security/SecuritySchemeModel.kt b/src/main/kotlin/com/papsign/ktor/openapigen/model/security/SecuritySchemeModel.kt index c441e9725..f300232a1 100644 --- a/src/main/kotlin/com/papsign/ktor/openapigen/model/security/SecuritySchemeModel.kt +++ b/src/main/kotlin/com/papsign/ktor/openapigen/model/security/SecuritySchemeModel.kt @@ -9,7 +9,8 @@ import kotlin.reflect.full.memberProperties data class SecuritySchemeModel constructor( val type: SecuritySchemeType, - val name: String, + val referenceName: String, + val name: String? = null, val `in`: APIKeyLocation? = null, val scheme: HttpSecurityScheme? = null, val bearerFormat: String? = null, @@ -20,6 +21,6 @@ data class SecuritySchemeModel constructor( override fun serialize(): Map { return this::class.memberProperties.associateBy { it.name }.mapValues, Any?>, Any?> { (_, prop) -> convertToValue((prop as KProperty1).get(this)) - }.filter { it.key != "name" }.cleanEmptyValues() + }.filter { it.key != "referenceName" }.cleanEmptyValues() } } diff --git a/src/main/kotlin/com/papsign/ktor/openapigen/modules/handlers/AuthHandler.kt b/src/main/kotlin/com/papsign/ktor/openapigen/modules/handlers/AuthHandler.kt index d546d779a..298926abb 100644 --- a/src/main/kotlin/com/papsign/ktor/openapigen/modules/handlers/AuthHandler.kt +++ b/src/main/kotlin/com/papsign/ktor/openapigen/modules/handlers/AuthHandler.kt @@ -14,9 +14,9 @@ object AuthHandler: OperationModule { val authHandlers = provider.ofType>() val security = authHandlers.flatMap { it.security }.distinct() operation.security = security.map { SecurityModel().also { sec -> - it.forEach { sec[it.scheme.name] = it.requirements } + it.forEach { sec[it.scheme.referenceName] = it.requirements } } } - apiGen.api.components.securitySchemes.putAll(security.flatMap { it.map { it.scheme } }.associateBy { it.name }) + apiGen.api.components.securitySchemes.putAll(security.flatMap { it.map { it.scheme } }.associateBy { it.referenceName }) } } diff --git a/src/test/kotlin/JwtAuthDocumentationGenerationTest.kt b/src/test/kotlin/JwtAuthDocumentationGenerationTest.kt index 619933d04..0fbac1429 100644 --- a/src/test/kotlin/JwtAuthDocumentationGenerationTest.kt +++ b/src/test/kotlin/JwtAuthDocumentationGenerationTest.kt @@ -18,22 +18,28 @@ internal class JwtAuthDocumentationGenerationTest { assertEquals(HttpStatusCode.OK, response.status()) assertTrue( response.content!!.contains( - "\"securitySchemes\" : {\n" + - " \"jwtAuth\" : {\n" + - " \"bearerFormat\" : \"JWT\",\n" + - " \"scheme\" : \"bearer\",\n" + - " \"type\" : \"http\"\n" + - " }\n" + - " }" + """"securitySchemes" : { + "ThisIsSchemeName" : { + "in" : "cookie", + "name" : "ThisIsCookieName", + "type" : "apiKey" + }, + "jwtAuth" : { + "bearerFormat" : "JWT", + "scheme" : "bearer", + "type" : "http" + } + }""" ) ) assertTrue( response.content!!.contains( - "\"security\" : [ {\n" + - " \"jwtAuth\" : [ ]\n" + - " } ]" + """"security" : [ { + "jwtAuth" : [ ], + "ThisIsSchemeName" : [ ] + }""" ) ) } } -} \ No newline at end of file +} diff --git a/src/test/kotlin/TestServerWithJwtAuth.kt b/src/test/kotlin/TestServerWithJwtAuth.kt index 500d5a244..1fe0c8726 100644 --- a/src/test/kotlin/TestServerWithJwtAuth.kt +++ b/src/test/kotlin/TestServerWithJwtAuth.kt @@ -13,6 +13,7 @@ import com.papsign.ktor.openapigen.annotations.Response import com.papsign.ktor.openapigen.annotations.parameters.PathParam import com.papsign.ktor.openapigen.annotations.properties.description.Description import com.papsign.ktor.openapigen.model.Described +import com.papsign.ktor.openapigen.model.security.APIKeyLocation import com.papsign.ktor.openapigen.model.security.HttpSecurityScheme import com.papsign.ktor.openapigen.model.security.SecuritySchemeModel import com.papsign.ktor.openapigen.model.security.SecuritySchemeType @@ -165,7 +166,15 @@ object TestServerWithJwtAuth { SecuritySchemeType.http, scheme = HttpSecurityScheme.bearer, bearerFormat = "JWT", - name = "jwtAuth" + referenceName = "jwtAuth", + ), emptyList() + ), + AuthProvider.Security( + SecuritySchemeModel( + SecuritySchemeType.apiKey, + `in` = APIKeyLocation.cookie, + name = "ThisIsCookieName", + referenceName = "ThisIsSchemeName", ), emptyList() ) )) diff --git a/src/test/kotlin/com/papsign/ktor/openapigen/routing/GenericRoutesTest.kt b/src/test/kotlin/com/papsign/ktor/openapigen/routing/GenericRoutesTest.kt index abc5c5d92..1116ce914 100644 --- a/src/test/kotlin/com/papsign/ktor/openapigen/routing/GenericRoutesTest.kt +++ b/src/test/kotlin/com/papsign/ktor/openapigen/routing/GenericRoutesTest.kt @@ -234,7 +234,7 @@ class GenericRoutesTest { listOf( AuthProvider.Security( SecuritySchemeModel( - name = "basicAuth", + referenceName = "basicAuth", type = SecuritySchemeType.http, scheme = HttpSecurityScheme.basic ), emptyList()