From a66f842c9d2bec731c54da034a6773341822b6c6 Mon Sep 17 00:00:00 2001 From: Dariusz Kuc Date: Fri, 25 Oct 2019 12:43:33 -0500 Subject: [PATCH] [spring-server] make sdl endpoint customizable New configuration properties: * graphql.sdl.enabled - Boolean flag to indicate whether SDL endpoint should be enabled, defaults to true * graphql.sdl.endpoint - SDL endpoint, defaults to /sdl --- .../spring/GraphQLConfigurationProperties.kt | 13 ++++++++++++- .../graphql/spring/PlaygroundAutoConfiguration.kt | 2 -- .../graphql/spring/RoutesConfiguration.kt | 10 +++++++--- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/spring/GraphQLConfigurationProperties.kt b/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/spring/GraphQLConfigurationProperties.kt index c2b7f63e2e..c180770f40 100644 --- a/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/spring/GraphQLConfigurationProperties.kt +++ b/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/spring/GraphQLConfigurationProperties.kt @@ -31,7 +31,8 @@ data class GraphQLConfigurationProperties( val packages: List, val federation: FederationConfigurationProperties = FederationConfigurationProperties(), val subscriptions: SubscriptionConfigurationProperties = SubscriptionConfigurationProperties(), - val playground: PlaygroundConfigurationProperties = PlaygroundConfigurationProperties() + val playground: PlaygroundConfigurationProperties = PlaygroundConfigurationProperties(), + val sdl: SDLConfigurationProperties = SDLConfigurationProperties() ) /** @@ -61,3 +62,13 @@ data class PlaygroundConfigurationProperties( /** Prisma Labs Playground GraphQL IDE endpoint, defaults to 'playground' */ val endpoint: String = "playground" ) + +/** + * SDL endpoint configuration properties. + */ +data class SDLConfigurationProperties( + /** Boolean flag indicating whether SDL endpoint is enabled */ + val enabled: Boolean = true, + /** GraphQL SDL endpoint */ + val endpoint: String = "sdl" +) diff --git a/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/spring/PlaygroundAutoConfiguration.kt b/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/spring/PlaygroundAutoConfiguration.kt index f0ab77c93c..de33ff97ae 100644 --- a/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/spring/PlaygroundAutoConfiguration.kt +++ b/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/spring/PlaygroundAutoConfiguration.kt @@ -16,7 +16,6 @@ package com.expediagroup.graphql.spring -import kotlinx.coroutines.ExperimentalCoroutinesApi import org.springframework.beans.factory.annotation.Value import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty import org.springframework.context.annotation.Bean @@ -39,7 +38,6 @@ class PlaygroundAutoConfiguration( ) { @Bean - @ExperimentalCoroutinesApi fun playgroundRoute(): RouterFunction { val body = playgroundHtml.inputStream.bufferedReader().use { reader -> reader.readText() diff --git a/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/spring/RoutesConfiguration.kt b/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/spring/RoutesConfiguration.kt index 63dd6ddaa4..ca0fdb4a8c 100644 --- a/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/spring/RoutesConfiguration.kt +++ b/graphql-kotlin-spring-server/src/main/kotlin/com/expediagroup/graphql/spring/RoutesConfiguration.kt @@ -23,7 +23,7 @@ import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.type.MapType import com.fasterxml.jackson.databind.type.TypeFactory import graphql.schema.GraphQLSchema -import kotlinx.coroutines.ExperimentalCoroutinesApi +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.http.HttpMethod @@ -49,7 +49,6 @@ class RoutesConfiguration( private val mapTypeReference: MapType = TypeFactory.defaultInstance().constructMapType(HashMap::class.java, String::class.java, Any::class.java) @Bean - @ExperimentalCoroutinesApi fun graphQLRoutes() = coRouter { (POST(config.endpoint) or GET(config.endpoint)).invoke { serverRequest -> val graphQLRequest = createGraphQLRequest(serverRequest) @@ -60,7 +59,12 @@ class RoutesConfiguration( badRequest().buildAndAwait() } } - GET("/sdl") { + } + + @Bean + @ConditionalOnProperty(value = ["graphql.sdl.enabled"], havingValue = "true", matchIfMissing = true) + fun sdlRoute() = coRouter { + GET(config.sdl.endpoint) { ok().contentType(MediaType.TEXT_PLAIN).bodyValueAndAwait(schema.print()) } }