Current section
Files
Jump to
Current section
Files
lib/plug.ex
defmodule Bartender.Plug do
@behaviour Plug
import Plug.Conn
def init(opts), do: opts
def call(conn, guardian_module) do
context = build_context(conn, guardian_module)
Absinthe.Plug.put_options(conn, context: context)
end
defp build_context(conn, guardian_module) do
with ["Bearer " <> token] <- get_req_header(conn, "authorization"),
{:ok, current_user} <- authorize(guardian_module, token) do
%{current_user: current_user}
else
_ ->
%{}
end
end
defp authorize(guardian_module, token) do
case apply(guardian_module, :resource_from_token, [token]) do
{:ok, user, _claims} ->
{:ok, user}
_ ->
{:error, :unauthorized}
end
end
end