Merge remote-tracking branch 'origin/5.3.x' into 6.0.x

This commit is contained in:
William Cheng
2021-07-12 17:11:35 +08:00
3874 changed files with 120282 additions and 21640 deletions

View File

@@ -1 +1,5 @@
6.0.0-SNAPSHOT
<<<<<<< HEAD
6.0.0-SNAPSHOT
=======
5.3.0-SNAPSHOT
>>>>>>> origin/5.3.x

View File

@@ -2,12 +2,16 @@
This is a sample server Petstore server. For this sample, you can use the api key &#x60;special-key&#x60; to test the authorization filters.
<<<<<<< HEAD
Generated by OpenAPI Generator 6.0.0-SNAPSHOT.
=======
Generated by OpenAPI Generator 5.3.0-SNAPSHOT.
>>>>>>> origin/5.3.x
## Requires
* Kotlin 1.4.31
* Gradle 6.8.2
* Kotlin 1.4.32
* Gradle 6.9
## Build

View File

@@ -1,37 +1,35 @@
group 'org.openapitools'
version '1.0.0'
group "org.openapitools"
version "1.0.0"
wrapper {
gradleVersion = '6.8.2'
gradleVersion = "6.9"
distributionUrl = "https://services.gradle.org/distributions/gradle-$gradleVersion-all.zip"
}
buildscript {
ext.kotlin_version = '1.4.31'
ext.ktor_version = '1.5.2'
ext.shadow_version = '2.0.3'
ext.kotlin_version = "1.4.32"
ext.ktor_version = "1.5.4"
ext.shadow_version = "6.1.0"
repositories {
maven { url "https://repo1.maven.org/maven2" }
maven {
url = "https://plugins.gradle.org/m2/"
}
maven { url "https://plugins.gradle.org/m2/" }
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "com.github.jengelman.gradle.plugins:shadow:$shadow_version"
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version")
classpath("com.github.jengelman.gradle.plugins:shadow:$shadow_version")
}
}
apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'application'
apply plugin: "java"
apply plugin: "kotlin"
apply plugin: "application"
mainClassName = "io.ktor.server.netty.DevelopmentEngine"
// Initialization order with shadow 2.0.1 and Gradle 6.8.2 is weird.
// Initialization order with shadow 2.0.1 and Gradle 6.9 is weird.
// See https://github.com/johnrengelman/shadow/issues/336#issuecomment-355402508
apply plugin: 'com.github.johnrengelman.shadow'
apply plugin: "com.github.johnrengelman.shadow"
sourceCompatibility = 1.8
@@ -44,26 +42,28 @@ compileTestKotlin {
}
shadowJar {
baseName = 'kotlin-server'
baseName = "kotlin-server"
classifier = null
version = null
}
repositories {
maven { url "https://repo1.maven.org/maven2" }
maven { url "https://dl.bintray.com/kotlin/ktor" }
maven { url "https://dl.bintray.com/kotlin/kotlinx" }
maven { setUrl("https://repo1.maven.org/maven2") }
maven { setUrl("https://dl.bintray.com/kotlin/ktor") }
maven { setUrl("https://dl.bintray.com/kotlin/kotlinx") }
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compile "io.ktor:ktor-server-netty:$ktor_version"
compile "io.ktor:ktor-metrics:$ktor_version"
compile "io.ktor:ktor-auth:$ktor_version"
compile "io.ktor:ktor-locations:$ktor_version"
compile "io.ktor:ktor-gson:$ktor_version"
compile "io.ktor:ktor-client-core:$ktor_version"
compile "io.ktor:ktor-client-apache:$ktor_version"
compile "ch.qos.logback:logback-classic:1.2.1"
testCompile group: 'junit', name: 'junit', version: '4.13'
implementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version")
implementation("ch.qos.logback:logback-classic:1.2.1")
implementation("com.typesafe:config:1.4.1")
implementation("io.ktor:ktor-auth:$ktor_version")
implementation("io.ktor:ktor-client-apache:$ktor_version")
implementation("io.ktor:ktor-gson:$ktor_version")
implementation("io.ktor:ktor-locations:$ktor_version")
implementation("io.dropwizard.metrics:metrics-core:4.1.18")
implementation("io.ktor:ktor-metrics:$ktor_version")
implementation("io.ktor:ktor-server-netty:$ktor_version")
testImplementation("junit:junit:4.13.2")
}

View File

