From f2c1b863e5a2a548c5ce7d71d130bde8705459a4 Mon Sep 17 00:00:00 2001 From: Dominic Grimm Date: Thu, 3 Feb 2022 15:49:42 +0100 Subject: [PATCH] Added graphql playground --- .example.env | 1 + docker-compose.yml | 1 + docker/backend/shard.lock | 8 + docker/backend/shard.yml | 2 + .../src/backend/api/macros/minify_html.cr | 3 + .../backend/src/backend/api/playground.html | 697 ++++++++++++++++++ docker/backend/src/backend/api/webserver.cr | 17 +- docker/backend/src/backend/safe_env.cr | 1 + 8 files changed, 729 insertions(+), 1 deletion(-) create mode 100644 docker/backend/src/backend/api/macros/minify_html.cr create mode 100644 docker/backend/src/backend/api/playground.html diff --git a/.example.env b/.example.env index 2c2ded6..7207a2f 100644 --- a/.example.env +++ b/.example.env @@ -3,6 +3,7 @@ POSTGRES_PASSWORD= URL= +BACKEND_GRAPHQL_PLAYGROUND=0 BACKEND_JWT_SECRET= BACKEND_SMTP_HELO= BACKEND_SMTP_ADDRESS= diff --git a/docker-compose.yml b/docker-compose.yml index 8bc5be0..e90c986 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -59,6 +59,7 @@ services: - redis environment: URL: ${URL} + BACKEND_GRAPHQL_PLAYGROUND: ${BACKEND_GRAPHQL_PLAYGROUND} BACKEND_DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_USER} BACKEND_JWT_SECRET: ${BACKEND_JWT_SECRET} BACKEND_WORKER_REDIS_URL: redis://redis:6379 diff --git a/docker/backend/shard.lock b/docker/backend/shard.lock index 85865b9..01c5037 100644 --- a/docker/backend/shard.lock +++ b/docker/backend/shard.lock @@ -24,6 +24,10 @@ shards: git: https://github.com/crystal-lang/crystal-db.git version: 0.10.1 + duktape: + git: https://github.com/jessedoyle/duktape.cr.git + version: 1.0.0 + email: git: https://github.com/arcage/crystal-email.git version: 0.6.3 @@ -48,6 +52,10 @@ shards: git: https://github.com/luckyframework/habitat.git version: 0.4.7 + html-minifier: + git: https://github.com/sam0x17/html-minifier.git + version: 0.1.0+git.commit.3913bbf8845ddb2030cbd799f7aa8a40a014c7d2 + jwt: git: https://github.com/crystal-community/jwt.git version: 1.6.0 diff --git a/docker/backend/shard.yml b/docker/backend/shard.yml index b685ccd..1d68c9a 100644 --- a/docker/backend/shard.yml +++ b/docker/backend/shard.yml @@ -51,3 +51,5 @@ dependencies: github: arcage/crystal-email router: github: tbrand/router.cr + html-minifier: + github: sam0x17/html-minifier diff --git a/docker/backend/src/backend/api/macros/minify_html.cr b/docker/backend/src/backend/api/macros/minify_html.cr new file mode 100644 index 0000000..77fc5eb --- /dev/null +++ b/docker/backend/src/backend/api/macros/minify_html.cr @@ -0,0 +1,3 @@ +require "html-minifier" + +puts HtmlMinifier.minify!(ARGV[0]) diff --git a/docker/backend/src/backend/api/playground.html b/docker/backend/src/backend/api/playground.html new file mode 100644 index 0000000..5bc8c9a --- /dev/null +++ b/docker/backend/src/backend/api/playground.html @@ -0,0 +1,697 @@ + + + + + + + + + GraphQL Playground + + + + + + + + + +
+ +
+ Loading + GraphQL Playground +
+
+ +
+ + + diff --git a/docker/backend/src/backend/api/webserver.cr b/docker/backend/src/backend/api/webserver.cr index 3fd4dcf..a627314 100644 --- a/docker/backend/src/backend/api/webserver.cr +++ b/docker/backend/src/backend/api/webserver.cr @@ -7,12 +7,27 @@ module Backend class WebServer include Router + GRAPHQL_PLAYGROUND = {{ run("./macros/minify_html.cr", read_file("#{__DIR__}/playground.html")).stringify }} + GRAPHQL_PLAYGROUND_ENABLE = SAFE_ENV["BACKEND_GRAPHQL_PLAYGROUND"].to_i == 1 || {{ flag?(:development) }} + def draw_routes : Nil + # enable graphql playground when in development mode or explicitly enabled + if GRAPHQL_PLAYGROUND_ENABLE + Log.info { "GraphQL playground enabled" } + + get "/" do |context| + context.response.content_type = "text/html" + context.response.print(GRAPHQL_PLAYGROUND) + + context + end + end + post "/" do |context| context.response.content_type = "application/json" data = GraphQLQueryData.from_json(context.request.body.not_nil!.gets.not_nil!) - context.response.puts( + context.response.print( Schema::SCHEMA.execute( data.query, data.variables, diff --git a/docker/backend/src/backend/safe_env.cr b/docker/backend/src/backend/safe_env.cr index 124483a..2a15a7c 100644 --- a/docker/backend/src/backend/safe_env.cr +++ b/docker/backend/src/backend/safe_env.cr @@ -3,6 +3,7 @@ require "senf" module Backend SAFE_ENV = Senf::SafeEnv.new(%w( URL + BACKEND_GRAPHQL_PLAYGROUND BACKEND_DATABASE_URL BACKEND_ADMIN_EMAIL BACKEND_ADMIN_PASSWORD