-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.iex.exs
More file actions
65 lines (52 loc) · 1.47 KB
/
Copy path.iex.exs
File metadata and controls
65 lines (52 loc) · 1.47 KB
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
59
60
61
62
63
64
65
import Ecto.Query
alias Squawk.Repo
alias Squawk.Nest
alias Squawk.Nest.Sqwk
alias Squawk.Nest.Key
alias Squawk.Bird
alias Squawk.Bird.User
defmodule AdminTools do
def add_key(key) do
%Key{key: key, expiration: DateTime.utc_now}
|> Repo.insert!
end
def create_admin(handle) do
Bird.create_admin(handle)
end
def get_live_squawks do
Sqwk
|> where([s], s.expiration > ^DateTime.utc_now)
|> Repo.all
|> Enum.map(fn(sqwk) -> %{key: sqwk.key, host: sqwk.host, ttl: time_remaining(sqwk.expiration)} end)
end
def magiclink(handle) do
case Bird.get_admin_by_handle!(handle) do
nil -> "Error: #{ handle } is not an Admin. Try 'Admin.create_admin(\"#{ handle }\")"
_admin ->
token = Phoenix.Token.sign(SquawkWeb.Endpoint, "admin", handle)
"http://squawk.online/admin/magiclink?token=#{ token }"
end
end
defp time_remaining(expiration) do
total_seconds = (DateTime.to_unix(expiration) - DateTime.to_unix(DateTime.utc_now))
hours = div(total_seconds, 3600)
minutes = div(rem(total_seconds, 3600), 60)
seconds = rem(total_seconds, 60)
hours_display = if hours > 0 do
"#{ hours }:"
else
""
end
minutes_display = if hours > 0 and minutes < 10 do
"0#{ minutes }:"
else
"#{ minutes }:"
end
seconds_display = if seconds < 10 do
"0#{ seconds }"
else
"#{ seconds }"
end
"#{ hours_display }#{ minutes_display }#{ seconds_display }"
end
end