@@ -1,31 +1,21 @@
package org.openapitools.server
import com.codahale.metrics.Slf4jReporter
import io.ktor.application.*
import io.ktor.features.*
import io.ktor.gson.*
import io.ktor.http.*
import io.ktor.locations.*
import io.ktor.metrics.dropwizard.*
import java.util.concurrent.TimeUnit
import io.ktor.routing.*
import io.ktor.util.*
import com.typesafe.config.ConfigFactory
import io.ktor.application.Application
import io.ktor.application.ApplicationStopping
import io.ktor.application.install
import io.ktor.application.log
import io.ktor.auth.*
import io.ktor.client.HttpClient
import io.ktor.client.engine.apache.Apache
import io.ktor.config.HoconApplicationConfig
import io.ktor.features.AutoHeadResponse
import io.ktor.features.Compression
import io.ktor.features.ContentNegotiation
import io.ktor.features.DefaultHeaders
import io.ktor.features.HSTS
import io.ktor.gson.GsonConverter
import io.ktor.http.ContentType
import io.ktor.locations.KtorExperimentalLocationsAPI
import io.ktor.locations.Locations
import io.ktor.routing.Routing
import java.util.concurrent.TimeUnit
import io.ktor.auth.Authentication
import io.ktor.auth.oauth
import io.ktor.metrics.dropwizard.DropwizardMetrics
import org.openapitools.server.infrastructure.ApiKeyCredential
import org.openapitools.server.infrastructure.ApiPrincipal
import org.openapitools.server.infrastructure.apiKeyAuth
import org.openapitools.server.infrastructure.*
import org.openapitools.server.apis.PetApi
import org.openapitools.server.apis.StoreApi
import org.openapitools.server.apis.UserApi
@@ -37,6 +27,7 @@ object HTTP {
val client = HttpClient(Apache)
}
@KtorExperimentalAPI
@KtorExperimentalLocationsAPI
fun Application.main() {
install(DefaultHeaders)
@@ -51,10 +42,10 @@ fun Application.main() {
install(ContentNegotiation) {
register(ContentType.Application.Json, GsonConverter())
}
install(AutoHeadResponse) // see http://ktor.io/features/autoheadresponse.html
install(HSTS, ApplicationHstsConfiguration()) // see http://ktor.io/features/hsts.html
install(Compression, ApplicationCompressionConfiguration()) // see http://ktor.io/features/compression.html
install(Locations) // see http://ktor.io/features/locations.html
install(AutoHeadResponse) // see https://ktor.io/docs/autoheadresponse.html
install(Compression, ApplicationCompressionConfiguration()) // see https://ktor.io/docs/compression.html
install(HSTS, ApplicationHstsConfiguration()) // see https://ktor.io/docs/hsts.html
install(Locations) // see https://ktor.io/docs/features-locations.html
install(Authentication) {
// "Implement API key auth (api_key) for parameter name 'api_key'."
apiKeyAuth("api_key") {
@@ -80,8 +71,4 @@ fun Application.main() {
UserApi()
}
environment.monitor.subscribe(ApplicationStopping) {
HTTP.client.close()
}
}

View File

@@ -1,16 +1,13 @@
package org.openapitools.server
// Use this file to hold package-level internal functions that return receiver object passed to the `install` method.
import io.ktor.auth.OAuthServerSettings
import io.ktor.features.Compression
import io.ktor.features.HSTS
import io.ktor.features.deflate
import io.ktor.features.gzip
import io.ktor.features.minimumSize
import io.ktor.http.HttpMethod
import io.ktor.auth.*
import io.ktor.features.*
import io.ktor.http.*
import io.ktor.util.*
import java.time.Duration
import java.util.concurrent.TimeUnit
/**
* Application block for [HSTS] configuration.
*
@@ -67,8 +64,8 @@ val ApplicationAuthProviders: Map<String, OAuthServerSettings> = listOf<OAuthSer
// accessTokenUrl = "https://graph.facebook.com/oauth/access_token",
// requestMethod = HttpMethod.Post,
//
// clientId = "settings.property("auth.oauth.facebook.clientId").getString()",
// clientSecret = "settings.property("auth.oauth.facebook.clientSecret").getString()",
// clientId = settings.property("auth.oauth.facebook.clientId").getString(),
// clientSecret = settings.property("auth.oauth.facebook.clientSecret").getString(),
// defaultScopes = listOf("public_profile")
// )
).associateBy { it.name }

View File

@@ -11,17 +11,16 @@
*/
package org.openapitools.server
import io.ktor.locations.KtorExperimentalLocationsAPI
import io.ktor.locations.Location
import io.ktor.locations.*
import org.openapitools.server.models.*
@KtorExperimentalLocationsAPI
object Paths {
/**
* Add a new pet to the store
*
* @param body Pet object that needs to be added to the store
*/
@KtorExperimentalLocationsAPI
@Location("/pet") class addPet(val body: Pet)
/**
@@ -30,7 +29,6 @@ object Paths {
* @param petId Pet id to delete
* @param apiKey (optional)
*/
@KtorExperimentalLocationsAPI
@Location("/pet/{petId}") class deletePet(val petId: kotlin.Long, val apiKey: kotlin.String? = null)
/**
@@ -38,7 +36,6 @@ object Paths {
* Multiple status values can be provided with comma separated strings
* @param status Status values that need to be considered for filter
*/
@KtorExperimentalLocationsAPI
@Location("/pet/findByStatus") class findPetsByStatus(val status: kotlin.collections.List<kotlin.String>)
/**
@@ -46,7 +43,6 @@ object Paths {
* Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
* @param tags Tags to filter by
*/
@KtorExperimentalLocationsAPI
@Location("/pet/findByTags") class findPetsByTags(val tags: kotlin.collections.List<kotlin.String>)
/**
@@ -54,7 +50,6 @@ object Paths {
* Returns a single pet
* @param petId ID of pet to return
*/
@KtorExperimentalLocationsAPI
@Location("/pet/{petId}") class getPetById(val petId: kotlin.Long)
/**
@@ -62,7 +57,6 @@ object Paths {
*
* @param body Pet object that needs to be added to the store
*/
@KtorExperimentalLocationsAPI
@Location("/pet") class updatePet(val body: Pet)
/**
@@ -72,7 +66,6 @@ object Paths {
* @param name Updated name of the pet (optional)
* @param status Updated status of the pet (optional)
*/
@KtorExperimentalLocationsAPI
@Location("/pet/{petId}") class updatePetWithForm(val petId: kotlin.Long, val name: kotlin.String? = null, val status: kotlin.String? = null)
/**
@@ -82,7 +75,6 @@ object Paths {
* @param additionalMetadata Additional data to pass to server (optional)
* @param file file to upload (optional)
*/
@KtorExperimentalLocationsAPI
@Location("/pet/{petId}/uploadImage") class uploadFile(val petId: kotlin.Long, val additionalMetadata: kotlin.String? = null, val file: java.io.File? = null)
/**
@@ -90,22 +82,19 @@ object Paths {
* For valid response try integer IDs with value &lt; 1000. Anything above 1000 or nonintegers will generate API errors
* @param orderId ID of the order that needs to be deleted
*/
@KtorExperimentalLocationsAPI
@Location("/store/order/{orderId}") class deleteOrder(val orderId: kotlin.String)
/**
* Returns pet inventories by status
* Returns a map of status codes to quantities
*/
@KtorExperimentalLocationsAPI
@Location("/store/inventory") class getInventory()
@Location("/store/inventory") object getInventory
/**
* Find purchase order by ID
* For valid response try integer IDs with value &lt;&#x3D; 5 or &gt; 10. Other values will generated exceptions
* @param orderId ID of pet that needs to be fetched
*/
@KtorExperimentalLocationsAPI
@Location("/store/order/{orderId}") class getOrderById(val orderId: kotlin.Long)
/**
@@ -113,7 +102,6 @@ object Paths {
*
* @param body order placed for purchasing the pet
*/
@KtorExperimentalLocationsAPI
@Location("/store/order") class placeOrder(val body: Order)
/**
@@ -121,7 +109,6 @@ object Paths {
* This can only be done by the logged in user.
* @param body Created user object
*/
@KtorExperimentalLocationsAPI
@Location("/user") class createUser(val body: User)
/**
@@ -129,7 +116,6 @@ object Paths {
*
* @param body List of user object
*/
@KtorExperimentalLocationsAPI
@Location("/user/createWithArray") class createUsersWithArrayInput(val body: kotlin.collections.List<User>)
/**
@@ -137,7 +123,6 @@ object Paths {
*
* @param body List of user object
*/
@KtorExperimentalLocationsAPI
@Location("/user/createWithList") class createUsersWithListInput(val body: kotlin.collections.List<User>)
/**
@@ -145,7 +130,6 @@ object Paths {
* This can only be done by the logged in user.
* @param username The name that needs to be deleted
*/
@KtorExperimentalLocationsAPI
@Location("/user/{username}") class deleteUser(val username: kotlin.String)
/**
@@ -153,7 +137,6 @@ object Paths {
*
* @param username The name that needs to be fetched. Use user1 for testing.
*/
@KtorExperimentalLocationsAPI
@Location("/user/{username}") class getUserByName(val username: kotlin.String)
/**
@@ -162,15 +145,13 @@ object Paths {
* @param username The user name for login
* @param password The password for login in clear text
*/
@KtorExperimentalLocationsAPI
@Location("/user/login") class loginUser(val username: kotlin.String, val password: kotlin.String)
/**
* Logs out current logged in user session
*
*/
@KtorExperimentalLocationsAPI
@Location("/user/logout") class logoutUser()
@Location("/user/logout") object logoutUser
/**
* Updated user
@@ -178,7 +159,6 @@ object Paths {
* @param username name that need to be deleted
* @param body Updated user object
*/
@KtorExperimentalLocationsAPI
@Location("/user/{username}") class updateUser(val username: kotlin.String, val body: User)
}

View File

@@ -12,29 +12,14 @@
package org.openapitools.server.apis
import com.google.gson.Gson
import io.ktor.application.call
import io.ktor.auth.UserIdPrincipal
import io.ktor.auth.authentication
import io.ktor.auth.authenticate
import io.ktor.auth.OAuthAccessTokenResponse
import io.ktor.auth.OAuthServerSettings
import io.ktor.http.ContentType
import io.ktor.http.HttpStatusCode
import io.ktor.response.respond
import io.ktor.response.respondText
import io.ktor.routing.Route
import io.ktor.application.*
import io.ktor.auth.*
import io.ktor.http.*
import io.ktor.response.*
import org.openapitools.server.Paths
import io.ktor.locations.KtorExperimentalLocationsAPI
import io.ktor.locations.delete
import io.ktor.locations.get
import io.ktor.locations.post
import io.ktor.locations.put
import io.ktor.locations.options
import io.ktor.locations.head
import io.ktor.locations.*
import io.ktor.routing.*
import org.openapitools.server.infrastructure.ApiPrincipal
import org.openapitools.server.models.ApiResponse
import org.openapitools.server.models.Pet
@@ -42,6 +27,7 @@ import org.openapitools.server.models.Pet
fun Route.PetApi() {
val gson = Gson()
val empty = mutableMapOf<String, Any?>()
authenticate("petstore_auth") {
post<Paths.addPet> {
val principal = call.authentication.principal<OAuthAccessTokenResponse>()!!

View File

@@ -12,35 +12,21 @@
package org.openapitools.server.apis
import com.google.gson.Gson
import io.ktor.application.call
import io.ktor.auth.UserIdPrincipal
import io.ktor.auth.authentication
import io.ktor.auth.authenticate
import io.ktor.auth.OAuthAccessTokenResponse
import io.ktor.auth.OAuthServerSettings
import io.ktor.http.ContentType
import io.ktor.http.HttpStatusCode
import io.ktor.response.respond
import io.ktor.response.respondText
import io.ktor.routing.Route
import io.ktor.application.*
import io.ktor.auth.*
import io.ktor.http.*
import io.ktor.response.*
import org.openapitools.server.Paths
import io.ktor.locations.KtorExperimentalLocationsAPI
import io.ktor.locations.delete
import io.ktor.locations.get
import io.ktor.locations.post
import io.ktor.locations.put
import io.ktor.locations.options
import io.ktor.locations.head
import io.ktor.locations.*
import io.ktor.routing.*
import org.openapitools.server.infrastructure.ApiPrincipal
import org.openapitools.server.models.Order
@KtorExperimentalLocationsAPI
fun Route.StoreApi() {
val gson = Gson()
val empty = mutableMapOf<String, Any?>()
delete<Paths.deleteOrder> {
call.respond(HttpStatusCode.NotImplemented)
}

View File

@@ -12,35 +12,21 @@
package org.openapitools.server.apis
import com.google.gson.Gson
import io.ktor.application.call
import io.ktor.auth.UserIdPrincipal
import io.ktor.auth.authentication
import io.ktor.auth.authenticate
import io.ktor.auth.OAuthAccessTokenResponse
import io.ktor.auth.OAuthServerSettings
import io.ktor.http.ContentType
import io.ktor.http.HttpStatusCode
import io.ktor.response.respond
import io.ktor.response.respondText
import io.ktor.routing.Route
import io.ktor.application.*
import io.ktor.auth.*
import io.ktor.http.*
import io.ktor.response.*
import org.openapitools.server.Paths
import io.ktor.locations.KtorExperimentalLocationsAPI
import io.ktor.locations.delete
import io.ktor.locations.get
import io.ktor.locations.post
import io.ktor.locations.put
import io.ktor.locations.options
import io.ktor.locations.head
import io.ktor.locations.*
import io.ktor.routing.*
import org.openapitools.server.infrastructure.ApiPrincipal
import org.openapitools.server.models.User
@KtorExperimentalLocationsAPI
fun Route.UserApi() {
val gson = Gson()
val empty = mutableMapOf<String, Any?>()
post<Paths.createUser> {
call.respond(HttpStatusCode.NotImplemented)
}