diff --git a/docker/backend/Dockerfile b/docker/backend/Dockerfile index 8bd3680..0dcb015 100644 --- a/docker/backend/Dockerfile +++ b/docker/backend/Dockerfile @@ -21,7 +21,7 @@ RUN shards install --production FROM crystallang/crystal:1.3-alpine as builder ARG BUILD_ENV -WORKDIR /app/backend +WORKDIR /app COPY --from=deps /app/shard.yml /app/shard.lock ./ COPY --from=deps /app/lib ./lib COPY ./LICENSE ./LICENSE @@ -36,7 +36,7 @@ RUN if [ "${BUILD_ENV}" = "development" ]; then \ FROM alpine as runner WORKDIR /app RUN adduser -S backend -u 1001 -COPY --from=builder /app/backend/bin ./bin +COPY --from=builder /app/bin ./bin COPY ./db ./db USER backend EXPOSE 80 diff --git a/docker/backend/shard.lock b/docker/backend/shard.lock index 731cd9f..0cefeae 100644 --- a/docker/backend/shard.lock +++ b/docker/backend/shard.lock @@ -2,7 +2,7 @@ version: 2.0 shards: bindata: git: https://github.com/spider-gazelle/bindata.git - version: 1.9.1 + version: 1.10.0 commander: git: https://github.com/mrrooijen/commander.git @@ -18,7 +18,7 @@ shards: email: git: https://github.com/arcage/crystal-email.git - version: 0.6.3 + version: 0.6.4 env_config: git: https://github.com/repomaa/env_config.cr.git diff --git a/docker/backend/shard.yml b/docker/backend/shard.yml index 60f882e..a37e96b 100644 --- a/docker/backend/shard.yml +++ b/docker/backend/shard.yml @@ -36,8 +36,6 @@ dependencies: github: amberframework/quartz-mailer kilt: github: jeromegn/kilt - email: - github: arcage/crystal-email router: github: tbrand/router.cr html-minifier: diff --git a/docker/backend/src/backend/api/context.cr b/docker/backend/src/backend/api/context.cr index 61cedef..caad554 100644 --- a/docker/backend/src/backend/api/context.cr +++ b/docker/backend/src/backend/api/context.cr @@ -16,12 +16,17 @@ require "http/request" require "graphql" -require "granite" module Backend module Api # GraphQL request context class class Context < GraphQL::Context + # Request object + getter request + + # Development mode + getter development : Bool + # Authenticated user getter user : Db::User? @@ -34,10 +39,10 @@ module Backend # User's external object getter external : (Db::Teacher | Db::Student)? - def initialize(request : HTTP::Request, max_complexity : Int32? = nil) - super(max_complexity) + def initialize(@request : HTTP::Request, @development : Bool, *rest) + super(*rest) - token = request.headers["Authorization"]? + token = @request.headers["Authorization"]? if token && token[..Auth::BEARER.size - 1] == Auth::BEARER payload = Auth.decode_jwt?(token[Auth::BEARER.size..]) return unless payload diff --git a/docker/backend/src/backend/api/webserver.cr b/docker/backend/src/backend/api/webserver.cr index 152e708..441b1fc 100644 --- a/docker/backend/src/backend/api/webserver.cr +++ b/docker/backend/src/backend/api/webserver.cr @@ -56,12 +56,21 @@ module Backend context.response.content_type = "application/json" data = GraphQLQueryData.from_json(context.request.body.not_nil!.gets.not_nil!) + development = {% if flag?(:development) %} + context.request.query_params["development"]? == "true" + {% else %} + false + {% end %} + {% if flag?(:development) %} + Log.notice { "Development request incoming" } if development + {% end %} + context.response.print( Schema::SCHEMA.execute( data.query, data.variables, data.operation_name, - Context.new(context.request) + Context.new(context.request, development) ) ) @@ -73,14 +82,12 @@ module Backend def run : Nil draw_routes - server = HTTP::Server.new( - [ - HTTP::LogHandler.new, - HTTP::ErrorHandler.new, - HTTP::CompressHandler.new, - route_handler, - ] - ) + server = HTTP::Server.new([ + HTTP::LogHandler.new, + HTTP::ErrorHandler.new, + HTTP::CompressHandler.new, + route_handler, + ]) server.bind_tcp("0.0.0.0", 80, true) server.listen end diff --git a/docker/backend/src/backend/mailers.cr b/docker/backend/src/backend/mailers.cr index 23ad33b..2c8c901 100644 --- a/docker/backend/src/backend/mailers.cr +++ b/docker/backend/src/backend/mailers.cr @@ -15,7 +15,6 @@ # along with this program. If not, see . require "quartz_mailer" -require "email" require "kilt" require "./mailers/*"