Changeset View
Changeset View
Standalone View
Standalone View
web/controllers/plugs/set_user.ex
defmodule KolabChat.Plugs.SetUser do | defmodule KolabChat.Plugs.SetUser do | ||||
import Plug.Conn | import Plug.Conn | ||||
alias KolabChat.Repo | use KolabChat.Database | ||||
alias KolabChat.User | |||||
def init(params), do: params | def init(params), do: params | ||||
# token authentication | # token authentication | ||||
def call(%{"params": %{"token" => token}} = conn, _params) do | def call(%{"params": %{"token" => token}} = conn, _params) do | ||||
case Phoenix.Token.verify(conn, "user", token, max_age: 86400) do | case Phoenix.Token.verify(conn, "user", token, max_age: 86400) do | ||||
{:ok, user_id} -> | {:ok, user_id} -> | ||||
assign(conn, :user, Repo.get!(User, user_id)) | assign(conn, :user, get_user_by_id(user_id)) | ||||
_ -> | _ -> | ||||
assign(conn, :user, nil) | assign(conn, :user, nil) | ||||
end | end | ||||
end | end | ||||
# session authentication | # session authentication | ||||
def call(conn, _params) do | def call(conn, _params) do | ||||
user_id = get_session(conn, :user_id) | user_id = get_session(conn, :user_id) | ||||
cond do | cond do | ||||
user = user_id && Repo.get(User, user_id) -> | user = user_id && get_user_by_id(user_id) -> | ||||
assign(conn, :user, user) | assign(conn, :user, user) | ||||
true -> | true -> | ||||
assign(conn, :user, nil) | assign(conn, :user, nil) | ||||
end | end | ||||
end | end | ||||
def get_user_by_id(user_id) do | |||||
require Amnesia.Helper # FIXME: this is required by Amnesia.transaction, where to put it best? | |||||
Amnesia.transaction do | |||||
Database.User.read(user_id) | |||||
end | |||||
end | |||||
end | end |