|
0
|
1 local Luan = require "luan:Luan.luan"
|
|
|
2 local error = Luan.error
|
|
88
|
3 local ipairs = Luan.ipairs or error()
|
|
|
4 local Time = require "luan:Time.luan"
|
|
|
5 local time_now = Time.now or error()
|
|
|
6 local Table = require "luan:Table.luan"
|
|
|
7 local sort = Table.sort or error()
|
|
114
|
8 local Html = require "luan:Html.luan"
|
|
|
9 local html_encode = Html.encode or error()
|
|
0
|
10 local Io = require "luan:Io.luan"
|
|
|
11 local Http = require "luan:http/Http.luan"
|
|
|
12 local Shared = require "site:/lib/Shared.luan"
|
|
|
13 local head = Shared.head or error()
|
|
|
14 local header = Shared.private_header or error()
|
|
88
|
15 local User = require "site:/lib/User.luan"
|
|
|
16 local Online = require "site:/lib/Online.luan"
|
|
|
17 local get_online = Online.get_user or error()
|
|
|
18 local Logging = require "luan:logging/Logging.luan"
|
|
|
19 local logger = Logging.logger "tools/users.html"
|
|
0
|
20
|
|
|
21
|
|
88
|
22 local function sorter(u1,u2)
|
|
|
23 local o1 = u1.online
|
|
|
24 local o2 = u2.online
|
|
|
25 if o1 == nil then
|
|
|
26 return false
|
|
|
27 elseif o2 == nil then
|
|
|
28 return true
|
|
|
29 else
|
|
|
30 return o1 > o2
|
|
|
31 end
|
|
|
32 end
|
|
|
33
|
|
0
|
34 return function()
|
|
88
|
35 local users = User.search("type:user")
|
|
|
36 for _, user in ipairs(users) do
|
|
|
37 user.online = get_online(user)
|
|
|
38 end
|
|
|
39 sort(users,sorter)
|
|
|
40 local now = time_now()
|
|
0
|
41 Io.stdout = Http.response.text_writer()
|
|
|
42 %>
|
|
|
43 <!doctype html>
|
|
94
|
44 <html lang="en">
|
|
0
|
45 <head>
|
|
|
46 <% head() %>
|
|
88
|
47 <style>
|
|
|
48 table {
|
|
|
49 border-collapse: collapse;
|
|
|
50 }
|
|
|
51 th, td {
|
|
|
52 border: 1px solid;
|
|
|
53 padding: 4px;
|
|
|
54 }
|
|
|
55 </style>
|
|
0
|
56 </head>
|
|
|
57 <body>
|
|
|
58 <% header() %>
|
|
|
59 <div content>
|
|
88
|
60 <h1>users</h1>
|
|
|
61 <table>
|
|
|
62 <tr>
|
|
|
63 <th>ID</th>
|
|
91
|
64 <th>name <small>(open incognito)</small)</th>
|
|
88
|
65 <th>last seen</th>
|
|
114
|
66 <th>email</th>
|
|
|
67 <th>password</th>
|
|
88
|
68 </tr>
|
|
|
69 <%
|
|
|
70 for _, user in ipairs(users) do
|
|
|
71 local online = user.online
|
|
|
72 local ago
|
|
|
73 if online == nil then
|
|
|
74 ago = ""
|
|
|
75 else
|
|
|
76 ago = `%><script>document.write(ago(<%= now - online %>))</script><%`
|
|
|
77 end
|
|
|
78 %>
|
|
|
79 <tr>
|
|
|
80 <td><%= user.id %></td>
|
|
89
|
81 <td><a href="<%=user.login_url()%>&spy"><%= user.name_html() %></a></td>
|
|
88
|
82 <td><%= ago %></td>
|
|
114
|
83 <td><%= html_encode(user.email) %></td>
|
|
|
84 <td><%= html_encode(user.password) %></td>
|
|
88
|
85 </tr>
|
|
|
86 <%
|
|
|
87 end
|
|
|
88 %>
|
|
|
89 </table>
|
|
0
|
90 </div>
|
|
|
91 </body>
|
|
|
92 </html>
|
|
|
93 <%
|
|
|
94 end
|