Spaces:
Sleeping
Sleeping
File size: 1,863 Bytes
2e92879 b2ff4b5 2e92879 0b53aa4 b2ff4b5 0b53aa4 b2ff4b5 0b53aa4 2e92879 b2ff4b5 2e92879 0b53aa4 b2ff4b5 2e92879 0b53aa4 2e92879 b2ff4b5 76486d3 0b53aa4 2e92879 0b53aa4 b2ff4b5 0b53aa4 2e92879 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
defmodule Srh.Http.BaseRouter do
use Plug.Router
alias Srh.Http.RequestValidator
alias Srh.Http.CommandHandler
plug(:match)
plug(Plug.Parsers, parsers: [:json], pass: ["application/json"], json_decoder: Jason)
plug(:dispatch)
get "/" do
handle_response({:ok, "Welcome to Serverless Redis HTTP!"}, conn)
end
post "/" do
conn
|> handle_extract_auth(&CommandHandler.handle_command(conn, &1))
|> handle_response(conn)
end
post "/pipeline" do
conn
|> handle_extract_auth(&CommandHandler.handle_command_array(conn, &1))
|> handle_response(conn)
end
match _ do
send_resp(conn, 404, "Endpoint not found")
end
defp handle_extract_auth(conn, success_lambda) do
case conn
|> get_req_header("authorization")
|> RequestValidator.validate_bearer_header() do
{:ok, token} ->
success_lambda.(token)
{:error, _} ->
{:malformed_data, "Missing/Invalid authorization header"}
end
end
defp handle_response(response, conn) do
%{code: code, message: message, json: json} =
case response do
{:ok, data} ->
%{code: 200, message: Jason.encode!(data), json: true}
{:not_found, message} ->
%{code: 404, message: message, json: false}
{:malformed_data, message} ->
%{code: 400, message: message, json: false}
{:not_authorized, message} ->
%{code: 401, message: message, json: false}
{:server_error, _} ->
%{code: 500, message: "An error occurred internally", json: false}
_ ->
%{code: 500, message: "An error occurred internally", json: false}
end
case json do
true ->
conn
|> put_resp_header("content-type", "application/json")
false ->
conn
end
|> send_resp(code, message)
end
end
|