defmodule MaatFeatherWeb.Plug.Auth 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: "Unauthorized"}}) ) end @doc """ Handle """ def call( %Plug.Conn{ remote_ip: _remote_ip } = conn, _params ) do with [access_token] <- get_req_header(conn, "authorization") do access_token = String.slice(access_token, 7..-1) case Token.decode(access_token) do {:ok, claims} -> conn |> assign(:user, claims) |> assign(:access_token, access_token) {:error, _message} -> send_401(conn) end else _ -> send_401(conn) end end end