summaryrefslogtreecommitdiff
path: root/lib/web/controllers/page_controller.ex
blob: 4f3c44e2dabf5e8bc0bd999b817eec25ab78ca21 (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
54
55
56
57
58
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 = Nola.Membership.of_account(account)
    users = Nola.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