summaryrefslogtreecommitdiff
path: root/lib/web/controllers/page_controller.ex
blob: c5d0a5795f084de66622cdfa2849f8f09dc300d2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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 = Nola.Account.get_all_meta(account)
    predicates = Nola.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, Nola.Account.get(account_id)}
    do
      assign(conn, :account, account)
    else
      _ -> conn
    end
  end

end