34 lines
913 B
Elixir
34 lines
913 B
Elixir
defmodule FrenzyWeb.Plug.Authenticate do
|
|
import Plug.Conn
|
|
alias Frenzy.{Repo, User}
|
|
alias FrenzyWeb.Router.Helpers, as: Routes
|
|
alias FrenzyWeb.Endpoint
|
|
|
|
def init(opts), do: opts
|
|
|
|
def call(conn, _opts) do
|
|
user_token = get_session(conn, :user_token)
|
|
|
|
case Phoenix.Token.verify(Endpoint, "user token", user_token, max_age: 24 * 60 * 60) do
|
|
{:error, _reason} ->
|
|
conn
|
|
|> Phoenix.Controller.redirect(
|
|
to: Routes.login_path(Endpoint, :login, continue: Phoenix.Controller.current_path(conn))
|
|
)
|
|
|> halt()
|
|
|
|
{:ok, user_id} ->
|
|
case Repo.get(User, user_id) do
|
|
nil ->
|
|
conn
|
|
|> Phoenix.Controller.redirect(to: Routes.login_path(Endpoint, :login))
|
|
|> halt()
|
|
|
|
user ->
|
|
user = Repo.preload(user, [:groups, :feeds])
|
|
assign(conn, :user, user)
|
|
end
|
|
end
|
|
end
|
|
end
|