From 6e1cdfe7c5a5bceeae2b2eb34ed7f0e1907069aa Mon Sep 17 00:00:00 2001 From: Ryan Date: Sun, 11 Apr 2021 13:31:53 -0400 Subject: [PATCH 1/7] added parameter schemas --- .../org/leafygreens/kompendium/Kompendium.kt | 1 - .../models/OpenApiSpecParameterSchema.kt | 14 ++++++++++ .../models/OpenApiSpecReferencable.kt | 5 +++- .../leafygreens/kompendium/util/TestData.kt | 27 +++++++++++++++++++ kompendium/src/test/resources/petstore.json | 27 +++++++++++++++++++ 5 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecParameterSchema.kt diff --git a/kompendium/src/main/kotlin/org/leafygreens/kompendium/Kompendium.kt b/kompendium/src/main/kotlin/org/leafygreens/kompendium/Kompendium.kt index c0ff31312..88ddef1ea 100644 --- a/kompendium/src/main/kotlin/org/leafygreens/kompendium/Kompendium.kt +++ b/kompendium/src/main/kotlin/org/leafygreens/kompendium/Kompendium.kt @@ -1,6 +1,5 @@ package org.leafygreens.kompendium -import java.net.URI import org.leafygreens.kompendium.models.OpenApiSpec class Kompendium { diff --git a/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecParameterSchema.kt b/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecParameterSchema.kt new file mode 100644 index 000000000..beca3826d --- /dev/null +++ b/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecParameterSchema.kt @@ -0,0 +1,14 @@ +package org.leafygreens.kompendium.models + +sealed class OpenApiSpecParameterSchema( + val type: String, +) + +data class OpenApiSpecParameterSchemaArray( + val items: T +) : OpenApiSpecParameterSchema("array") + +data class OpenApiSpecParameterSchemaString( + val default: String, + val `enum`: Set? = null +) : OpenApiSpecParameterSchema("string") diff --git a/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecReferencable.kt b/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecReferencable.kt index 206a3ec99..fa37cae83 100644 --- a/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecReferencable.kt +++ b/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecReferencable.kt @@ -27,7 +27,10 @@ data class OpenApiSpecParameter( val description: String?, val required: Boolean = true, val deprecated: Boolean = false, - val allowEmptyValue: Boolean = false + val allowEmptyValue: Boolean = false, + val style: String? = null, + val explode: Boolean? = false, + val schema: OpenApiSpecParameterSchema? = null ) : OpenApiSpecReferencable() data class OpenApiSpecRequest( 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 2741a47dd..5cfceed40 100644 --- a/kompendium/src/test/kotlin/org/leafygreens/kompendium/util/TestData.kt +++ b/kompendium/src/test/kotlin/org/leafygreens/kompendium/util/TestData.kt @@ -8,6 +8,9 @@ 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.OpenApiSpecParameter +import org.leafygreens.kompendium.models.OpenApiSpecParameterSchemaArray +import org.leafygreens.kompendium.models.OpenApiSpecParameterSchemaString import org.leafygreens.kompendium.models.OpenApiSpecPathItem import org.leafygreens.kompendium.models.OpenApiSpecPathItemOperation import org.leafygreens.kompendium.models.OpenApiSpecReferenceObject @@ -139,6 +142,30 @@ object TestData { ), `x-codegen-request-body-name` = "body" ) + ), + "/pet/findByStatus" to OpenApiSpecPathItem( + get = OpenApiSpecPathItemOperation( + tags = setOf("pet"), + summary = "Find Pets by status", + description = "Multiple status values can be provided with comma separated strings", + operationId = "findPetsByStatus", + parameters = listOf( + OpenApiSpecParameter( + name = "status", + `in` = "query", + description = "Status values that need to be considered for filter", + required = true, + style = "form", + explode = true, + schema = OpenApiSpecParameterSchemaArray( + items = OpenApiSpecParameterSchemaString( + default = "available", + `enum` = setOf("available", "pending", "sold") + ) + ) + ) + ) + ) ) ) ) diff --git a/kompendium/src/test/resources/petstore.json b/kompendium/src/test/resources/petstore.json index 9ef6c103d..fa800798f 100644 --- a/kompendium/src/test/resources/petstore.json +++ b/kompendium/src/test/resources/petstore.json @@ -93,6 +93,33 @@ } ], "x-codegen-request-body-name" : "body" } + }, + "/pet/findByStatus" : { + "get" : { + "tags" : [ "pet" ], + "summary" : "Find Pets by status", + "description" : "Multiple status values can be provided with comma separated strings", + "operationId" : "findPetsByStatus", + "parameters" : [ { + "name" : "status", + "in" : "query", + "description" : "Status values that need to be considered for filter", + "required" : true, + "deprecated" : false, + "allowEmptyValue" : false, + "style" : "form", + "explode" : true, + "schema" : { + "items" : { + "default" : "available", + "enum" : [ "available", "pending", "sold" ], + "type" : "string" + }, + "type" : "array" + } + } ], + "deprecated" : false + } } }, "security" : { }, From 277f3197e4f814e6786336ce4e7bbd9084cc80c0 Mon Sep 17 00:00:00 2001 From: Ryan Date: Sun, 11 Apr 2021 13:53:56 -0400 Subject: [PATCH 2/7] response for status --- .../kompendium/models/OpenApiSpecMediaType.kt | 2 +- .../models/OpenApiSpecParameterSchema.kt | 14 ------ .../models/OpenApiSpecReferencable.kt | 2 +- .../kompendium/models/OpenApiSpecSchema.kt | 21 +++++++++ .../leafygreens/kompendium/util/TestData.kt | 43 +++++++++++++++---- kompendium/src/test/resources/petstore.json | 32 +++++++++++++- 6 files changed, 88 insertions(+), 26 deletions(-) delete mode 100644 kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecParameterSchema.kt create mode 100644 kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecSchema.kt diff --git a/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecMediaType.kt b/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecMediaType.kt index b73369226..a413eebc1 100644 --- a/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecMediaType.kt +++ b/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecMediaType.kt @@ -2,7 +2,7 @@ package org.leafygreens.kompendium.models // TODO Oof -> https://swagger.io/specification/#media-type-object data class OpenApiSpecMediaType( - val schema: OpenApiSpecReferencable, // TODO sheesh -> https://swagger.io/specification/#schema-object needs to be referencable + val schema: OpenApiSpecSchema, // TODO sheesh -> https://swagger.io/specification/#schema-object val example: String? = null, // TODO Enforce type? then serialize? val examples: Map? = null, // needs to be mutually exclusive with example val encoding: Map? = null // todo encoding object -> https://swagger.io/specification/#encoding-object diff --git a/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecParameterSchema.kt b/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecParameterSchema.kt deleted file mode 100644 index beca3826d..000000000 --- a/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecParameterSchema.kt +++ /dev/null @@ -1,14 +0,0 @@ -package org.leafygreens.kompendium.models - -sealed class OpenApiSpecParameterSchema( - val type: String, -) - -data class OpenApiSpecParameterSchemaArray( - val items: T -) : OpenApiSpecParameterSchema("array") - -data class OpenApiSpecParameterSchemaString( - val default: String, - val `enum`: Set? = null -) : OpenApiSpecParameterSchema("string") diff --git a/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecReferencable.kt b/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecReferencable.kt index fa37cae83..07a1385e8 100644 --- a/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecReferencable.kt +++ b/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecReferencable.kt @@ -30,7 +30,7 @@ data class OpenApiSpecParameter( val allowEmptyValue: Boolean = false, val style: String? = null, val explode: Boolean? = false, - val schema: OpenApiSpecParameterSchema? = null + val schema: OpenApiSpecSchema? = null ) : OpenApiSpecReferencable() data class OpenApiSpecRequest( diff --git a/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecSchema.kt b/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecSchema.kt new file mode 100644 index 000000000..f27b9d922 --- /dev/null +++ b/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecSchema.kt @@ -0,0 +1,21 @@ +package org.leafygreens.kompendium.models + +sealed class OpenApiSpecSchema + +sealed class OpenApiSpecSchemaTyped( + val type: String, +) : OpenApiSpecSchema() + +data class OpenApiSpecSchemaArray( + val items: T +) : OpenApiSpecSchemaTyped("array") + +data class OpenApiSpecSchemaString( + val default: String, + val `enum`: Set? = null +) : OpenApiSpecSchemaTyped("string") + +// TODO In Kt 1.5 Should be able to reference external sealed classes +data class OpenApiSpecSchemaRef( + val `$ref`: String +) : OpenApiSpecSchema() 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 5cfceed40..e2befb453 100644 --- a/kompendium/src/test/kotlin/org/leafygreens/kompendium/util/TestData.kt +++ b/kompendium/src/test/kotlin/org/leafygreens/kompendium/util/TestData.kt @@ -9,13 +9,14 @@ import org.leafygreens.kompendium.models.OpenApiSpecInfoContact import org.leafygreens.kompendium.models.OpenApiSpecInfoLicense import org.leafygreens.kompendium.models.OpenApiSpecMediaType import org.leafygreens.kompendium.models.OpenApiSpecParameter -import org.leafygreens.kompendium.models.OpenApiSpecParameterSchemaArray -import org.leafygreens.kompendium.models.OpenApiSpecParameterSchemaString +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.OpenApiSpecSchemaRef import org.leafygreens.kompendium.models.OpenApiSpecServer import org.leafygreens.kompendium.models.OpenApiSpecTag @@ -85,10 +86,10 @@ object TestData { description = "Pet object that needs to be added to the store", content = mapOf( "application/json" to OpenApiSpecMediaType( - schema = OpenApiSpecReferenceObject(`$ref` = "#/components/schemas/Pet") + schema = OpenApiSpecSchemaRef(`$ref` = "#/components/schemas/Pet") ), "application/xml" to OpenApiSpecMediaType( - schema = OpenApiSpecReferenceObject(`$ref` = "#/components/schemas/Pet") + schema = OpenApiSpecSchemaRef(`$ref` = "#/components/schemas/Pet") ) ), required = true @@ -122,10 +123,10 @@ object TestData { description = "Pet object that needs to be added to the store", content = mapOf( "application/json" to OpenApiSpecMediaType( - schema = OpenApiSpecReferenceObject(`$ref` = "#/components/schemas/Pet") + schema = OpenApiSpecSchemaRef(`$ref` = "#/components/schemas/Pet") ), "application/xml" to OpenApiSpecMediaType( - schema = OpenApiSpecReferenceObject(`$ref` = "#/components/schemas/Pet") + schema = OpenApiSpecSchemaRef(`$ref` = "#/components/schemas/Pet") ) ) ), @@ -157,14 +158,38 @@ object TestData { required = true, style = "form", explode = true, - schema = OpenApiSpecParameterSchemaArray( - items = OpenApiSpecParameterSchemaString( + schema = OpenApiSpecSchemaArray( + items = OpenApiSpecSchemaString( default = "available", `enum` = setOf("available", "pending", "sold") ) ) ) - ) + ), + responses = mapOf( + "200" to OpenApiSpecResponse( + description = "successful operation", + content = mapOf( + "application/xml" to OpenApiSpecMediaType( + schema = OpenApiSpecSchemaArray( + items = OpenApiSpecSchemaRef("#/components/schemas/Pet") + ) + ), + "application/json" to OpenApiSpecMediaType( + schema = OpenApiSpecSchemaArray( + items = OpenApiSpecSchemaRef("#/components/schemas/Pet") + ) + ) + ) + ), + "400" to OpenApiSpecResponse( + description = "Invalid status value", + content = mapOf() + ) + ), + security = listOf(mapOf( + "petstore_auth" to listOf("write:pets", "read:pets") + )) ) ) ) diff --git a/kompendium/src/test/resources/petstore.json b/kompendium/src/test/resources/petstore.json index fa800798f..72e2d0c0d 100644 --- a/kompendium/src/test/resources/petstore.json +++ b/kompendium/src/test/resources/petstore.json @@ -118,7 +118,37 @@ "type" : "array" } } ], - "deprecated" : false + "responses" : { + "200" : { + "description" : "successful operation", + "content" : { + "application/xml" : { + "schema" : { + "items" : { + "$ref" : "#/components/schemas/Pet" + }, + "type" : "array" + } + }, + "application/json" : { + "schema" : { + "items" : { + "$ref" : "#/components/schemas/Pet" + }, + "type" : "array" + } + } + } + }, + "400" : { + "description" : "Invalid status value", + "content" : { } + } + }, + "deprecated" : false, + "security" : [ { + "petstore_auth" : [ "write:pets", "read:pets" ] + } ] } } }, From 450dda53876727b7e4b479dfcbd407fb910ba94d Mon Sep 17 00:00:00 2001 From: Ryan Date: Sun, 11 Apr 2021 14:01:27 -0400 Subject: [PATCH 3/7] we buidlin --- build.gradle.kts | 1 + detekt.yml | 2 +- kompendium/src/main/kotlin/kompendium/Library.kt | 10 ---------- .../leafygreens/kompendium/models/OpenApiSpec.kt | 6 ++++-- .../models/OpenApiSpecPathItemOperation.kt | 6 ++++-- .../src/test/kotlin/kompendium/LibraryTest.kt | 14 -------------- .../org/leafygreens/kompendium/playground/Main.kt | 3 +-- 7 files changed, 11 insertions(+), 31 deletions(-) delete mode 100644 kompendium/src/main/kotlin/kompendium/Library.kt delete mode 100644 kompendium/src/test/kotlin/kompendium/LibraryTest.kt diff --git a/build.gradle.kts b/build.gradle.kts index 29d10a159..e5d1c20f9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,6 +16,7 @@ allprojects { repositories { mavenCentral() + maven { url = uri("https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven") } } apply(plugin = "org.jetbrains.kotlin.jvm") diff --git a/detekt.yml b/detekt.yml index 7cd298420..0c6680013 100644 --- a/detekt.yml +++ b/detekt.yml @@ -361,7 +361,7 @@ naming: excludes: ['**/test/**', '**/testIntegration/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**'] classPattern: '[A-Z][a-zA-Z0-9]*' ConstructorParameterNaming: - active: true + active: false excludes: ['**/test/**', '**/testIntegration/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**'] parameterPattern: '[a-z][A-Za-z0-9]*' privateParameterPattern: '[a-z][A-Za-z0-9]*' diff --git a/kompendium/src/main/kotlin/kompendium/Library.kt b/kompendium/src/main/kotlin/kompendium/Library.kt deleted file mode 100644 index 6eefd3560..000000000 --- a/kompendium/src/main/kotlin/kompendium/Library.kt +++ /dev/null @@ -1,10 +0,0 @@ -/* - * This Kotlin source file was generated by the Gradle 'init' task. - */ -package kompendium - -class Library { - fun someLibraryMethod(): String { - return "Heya" - } -} 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 79762f081..a93cc8a8d 100644 --- a/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpec.kt +++ b/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpec.kt @@ -3,10 +3,12 @@ package org.leafygreens.kompendium.models data class OpenApiSpec( val openapi: String = "3.0.3", val info: OpenApiSpecInfo? = null, - val servers: List = emptyList(), // TODO Needs to default to server object with url of `/` + // TODO Needs to default to server object with url of `/` + val servers: List = emptyList(), val paths: Map = emptyMap(), val components: OpenApiSpecComponents? = null, - val security: Map = emptyMap(), // todo needs to reference objects in the components -> security scheme 🤔 + // todo needs to reference objects in the components -> security scheme 🤔 + val security: Map = emptyMap(), val tags: List = emptyList(), val externalDocs: OpenApiSpecExternalDocumentation? = null ) diff --git a/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecPathItemOperation.kt b/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecPathItemOperation.kt index 8c6af4193..dfb04aad5 100644 --- a/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecPathItemOperation.kt +++ b/kompendium/src/main/kotlin/org/leafygreens/kompendium/models/OpenApiSpecPathItemOperation.kt @@ -8,10 +8,12 @@ data class OpenApiSpecPathItemOperation( val operationId: String? = null, val parameters: List? = null, val requestBody: OpenApiSpecReferencable? = null, - val responses: Map? = null, // TODO How to enforce `default` requirement + // TODO How to enforce `default` requirement 🧐 + val responses: Map? = null, val callbacks: Map? = null, val deprecated: Boolean = false, - val security: List>>? = null, // todo big yikes... also needs to reference objects in the security scheme 🤔 + // todo big yikes... also needs to reference objects in the security scheme 🤔 + val security: List>>? = null, val servers: List? = null, val `x-codegen-request-body-name`: String? = null ) diff --git a/kompendium/src/test/kotlin/kompendium/LibraryTest.kt b/kompendium/src/test/kotlin/kompendium/LibraryTest.kt deleted file mode 100644 index 0aff026b5..000000000 --- a/kompendium/src/test/kotlin/kompendium/LibraryTest.kt +++ /dev/null @@ -1,14 +0,0 @@ -/* - * This Kotlin source file was generated by the Gradle 'init' task. - */ -package kompendium - -import kotlin.test.Test -import kotlin.test.assertEquals - -class LibraryTest { - @Test fun testSomeLibraryMethod() { - val classUnderTest = Library() - assertEquals(classUnderTest.someLibraryMethod(), "Heya", "someLibraryMethod should return 'true'") - } -} diff --git a/playground/src/main/kotlin/org/leafygreens/kompendium/playground/Main.kt b/playground/src/main/kotlin/org/leafygreens/kompendium/playground/Main.kt index 66128ac96..733a8cfd7 100644 --- a/playground/src/main/kotlin/org/leafygreens/kompendium/playground/Main.kt +++ b/playground/src/main/kotlin/org/leafygreens/kompendium/playground/Main.kt @@ -8,7 +8,6 @@ import io.ktor.routing.route import io.ktor.routing.routing import io.ktor.server.engine.embeddedServer import io.ktor.server.netty.Netty -import kompendium.Library fun main() { embeddedServer( @@ -22,7 +21,7 @@ fun Application.mainModule() { routing { route("/") { get { - call.respondText(Library().someLibraryMethod()) + call.respondText("hi") } } } From 18da7ea9344232abb93d8e0e5db327658f2fb52b Mon Sep 17 00:00:00 2001 From: Ryan Date: Sun, 11 Apr 2021 14:17:07 -0400 Subject: [PATCH 4/7] 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", From b0c239f39012f80d9b823109e692301959aee89f Mon Sep 17 00:00:00 2001 From: Ryan Date: Sun, 11 Apr 2021 14:56:56 -0400 Subject: [PATCH 5/7] string --- .../test/kotlin/org/leafygreens/kompendium/util/TestData.kt | 6 +++++- kompendium/src/test/resources/petstore.json | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) 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 8f6d743e4..7cf5f5aa6 100644 --- a/kompendium/src/test/kotlin/org/leafygreens/kompendium/util/TestData.kt +++ b/kompendium/src/test/kotlin/org/leafygreens/kompendium/util/TestData.kt @@ -33,7 +33,11 @@ object TestData { val testSpec = OpenApiSpec( info = OpenApiSpecInfo( title = "Swagger Petstore", - description = "This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.", + description = """ + This is a sample server Petstore server. You can find out more about Swagger at + [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). + For this sample, you can use the api key `special-key` to test the authorization filters. + """.trimIndent(), termsOfService = URI("http://swagger.io/terms/"), contact = OpenApiSpecInfoContact( name = "Team Swag", diff --git a/kompendium/src/test/resources/petstore.json b/kompendium/src/test/resources/petstore.json index 0022ac917..520560bcf 100644 --- a/kompendium/src/test/resources/petstore.json +++ b/kompendium/src/test/resources/petstore.json @@ -3,7 +3,7 @@ "info" : { "title" : "Swagger Petstore", "version" : "1.0.0", - "description" : "This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.", + "description" : "This is a sample server Petstore server. You can find out more about Swagger at\n[http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/).\nFor this sample, you can use the api key `special-key` to test the authorization filters.", "termsOfService" : "http://swagger.io/terms/", "contact" : { "name" : "Team Swag", From 618e67497e95e185741665b60ff515c860cbc52d Mon Sep 17 00:00:00 2001 From: Ryan Date: Sun, 11 Apr 2021 15:01:46 -0400 Subject: [PATCH 6/7] github actions --- .github/workflows/pr_checks.yml | 37 +++++++++++++++++++++++++++++++++ .github/workflows/publish.yml | 22 ++++++++++++++++++++ kompendium/build.gradle.kts | 18 ++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 .github/workflows/pr_checks.yml create mode 100644 .github/workflows/publish.yml diff --git a/.github/workflows/pr_checks.yml b/.github/workflows/pr_checks.yml new file mode 100644 index 000000000..acbd5b453 --- /dev/null +++ b/.github/workflows/pr_checks.yml @@ -0,0 +1,37 @@ +name: Run PR Checks +on: pull_request +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 1.14 + uses: actions/setup-java@v1 + with: + java-version: 1.14 + - name: Cache Gradle packages + uses: actions/cache@v2 + with: + path: ~/.gradle/caches + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle.kts') }} + restore-keys: ${{ runner.os }}-gradle + - name: Lint using detekt + run: ./gradlew detekt + unit: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 1.14 + uses: actions/setup-java@v1 + with: + java-version: 1.14 + - name: Cache Gradle packages + uses: actions/cache@v2 + with: + path: ~/.gradle/caches + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle.kts') }} + restore-keys: ${{ runner.os }}-gradle + - name: Assemble with Gradle + run: ./gradlew assemble + - name: Run Unit Tests + run: ./gradlew test diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 000000000..a7f4bf55b --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,22 @@ +name: Publish to GitHub Packages +on: + push: + branches: [ main ] +jobs: + publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-java@v1 + with: + java-version: 1.14 + - name: Cache Gradle packages + uses: actions/cache@v2 + with: + path: ~/.gradle/caches + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle.kts') }} + restore-keys: ${{ runner.os }}-gradle + - name: Publish package + run: ./gradlew publish + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/kompendium/build.gradle.kts b/kompendium/build.gradle.kts index 839d16d05..665d3ea55 100644 --- a/kompendium/build.gradle.kts +++ b/kompendium/build.gradle.kts @@ -10,3 +10,21 @@ dependencies { testImplementation("org.jetbrains.kotlin:kotlin-test-junit") testImplementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.12.0") } + +publishing { + repositories { + maven { + name = "GithubPackages" + url = uri("https://maven.pkg.github.com/lg-backbone/kompendium") + credentials { + username = System.getenv("GITHUB_ACTOR") + password = System.getenv("GITHUB_TOKEN") + } + } + } + publications { + create("kompendium") { + from(components["kotlin"]) + } + } +} From 0b761cad162c8d542ab824db87860d664781efd8 Mon Sep 17 00:00:00 2001 From: Ryan Date: Sun, 11 Apr 2021 15:04:57 -0400 Subject: [PATCH 7/7] ignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 1b6985c00..1f93dfcff 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ # Ignore Gradle build output directory build + +.idea