mirror of
https://github.com/wanderer-industries/wanderer
synced 2025-12-12 02:35:42 +00:00
46 lines
883 B
Elixir
46 lines
883 B
Elixir
defmodule WandererAppWeb.Plugs.SetUser do
|
|
@moduledoc false
|
|
|
|
import Plug.Conn
|
|
|
|
alias WandererApp.Api.User
|
|
|
|
def init(opts), do: opts
|
|
|
|
def call(conn, _opts) do
|
|
user_id = get_session(conn, :user_id)
|
|
|
|
case _load_user(user_id) do
|
|
nil ->
|
|
conn
|
|
|> assign(:current_user, nil)
|
|
|> assign(:current_user_role, :none)
|
|
|
|
user ->
|
|
admins = WandererApp.Env.admins()
|
|
|
|
user_role =
|
|
case Enum.empty?(admins) or user.hash in admins do
|
|
true ->
|
|
:admin
|
|
|
|
_ ->
|
|
:user
|
|
end
|
|
|
|
conn
|
|
|> assign(:current_user, user)
|
|
|> assign(:current_user_role, user_role)
|
|
end
|
|
end
|
|
|
|
defp _load_user(nil), do: nil
|
|
|
|
defp _load_user(user_id) do
|
|
case User.by_id(user_id, load: :characters) do
|
|
{:ok, user} -> user
|
|
{:error, _} -> nil
|
|
end
|
|
end
|
|
end
|