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