defmodule PhilomenaWeb.ApiTokenPlug do alias Philomena.Users.User alias Philomena.Repo alias Pow.Plug import Ecto.Query def init([]), do: [] def call(conn, _opts) do conn |> maybe_find_user(conn.params["key"]) |> maybe_assign_user() end defp maybe_find_user(conn, nil), do: {conn, nil} defp maybe_find_user(conn, key) do user = User |> where(authentication_token: ^key) |> Repo.one() {conn, user} end defp maybe_assign_user({conn, nil}), do: conn defp maybe_assign_user({conn, user}) do config = Plug.fetch_config(conn) Plug.assign_current_user(conn, user, config) end end