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
|