From 92297be66cb4430a886171bb60c77ec2e0bc6e73 Mon Sep 17 00:00:00 2001 From: heod Date: Tue, 16 Nov 2021 14:12:06 +0900 Subject: [PATCH 1/4] bugfix : graphiql/index.html does not replace fetch path --- .../autoconfiguration/DgsWebFluxAutoConfiguration.kt | 8 +++----- .../dgs/webflux/autoconfiguration/GraphiQlConfigurer.kt | 4 ++-- .../webflux/autoconfiguration/GraphiQlCustomEndpoint.kt | 5 +++++ 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/DgsWebFluxAutoConfiguration.kt b/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/DgsWebFluxAutoConfiguration.kt index a616e47e9..3043d2e9a 100644 --- a/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/DgsWebFluxAutoConfiguration.kt +++ b/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/DgsWebFluxAutoConfiguration.kt @@ -113,14 +113,11 @@ open class DgsWebFluxAutoConfiguration(private val configProps: DgsWebfluxConfig @Bean @ConditionalOnProperty(name = ["dgs.graphql.graphiql.enabled"], havingValue = "true", matchIfMissing = true) - open fun graphiQlIndexRedirect(@Value("classpath:/static/graphiql/index.html") indexHtml: Resource): RouterFunction { + open fun graphiQlIndexRedirect(): RouterFunction { return RouterFunctions.route() .GET(configProps.graphiql.path) { permanentRedirect(URI.create(configProps.graphiql.path + "/index.html")).build() } - .GET(configProps.graphiql.path + "/index.html") { - ok().bodyValue(indexHtml) - } .build() } @@ -159,7 +156,8 @@ open class DgsWebFluxAutoConfiguration(private val configProps: DgsWebfluxConfig @Bean open fun websocketSubscriptionHandler(dgsReactiveQueryExecutor: DgsReactiveQueryExecutor): SimpleUrlHandlerMapping { - val simpleUrlHandlerMapping = SimpleUrlHandlerMapping(mapOf("/subscriptions" to DgsReactiveWebsocketHandler(dgsReactiveQueryExecutor))) + val simpleUrlHandlerMapping = + SimpleUrlHandlerMapping(mapOf("/subscriptions" to DgsReactiveWebsocketHandler(dgsReactiveQueryExecutor))) simpleUrlHandlerMapping.order = 1 return simpleUrlHandlerMapping } diff --git a/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/GraphiQlConfigurer.kt b/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/GraphiQlConfigurer.kt index 592d5f995..e54f25a95 100644 --- a/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/GraphiQlConfigurer.kt +++ b/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/GraphiQlConfigurer.kt @@ -33,7 +33,7 @@ class GraphiQlConfigurer(private val configProps: DgsWebfluxConfigurationPropert override fun addResourceHandlers(registry: ResourceHandlerRegistry) { val graphqlPath = configProps.path registry - .addResourceHandler("/graphiql/**") + .addResourceHandler(configProps.graphiql.path + "/**") .addResourceLocations("classpath:/static/graphiql/") .resourceChain(true) .addResolver(PathResourceResolver()) @@ -53,7 +53,7 @@ class GraphiQlConfigurer(private val configProps: DgsWebfluxConfigurationPropert resource: Resource, transformerChain: ResourceTransformerChain ): Mono { - if (exchange.request.uri.toASCIIString().endsWith("graphiql/index.html")) { + if (exchange.request.uri.toASCIIString().endsWith(configProps.graphiql.path + "/index.html")) { val content = resource.inputStream.bufferedReader().use(BufferedReader::readText) return Mono.just( TransformedResource( diff --git a/graphql-dgs-spring-webflux-autoconfigure/src/test/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/GraphiQlCustomEndpoint.kt b/graphql-dgs-spring-webflux-autoconfigure/src/test/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/GraphiQlCustomEndpoint.kt index eafdeef51..ef6b63c05 100644 --- a/graphql-dgs-spring-webflux-autoconfigure/src/test/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/GraphiQlCustomEndpoint.kt +++ b/graphql-dgs-spring-webflux-autoconfigure/src/test/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/GraphiQlCustomEndpoint.kt @@ -17,11 +17,14 @@ package com.netflix.graphql.dgs.webflux.autoconfiguration import com.netflix.graphql.dgs.autoconfig.DgsAutoConfiguration +import graphql.Assert import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient import org.springframework.boot.test.context.SpringBootTest import org.springframework.test.web.reactive.server.WebTestClient +import org.springframework.test.web.reactive.server.expectBody +import org.springframework.util.StringUtils import org.springframework.web.reactive.config.EnableWebFlux @AutoConfigureWebTestClient @@ -48,5 +51,7 @@ class GraphiQlCustomEndpoint { .exchange() .expectStatus() .is2xxSuccessful + .expectBody() + .consumeWith { it -> Assert.assertTrue(it.responseBody!!.contains("fetch('/graphql")) } } } From e31aa97b72f264ad1a7c8e39005933baf7737b56 Mon Sep 17 00:00:00 2001 From: heod Date: Tue, 16 Nov 2021 14:13:32 +0900 Subject: [PATCH 2/4] rollback linkbreak --- .../webflux/autoconfiguration/DgsWebFluxAutoConfiguration.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/DgsWebFluxAutoConfiguration.kt b/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/DgsWebFluxAutoConfiguration.kt index 3043d2e9a..fdad3854e 100644 --- a/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/DgsWebFluxAutoConfiguration.kt +++ b/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/DgsWebFluxAutoConfiguration.kt @@ -156,8 +156,7 @@ open class DgsWebFluxAutoConfiguration(private val configProps: DgsWebfluxConfig @Bean open fun websocketSubscriptionHandler(dgsReactiveQueryExecutor: DgsReactiveQueryExecutor): SimpleUrlHandlerMapping { - val simpleUrlHandlerMapping = - SimpleUrlHandlerMapping(mapOf("/subscriptions" to DgsReactiveWebsocketHandler(dgsReactiveQueryExecutor))) + val simpleUrlHandlerMapping = SimpleUrlHandlerMapping(mapOf("/subscriptions" to DgsReactiveWebsocketHandler(dgsReactiveQueryExecutor))) simpleUrlHandlerMapping.order = 1 return simpleUrlHandlerMapping } From 65910b01a11faf4f4b1a3a4407c05345e6820a49 Mon Sep 17 00:00:00 2001 From: heod Date: Tue, 16 Nov 2021 15:53:55 +0900 Subject: [PATCH 3/4] remove unused import --- .../autoconfiguration/DgsWebFluxAutoConfiguration.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/DgsWebFluxAutoConfiguration.kt b/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/DgsWebFluxAutoConfiguration.kt index fdad3854e..48dcea7eb 100644 --- a/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/DgsWebFluxAutoConfiguration.kt +++ b/graphql-dgs-spring-webflux-autoconfigure/src/main/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/DgsWebFluxAutoConfiguration.kt @@ -31,12 +31,15 @@ import com.netflix.graphql.dgs.webflux.handlers.DgsWebfluxHttpHandler import com.netflix.graphql.dgs.webflux.handlers.WebFluxCookieValueResolver import graphql.ExecutionInput import graphql.GraphQL -import graphql.execution.* +import graphql.execution.AsyncExecutionStrategy +import graphql.execution.AsyncSerialExecutionStrategy +import graphql.execution.DataFetcherExceptionHandler +import graphql.execution.ExecutionIdProvider +import graphql.execution.ExecutionStrategy import graphql.execution.instrumentation.ChainedInstrumentation import graphql.introspection.IntrospectionQuery import graphql.schema.GraphQLSchema import org.springframework.beans.factory.annotation.Qualifier -import org.springframework.beans.factory.annotation.Value import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty import org.springframework.boot.context.properties.EnableConfigurationProperties @@ -44,7 +47,6 @@ import org.springframework.context.ApplicationContext import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.core.env.Environment -import org.springframework.core.io.Resource import org.springframework.http.MediaType import org.springframework.web.reactive.function.server.RequestPredicates.accept import org.springframework.web.reactive.function.server.RouterFunction From 42cd0fe508891964a868f00acf100ddfcc8cef2e Mon Sep 17 00:00:00 2001 From: heod Date: Tue, 16 Nov 2021 17:13:12 +0900 Subject: [PATCH 4/4] remove unused import --- .../dgs/webflux/autoconfiguration/GraphiQlCustomEndpoint.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/graphql-dgs-spring-webflux-autoconfigure/src/test/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/GraphiQlCustomEndpoint.kt b/graphql-dgs-spring-webflux-autoconfigure/src/test/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/GraphiQlCustomEndpoint.kt index ef6b63c05..259bfb73a 100644 --- a/graphql-dgs-spring-webflux-autoconfigure/src/test/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/GraphiQlCustomEndpoint.kt +++ b/graphql-dgs-spring-webflux-autoconfigure/src/test/kotlin/com/netflix/graphql/dgs/webflux/autoconfiguration/GraphiQlCustomEndpoint.kt @@ -24,7 +24,6 @@ import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWeb import org.springframework.boot.test.context.SpringBootTest import org.springframework.test.web.reactive.server.WebTestClient import org.springframework.test.web.reactive.server.expectBody -import org.springframework.util.StringUtils import org.springframework.web.reactive.config.EnableWebFlux @AutoConfigureWebTestClient