defmodule Localiser.Web.Plugs.AuthRequired do import Plug.Conn alias Localiser.Web.Token def init(opts), do: opts def call(conn, _opts) do with ["Bearer " <> token] <- get_req_header(conn, "authorization"), {:ok, claims} <- Token.verify_token(token) do assign(conn, :current_user, %{ user_id: claims["sub"], username: claims["username"], is_admin: claims["is_admin"] }) else _ -> conn |> put_resp_content_type("application/json") |> send_resp(401, ~s({"error":"unauthorised"})) |> halt() end end end