defmodule LSGWeb.PageController do use LSGWeb, :controller plug LSGWeb.ContextPlug when action not in [:token] plug LSGWeb.ContextPlug, [restrict: :public] when action in [:token] def token(conn, %{"token" => token}) do with \ {:ok, account, perks} <- LSG.AuthToken.lookup(token) do IO.puts("Authenticated account #{inspect account}") conn = put_session(conn, :account, account) case perks do nil -> redirect(conn, to: "/") {:redirect, path} -> redirect(conn, to: path) {:external_redirect, url} -> redirect(conn, external: url) end else z -> IO.inspect(z) text(conn, "Error: invalid or expired token") end end def index(conn = %{assigns: %{account: account}}, _) do memberships = IRC.Membership.of_account(account) users = IRC.UserTrack.find_by_account(account) metas = IRC.Account.get_all_meta(account) predicates = IRC.Account.get_predicates(account) conn |> assign(:title, account.name) |> render("user.html", users: users, memberships: memberships, metas: metas, predicates: predicates) end def irc(conn, _) do bot_helps = for mod <- Application.get_env(:lsg, :irc)[:handlers] do mod.irc_doc() end render conn, "irc.html", bot_helps: bot_helps end def authenticate(conn, _) do with \ {:account, account_id} when is_binary(account_id) <- {:account, get_session(conn, :account)}, {:account, account} when not is_nil(account) <- {:account, IRC.Account.get(account_id)} do assign(conn, :account, account) else _ -> conn end end end