Current section
Files
Jump to
Current section
Files
lib/maat_feather_web/plug/plug.ex
defmodule MaatFeatherWeb.Auth.Plug do
@moduledoc """
Plug to user ensure authentication.
"""
import Plug.Conn
use Plug.ErrorHandler
alias MaatFeather.Auth.Token
def init(default), do: default
defp send_401(conn) do
conn
|> put_resp_header("content-type", "application/json")
|> send_resp(
:unauthorized,
Jason.encode!(%{errors: %{message: "unauthenticated"}})
)
end
@doc """
Handle
"""
def call(
%Plug.Conn{
remote_ip: _remote_ip
} = conn,
_params
) do
with [token] <- get_req_header(conn, "authorization") do
token = String.slice(token, 7..-1)
case Token.decode(token) do
{:ok, claims} ->
assign(conn, :user, claims)
{:error, _message} ->
send_401(conn)
end
else
_ -> send_401(conn)
end
end
end