philomena/lib/philomena_web/plugs/api_token_plug.ex
2019-11-30 18:11:24 -05:00

32 lines
No EOL
651 B
Elixir

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