From 18da7ea9344232abb93d8e0e5db327658f2fb52b Mon Sep 17 00:00:00 2001 From: Ryan Date: Sun, 11 Apr 2021 14:17:07 -0400 Subject: [PATCH] security schema component --- .../kompendium/models/OpenApiSpec.kt | 8 ++--- .../models/OpenApiSpecComponents.kt | 2 +- .../kompendium/models/OpenApiSpecOAuthFlow.kt | 8 ++--- .../kompendium/models/OpenApiSpecSchema.kt | 12 +++++++- .../models/OpenApiSpecSecuritySchema.kt | 12 -------- .../leafygreens/kompendium/util/TestData.kt | 30 +++++++++++++++++-- kompendium/src/test/resources/petstore.json | 22 +++++++++++++- 7 files changed, 68 insertions(+), 26 deletions(-) delete mode 100644 kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecSecuritySchema.kt diff --git a/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpec.kt b/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpec.kt index a93cc8a8d..b3d170ee0 100644 --- a/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpec.kt +++ b/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpec.kt @@ -4,11 +4,11 @@ data class OpenApiSpec( val openapi: String = "3.0.3", val info: OpenApiSpecInfo? = null, // TODO Needs to default to server object with url of `/` - val servers: List = emptyList(), - val paths: Map = emptyMap(), + val servers: List? = null, + val paths: Map? = null, val components: OpenApiSpecComponents? = null, // todo needs to reference objects in the components -> security scheme 🤔 - val security: Map = emptyMap(), - val tags: List = emptyList(), + val security: List>>? = null, + val tags: List? = null, val externalDocs: OpenApiSpecExternalDocumentation? = null ) diff --git a/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecComponents.kt b/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecComponents.kt index ec6967eff..dea3d65d3 100644 --- a/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecComponents.kt +++ b/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecComponents.kt @@ -2,5 +2,5 @@ package org.leafygreens.kompendium.models // TODO I *think* the only thing I need here is the security https://swagger.io/specification/#components-object data class OpenApiSpecComponents( - val securitySchemes: Map + val securitySchemes: Map ) diff --git a/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecOAuthFlow.kt b/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecOAuthFlow.kt index abe261689..4e7820f32 100644 --- a/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecOAuthFlow.kt +++ b/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecOAuthFlow.kt @@ -3,8 +3,8 @@ package org.leafygreens.kompendium.models import java.net.URI data class OpenApiSpecOAuthFlow( - val authorizationUrl: URI, - val tokenUrl: URI, - val refreshUrl: URI, - val scopes: Map + val authorizationUrl: URI? = null, + val tokenUrl: URI? = null, + val refreshUrl: URI? = null, + val scopes: Map? = null ) diff --git a/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecSchema.kt b/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecSchema.kt index f27b9d922..e660f154a 100644 --- a/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecSchema.kt +++ b/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecSchema.kt @@ -6,7 +6,7 @@ sealed class OpenApiSpecSchemaTyped( val type: String, ) : OpenApiSpecSchema() -data class OpenApiSpecSchemaArray( +data class OpenApiSpecSchemaArray( val items: T ) : OpenApiSpecSchemaTyped("array") @@ -19,3 +19,13 @@ data class OpenApiSpecSchemaString( data class OpenApiSpecSchemaRef( val `$ref`: String ) : OpenApiSpecSchema() + +data class OpenApiSpecSchemaSecurity( + val type: String? = null, // TODO Enum? "apiKey", "http", "oauth2", "openIdConnect" + val name: String? = null, + val `in`: String? = null, + val scheme: String? = null, + val flows: OpenApiSpecOAuthFlows? = null, + val bearerFormat: String? = null, + val description: String? = null, +) : OpenApiSpecSchema() diff --git a/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecSecuritySchema.kt b/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecSecuritySchema.kt deleted file mode 100644 index 85588b3b7..000000000 --- a/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecSecuritySchema.kt +++ /dev/null @@ -1,12 +0,0 @@ -package org.leafygreens.kompendium.models - -data class OpenApiSpecSecuritySchema( - val type: String, // TODO Enum? "apiKey", "http", "oauth2", "openIdConnect" - val name: String, - val `in`: String, - val scheme: String, - val flows: OpenApiSpecOAuthFlows, - val bearerFormat: String?, - val description: String?, -) - diff --git a/kompendium/src/test/kotlin/org/leafygreens/kompendium/util/TestData.kt b/kompendium/src/test/kotlin/org/leafygreens/kompendium/util/TestData.kt index e2befb453..8f6d743e4 100644 --- a/kompendium/src/test/kotlin/org/leafygreens/kompendium/util/TestData.kt +++ b/kompendium/src/test/kotlin/org/leafygreens/kompendium/util/TestData.kt @@ -3,20 +3,23 @@ package org.leafygreens.kompendium.util import java.io.File import java.net.URI import org.leafygreens.kompendium.models.OpenApiSpec +import org.leafygreens.kompendium.models.OpenApiSpecComponents import org.leafygreens.kompendium.models.OpenApiSpecExternalDocumentation import org.leafygreens.kompendium.models.OpenApiSpecInfo import org.leafygreens.kompendium.models.OpenApiSpecInfoContact import org.leafygreens.kompendium.models.OpenApiSpecInfoLicense import org.leafygreens.kompendium.models.OpenApiSpecMediaType +import org.leafygreens.kompendium.models.OpenApiSpecOAuthFlow +import org.leafygreens.kompendium.models.OpenApiSpecOAuthFlows import org.leafygreens.kompendium.models.OpenApiSpecParameter -import org.leafygreens.kompendium.models.OpenApiSpecSchemaArray -import org.leafygreens.kompendium.models.OpenApiSpecSchemaString import org.leafygreens.kompendium.models.OpenApiSpecPathItem import org.leafygreens.kompendium.models.OpenApiSpecPathItemOperation -import org.leafygreens.kompendium.models.OpenApiSpecReferenceObject import org.leafygreens.kompendium.models.OpenApiSpecRequest import org.leafygreens.kompendium.models.OpenApiSpecResponse +import org.leafygreens.kompendium.models.OpenApiSpecSchemaArray import org.leafygreens.kompendium.models.OpenApiSpecSchemaRef +import org.leafygreens.kompendium.models.OpenApiSpecSchemaSecurity +import org.leafygreens.kompendium.models.OpenApiSpecSchemaString import org.leafygreens.kompendium.models.OpenApiSpecServer import org.leafygreens.kompendium.models.OpenApiSpecTag @@ -192,6 +195,27 @@ object TestData { )) ) ) + ), + components = OpenApiSpecComponents( + securitySchemes = mapOf( + "petstore_auth" to OpenApiSpecSchemaSecurity( + type = "oauth2", + flows = OpenApiSpecOAuthFlows( + implicit = OpenApiSpecOAuthFlow( + authorizationUrl = URI("http://petstore.swagger.io/oauth/dialog"), + scopes = mapOf( + "write:pets" to "modify pets in your account", + "read:pets" to "read your pets" + ) + ) + ) + ), + "api_key" to OpenApiSpecSchemaSecurity( + type = "apiKey", + name = "api_key", + `in` = "header" + ) + ) ) ) } diff --git a/kompendium/src/test/resources/petstore.json b/kompendium/src/test/resources/petstore.json index 72e2d0c0d..0022ac917 100644 --- a/kompendium/src/test/resources/petstore.json +++ b/kompendium/src/test/resources/petstore.json @@ -152,7 +152,27 @@ } } }, - "security" : { }, + "components" : { + "securitySchemes" : { + "petstore_auth" : { + "type" : "oauth2", + "flows" : { + "implicit" : { + "authorizationUrl" : "http://petstore.swagger.io/oauth/dialog", + "scopes" : { + "write:pets" : "modify pets in your account", + "read:pets" : "read your pets" + } + } + } + }, + "api_key" : { + "type" : "apiKey", + "name" : "api_key", + "in" : "header" + } + } + }, "tags" : [ { "name" : "pet", "description" : "Everything about your Pets",