diff options
Diffstat (limited to 'lib/nola_web/controllers/page_controller.ex')
-rw-r--r-- | lib/nola_web/controllers/page_controller.ex | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/lib/nola_web/controllers/page_controller.ex b/lib/nola_web/controllers/page_controller.ex new file mode 100644 index 0000000..2ac4d0a --- /dev/null +++ b/lib/nola_web/controllers/page_controller.ex @@ -0,0 +1,53 @@ +defmodule NolaWeb.PageController do + use NolaWeb, :controller + + plug NolaWeb.ContextPlug when action not in [:token] + plug NolaWeb.ContextPlug, [restrict: :public] when action in [:token] + + def token(conn, %{"token" => token}) do + with \ + {:ok, account, perks} <- Nola.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 <- Nola.IRC.env(: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 |