mirror of
https://github.com/OpenAPITools/openapi-generator.git
synced 2025-12-03 08:46:55 +00:00
Merge remote-tracking branch 'origin/5.3.x' into 6.0.x
This commit is contained in:
@@ -1 +1,5 @@
|
||||
6.0.0-SNAPSHOT
|
||||
<<<<<<< HEAD
|
||||
6.0.0-SNAPSHOT
|
||||
=======
|
||||
5.3.0-SNAPSHOT
|
||||
>>>>>>> origin/5.3.x
|
||||
|
||||
@@ -2,12 +2,16 @@
|
||||
|
||||
This is a sample server Petstore server. For this sample, you can use the api key `special-key` 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
|
||||
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 }
|
||||
|
||||
@@ -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 < 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 <= 5 or > 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)
|
||||
|
||||
}
|
||||
|
||||
@@ -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>()!!
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user