Software /
code /
prosody-modules
Annotate
mod_http_admin_api/mod_http_admin_api.lua @ 4368:e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Now allows setting a name separate from the id, and updating group
membership in a single call.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 21 Jan 2021 16:02:31 +0000 |
parent | 4366:83370df0ce4a |
child | 4369:29b7f445aec5 |
rev | line source |
---|---|
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
1 local usermanager = require "core.usermanager"; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
2 |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
3 local id = require "util.id"; |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 local json = require "util.json"; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 module:depends("http"); |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 local invites = module:depends("invites"); |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 local tokens = module:depends("tokenauth"); |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
10 local mod_pep = module:depends("pep"); |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
12 local group_info_store = module:open_store("group_info"); |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
13 local group_members_store = module:open_store("groups"); |
4352
f6da234b21b8
mod_http_admin_api: Add groups property to users
Matthew Wild <mwild1@gmail.com>
parents:
4351
diff
changeset
|
14 local group_memberships = module:open_store("groups", "map"); |
4363
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
15 local push_errors = module:shared("cloud_notify/push_errors"); |
4352
f6da234b21b8
mod_http_admin_api: Add groups property to users
Matthew Wild <mwild1@gmail.com>
parents:
4351
diff
changeset
|
16 |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 local json_content_type = "application/json"; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 local www_authenticate_header = ("Bearer realm=%q"):format(module.host.."/"..module.name); |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 local function check_credentials(request) |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 local auth_type, auth_data = string.match(request.headers.authorization or "", "^(%S+)%s(.+)$"); |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 if not (auth_type and auth_data) then |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 return false; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 if auth_type == "Bearer" then |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 local token_info = tokens.get_token_info(auth_data); |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 if not token_info or not token_info.session then |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 return false; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 return token_info.session; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 return nil; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 function check_auth(routes) |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 local function check_request_auth(event) |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 local session = check_credentials(event.request); |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 if not session then |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 event.response.headers.authorization = www_authenticate_header; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 return false, 401; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 elseif session.auth_scope ~= "prosody:scope:admin" then |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 return false, 403; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 event.session = session; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 return true; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 for route, handler in pairs(routes) do |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 routes[route] = function (event, ...) |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 local permit, code = check_request_auth(event); |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 if not permit then |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 return code; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 return handler(event, ...); |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 end; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 return routes; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 local function token_info_to_invite_info(token_info) |
4349
5ca36c36ab05
mod_http_admin_api: Expose new invite properties: groups, source and reusable
Matthew Wild <mwild1@gmail.com>
parents:
4345
diff
changeset
|
63 local additional_data = token_info.additional_data; |
5ca36c36ab05
mod_http_admin_api: Expose new invite properties: groups, source and reusable
Matthew Wild <mwild1@gmail.com>
parents:
4345
diff
changeset
|
64 local groups = additional_data and additional_data.groups or nil; |
5ca36c36ab05
mod_http_admin_api: Expose new invite properties: groups, source and reusable
Matthew Wild <mwild1@gmail.com>
parents:
4345
diff
changeset
|
65 local source = additional_data and additional_data.source or nil; |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 return { |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 id = token_info.token; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 type = token_info.type; |
4358
d3e0fe470877
mod_http_admin_api: Ensure 'reusable' flag is always present on an invite
Matthew Wild <mwild1@gmail.com>
parents:
4357
diff
changeset
|
69 reusable = not not token_info.reusable; |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 inviter = token_info.inviter; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 jid = token_info.jid; |
4354
d61d7d30f38d
mod_http_admin_api: Add XMPP URI into invite objects
Matthew Wild <mwild1@gmail.com>
parents:
4353
diff
changeset
|
72 uri = token_info.uri; |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
73 landing_page = token_info.landing_page; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 created_at = token_info.created_at; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 expires = token_info.expires; |
4349
5ca36c36ab05
mod_http_admin_api: Expose new invite properties: groups, source and reusable
Matthew Wild <mwild1@gmail.com>
parents:
4345
diff
changeset
|
76 groups = groups; |
5ca36c36ab05
mod_http_admin_api: Expose new invite properties: groups, source and reusable
Matthew Wild <mwild1@gmail.com>
parents:
4345
diff
changeset
|
77 source = source; |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
78 }; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
81 function list_invites(event) |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
82 local invites_list = {}; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
83 for token, invite in invites.pending_account_invites() do --luacheck: ignore 213/token |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 table.insert(invites_list, token_info_to_invite_info(invite)); |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
85 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 table.sort(invites_list, function (a, b) |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
87 return a.created_at < b.created_at; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
88 end); |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
90 event.response.headers["Content-Type"] = json_content_type; |
4350
270025e76bf8
mod_http_admin_api: Use json.encode_array() when returning an array
Matthew Wild <mwild1@gmail.com>
parents:
4349
diff
changeset
|
91 return json.encode_array(invites_list); |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
92 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
93 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
94 function get_invite_by_id(event, invite_id) |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
95 local invite = invites.get_account_invite_info(invite_id); |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
96 if not invite then |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
97 return 404; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
98 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
99 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
100 event.response.headers["Content-Type"] = json_content_type; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
101 return json.encode(token_info_to_invite_info(invite)); |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
102 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
103 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
104 function create_invite(event) |
4351
c0b1b2a61e3c
mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents:
4350
diff
changeset
|
105 local invite_options; |
c0b1b2a61e3c
mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents:
4350
diff
changeset
|
106 |
c0b1b2a61e3c
mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents:
4350
diff
changeset
|
107 local request = event.request; |
c0b1b2a61e3c
mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents:
4350
diff
changeset
|
108 if request.body and #request.body > 0 then |
c0b1b2a61e3c
mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents:
4350
diff
changeset
|
109 if request.headers.content_type ~= json_content_type then |
c0b1b2a61e3c
mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents:
4350
diff
changeset
|
110 module:log("warn", "Invalid content type"); |
c0b1b2a61e3c
mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents:
4350
diff
changeset
|
111 return 400; |
c0b1b2a61e3c
mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents:
4350
diff
changeset
|
112 end |
c0b1b2a61e3c
mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents:
4350
diff
changeset
|
113 invite_options = json.decode(event.request.body); |
c0b1b2a61e3c
mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents:
4350
diff
changeset
|
114 if not invite_options then |
c0b1b2a61e3c
mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents:
4350
diff
changeset
|
115 module:log("warn", "Invalid JSON"); |
c0b1b2a61e3c
mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents:
4350
diff
changeset
|
116 return 400; |
c0b1b2a61e3c
mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents:
4350
diff
changeset
|
117 end |
4359
5dbce7f35aa0
mod_http_admin_api: Fix logic bug
Matthew Wild <mwild1@gmail.com>
parents:
4358
diff
changeset
|
118 else |
5dbce7f35aa0
mod_http_admin_api: Fix logic bug
Matthew Wild <mwild1@gmail.com>
parents:
4358
diff
changeset
|
119 invite_options = {}; |
4351
c0b1b2a61e3c
mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents:
4350
diff
changeset
|
120 end |
c0b1b2a61e3c
mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents:
4350
diff
changeset
|
121 |
c0b1b2a61e3c
mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents:
4350
diff
changeset
|
122 local invite; |
4359
5dbce7f35aa0
mod_http_admin_api: Fix logic bug
Matthew Wild <mwild1@gmail.com>
parents:
4358
diff
changeset
|
123 if invite_options.reusable then |
4357
a49ca492e621
mod_invites, mod_http_admin_api: Allow specifying multiple groups when creating an invite
Matthew Wild <mwild1@gmail.com>
parents:
4354
diff
changeset
|
124 invite = invites.create_group(invite_options.groups, invite_options.ttl, { |
4351
c0b1b2a61e3c
mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents:
4350
diff
changeset
|
125 source = "admin_api/"..event.session.username; |
c0b1b2a61e3c
mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents:
4350
diff
changeset
|
126 }); |
c0b1b2a61e3c
mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents:
4350
diff
changeset
|
127 else |
c0b1b2a61e3c
mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents:
4350
diff
changeset
|
128 invite = invites.create_account(nil, { |
c0b1b2a61e3c
mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents:
4350
diff
changeset
|
129 source = "admin_api/"..event.session.username; |
4357
a49ca492e621
mod_invites, mod_http_admin_api: Allow specifying multiple groups when creating an invite
Matthew Wild <mwild1@gmail.com>
parents:
4354
diff
changeset
|
130 groups = invite_options.groups; |
4351
c0b1b2a61e3c
mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents:
4350
diff
changeset
|
131 }); |
c0b1b2a61e3c
mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents:
4350
diff
changeset
|
132 end |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
133 if not invite then |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
134 return 500; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
135 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
136 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
137 event.response.headers["Content-Type"] = json_content_type; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
138 return json.encode(token_info_to_invite_info(invite)); |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
139 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
140 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
141 function delete_invite(event, invite_id) --luacheck: ignore 212/event |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
142 if not invites.delete_account_invite(invite_id) then |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
143 return 404; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
144 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
145 return 200; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
146 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
147 |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
148 local function get_user_info(username) |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
149 if not usermanager.user_exists(username, module.host) then |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
150 return nil; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
151 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
152 local display_name; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
153 do |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
154 local pep_service = mod_pep.get_pep_service(username); |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
155 local ok, _, nick_item = pep_service:get_last_item("http://jabber.org/protocol/nick", true); |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
156 if ok and nick_item then |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
157 display_name = nick_item:get_child_text("nick", "http://jabber.org/protocol/nick"); |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
158 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
159 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
160 |
4362
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
161 return { |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
162 username = username; |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
163 display_name = display_name; |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
164 }; |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
165 end |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
166 |
4363
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
167 local function get_session_debug_info(session) |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
168 local info = { |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
169 full_jid = session.full_jid; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
170 ip = session.ip; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
171 since = math.floor(session.conntime); |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
172 status = { |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
173 connected = not not session.conn; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
174 hibernating = not not session.hibernating; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
175 }; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
176 features = { |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
177 carbons = not not session.want_carbons; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
178 encrypted = not not session.secure; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
179 acks = not not session.smacks; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
180 resumption = not not session.resumption_token; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
181 mobile_optimization = not not session.csi_counter; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
182 push_notifications = not not session.push_identifier; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
183 history = not not session.mam_requested; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
184 }; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
185 queues = {}; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
186 }; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
187 -- CSI |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
188 if session.state then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
189 info.status.active = session.state == "active"; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
190 info.queues.held_stanzas = session.csi_counter or 0; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
191 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
192 -- Smacks queue |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
193 if session.last_requested_h and session.last_acknowledged_stanza then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
194 info.queues.awaiting_acks = session.last_requested_h - session.last_acknowledged_stanza; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
195 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
196 if session.push_identifier then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
197 info.push_info = { |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
198 id = session.push_identifier; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
199 wakeup_push_sent = session.first_hibernated_push; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
200 }; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
201 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
202 return info; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
203 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
204 |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
205 local function get_user_omemo_info(username) |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
206 local everything_valid = true; |
4366
83370df0ce4a
mod_http_admin_api: do not report OMEMO as ok if no devices exist
Jonas Schäfer <jonas@wielicki.name>
parents:
4365
diff
changeset
|
207 local any_device = false; |
4363
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
208 local omemo_status = {}; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
209 local omemo_devices; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
210 local pep_service = mod_pep.get_pep_service(username); |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
211 if pep_service and pep_service.nodes then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
212 local ok, _, device_list = pep_service:get_last_item("eu.siacs.conversations.axolotl.devicelist", true); |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
213 if ok and device_list then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
214 device_list = device_list:get_child("list", "eu.siacs.conversations.axolotl"); |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
215 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
216 if device_list then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
217 omemo_devices = {}; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
218 for device_entry in device_list:childtags("device") do |
4366
83370df0ce4a
mod_http_admin_api: do not report OMEMO as ok if no devices exist
Jonas Schäfer <jonas@wielicki.name>
parents:
4365
diff
changeset
|
219 any_device = true; |
4363
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
220 local device_info = {}; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
221 local device_id = tonumber(device_entry.attr.id or ""); |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
222 if device_id then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
223 device_info.id = device_id; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
224 local bundle_id = ("eu.siacs.conversations.axolotl.bundles:%d"):format(device_id); |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
225 local have_bundle, _, bundle = pep_service:get_last_item(bundle_id, true); |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
226 if have_bundle and bundle and bundle:get_child("bundle", "eu.siacs.conversations.axolotl") then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
227 device_info.have_bundle = true; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
228 local config_ok, bundle_config = pep_service:get_node_config(bundle_id, true); |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
229 if config_ok and bundle_config then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
230 device_info.bundle_config = bundle_config; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
231 if bundle_config.max_items == 1 |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
232 and bundle_config.access_model == "open" |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
233 and bundle_config.persist_items == true |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
234 and bundle_config.publish_model == "publishers" then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
235 device_info.valid = true; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
236 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
237 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
238 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
239 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
240 if device_info.valid == nil then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
241 device_info.valid = false; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
242 everything_valid = false; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
243 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
244 table.insert(omemo_devices, device_info); |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
245 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
246 |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
247 local config_ok, list_config = pep_service:get_node_config("eu.siacs.conversations.axolotl.devicelist", true); |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
248 if config_ok and list_config then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
249 omemo_status.config = list_config; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
250 if list_config.max_items == 1 |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
251 and list_config.access_model == "open" |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
252 and list_config.persist_items == true |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
253 and list_config.publish_model == "publishers" then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
254 omemo_status.config_valid = true; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
255 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
256 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
257 if omemo_status.config_valid == nil then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
258 omemo_status.config_valid = false; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
259 everything_valid = false; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
260 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
261 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
262 end |
4366
83370df0ce4a
mod_http_admin_api: do not report OMEMO as ok if no devices exist
Jonas Schäfer <jonas@wielicki.name>
parents:
4365
diff
changeset
|
263 omemo_status.valid = everything_valid and any_device; |
4363
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
264 return { |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
265 status = omemo_status; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
266 devices = omemo_devices; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
267 }; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
268 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
269 |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
270 local function get_user_debug_info(username) |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
271 local debug_info = { |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
272 time = os.time(); |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
273 }; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
274 -- Online sessions |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
275 do |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
276 local user_sessions = hosts[module.host].sessions[username]; |
4365
f975a4d31f35
mod_http_admin_api: make the api a bit less untested
Jonas Schäfer <jonas@wielicki.name>
parents:
4364
diff
changeset
|
277 if user_sessions then |
f975a4d31f35
mod_http_admin_api: make the api a bit less untested
Jonas Schäfer <jonas@wielicki.name>
parents:
4364
diff
changeset
|
278 user_sessions = user_sessions.sessions |
f975a4d31f35
mod_http_admin_api: make the api a bit less untested
Jonas Schäfer <jonas@wielicki.name>
parents:
4364
diff
changeset
|
279 end |
4363
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
280 local sessions = {}; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
281 if user_sessions then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
282 for _, session in pairs(user_sessions) do |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
283 table.insert(sessions, get_session_debug_info(session)); |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
284 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
285 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
286 debug_info.sessions = sessions; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
287 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
288 -- Push registrations |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
289 do |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
290 local store = module:open_store("cloud_notify"); |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
291 local services = store:get(username); |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
292 local push_registrations = {}; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
293 if services then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
294 for identifier, push_info in pairs(services) do |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
295 push_registrations[identifier] = { |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
296 since = push_info.timestamp; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
297 service = push_info.jid; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
298 node = push_info.node; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
299 error_count = push_errors[identifier] or 0; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
300 }; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
301 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
302 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
303 debug_info.push_registrations = push_registrations; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
304 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
305 -- OMEMO |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
306 debug_info.omemo = get_user_omemo_info(username); |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
307 |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
308 return debug_info; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
309 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
310 |
4362
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
311 local function get_user_groups(username) |
4352
f6da234b21b8
mod_http_admin_api: Add groups property to users
Matthew Wild <mwild1@gmail.com>
parents:
4351
diff
changeset
|
312 local groups; |
f6da234b21b8
mod_http_admin_api: Add groups property to users
Matthew Wild <mwild1@gmail.com>
parents:
4351
diff
changeset
|
313 do |
f6da234b21b8
mod_http_admin_api: Add groups property to users
Matthew Wild <mwild1@gmail.com>
parents:
4351
diff
changeset
|
314 local group_set = group_memberships:get_all(username); |
f6da234b21b8
mod_http_admin_api: Add groups property to users
Matthew Wild <mwild1@gmail.com>
parents:
4351
diff
changeset
|
315 if group_set and next(group_set) then |
f6da234b21b8
mod_http_admin_api: Add groups property to users
Matthew Wild <mwild1@gmail.com>
parents:
4351
diff
changeset
|
316 groups = {}; |
f6da234b21b8
mod_http_admin_api: Add groups property to users
Matthew Wild <mwild1@gmail.com>
parents:
4351
diff
changeset
|
317 for group_id in pairs(group_set) do |
f6da234b21b8
mod_http_admin_api: Add groups property to users
Matthew Wild <mwild1@gmail.com>
parents:
4351
diff
changeset
|
318 table.insert(groups, group_id); |
f6da234b21b8
mod_http_admin_api: Add groups property to users
Matthew Wild <mwild1@gmail.com>
parents:
4351
diff
changeset
|
319 end |
f6da234b21b8
mod_http_admin_api: Add groups property to users
Matthew Wild <mwild1@gmail.com>
parents:
4351
diff
changeset
|
320 end |
f6da234b21b8
mod_http_admin_api: Add groups property to users
Matthew Wild <mwild1@gmail.com>
parents:
4351
diff
changeset
|
321 end |
4362
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
322 return groups; |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
323 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
324 |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
325 function list_users(event) |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
326 local user_list = {}; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
327 for username in usermanager.users(module.host) do |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
328 table.insert(user_list, get_user_info(username)); |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
329 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
330 |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
331 event.response.headers["Content-Type"] = json_content_type; |
4350
270025e76bf8
mod_http_admin_api: Use json.encode_array() when returning an array
Matthew Wild <mwild1@gmail.com>
parents:
4349
diff
changeset
|
332 return json.encode_array(user_list); |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
333 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
334 |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
335 function get_user_by_name(event, username) |
4362
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
336 local property |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
337 do |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
338 local name, sub_path = username:match("^([^/]+)/(%w+)$"); |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
339 if name then |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
340 username = name; |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
341 property = sub_path; |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
342 end |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
343 end |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
344 |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
345 if property == "groups" then |
4364
49cf9d188b26
mod_http_admin_api: set content-type for debug API
Jonas Schäfer <jonas@wielicki.name>
parents:
4363
diff
changeset
|
346 event.response.headers["Content-Type"] = json_content_type; |
4362
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
347 return json.encode(get_user_groups(username)); |
4363
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
348 elseif property == "debug" then |
4364
49cf9d188b26
mod_http_admin_api: set content-type for debug API
Jonas Schäfer <jonas@wielicki.name>
parents:
4363
diff
changeset
|
349 event.response.headers["Content-Type"] = json_content_type; |
4363
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
350 return json.encode(get_user_debug_info(username)); |
4362
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
351 end |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
352 |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
353 local user_info = get_user_info(username); |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
354 if not user_info then |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
355 return 404; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
356 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
357 |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
358 event.response.headers["Content-Type"] = json_content_type; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
359 return json.encode(user_info); |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
360 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
361 |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
362 function delete_user(event, username) --luacheck: ignore 212/event |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
363 if not usermanager.delete_user(username, module.host) then |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
364 return 404; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
365 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
366 return 200; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
367 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
368 |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
369 function list_groups(event) |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
370 local group_list = {}; |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
371 for group_id in group_info_store:users() do |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
372 local group_info = group_info_store:get(group_id); |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
373 table.insert(group_list, { |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
374 id = group_id; |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
375 name = group_info.name; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
376 members = group_members_store:get(group_id); |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
377 }); |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
378 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
379 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
380 event.response.headers["Content-Type"] = json_content_type; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
381 return json.encode_array(group_list); |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
382 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
383 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
384 function get_group_by_id(event, group_id) |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
385 local group = group_info_store:get(group_id); |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
386 if not group then |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
387 return 404; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
388 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
389 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
390 event.response.headers["Content-Type"] = json_content_type; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
391 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
392 return json.encode({ |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
393 id = group_id; |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
394 name = group.name; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
395 members = group_members_store:get(group_id); |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
396 }); |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
397 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
398 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
399 function create_group(event) |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
400 local request = event.request; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
401 if request.headers.content_type ~= json_content_type |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
402 or (not request.body or #request.body == 0) then |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
403 return 400; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
404 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
405 local group = json.decode(event.request.body); |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
406 if not group then |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
407 return 400; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
408 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
409 |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
410 if not group.name then |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
411 module:log("warn", "Group missing name property"); |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
412 return 400; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
413 end |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
414 |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
415 local group_id = id.short(); |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
416 |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
417 local ok = group_info_store:set(group_id, { |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
418 name = group.name; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
419 }); |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
420 if not ok then |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
421 return 500; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
422 end |
4361
7f1f3b79d991
mod_http_admin_api: Return new group object on successful creation
Matthew Wild <mwild1@gmail.com>
parents:
4360
diff
changeset
|
423 |
7f1f3b79d991
mod_http_admin_api: Return new group object on successful creation
Matthew Wild <mwild1@gmail.com>
parents:
4360
diff
changeset
|
424 event.response.headers["Content-Type"] = json_content_type; |
7f1f3b79d991
mod_http_admin_api: Return new group object on successful creation
Matthew Wild <mwild1@gmail.com>
parents:
4360
diff
changeset
|
425 return json.encode({ |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
426 id = group_id; |
4361
7f1f3b79d991
mod_http_admin_api: Return new group object on successful creation
Matthew Wild <mwild1@gmail.com>
parents:
4360
diff
changeset
|
427 name = group.name; |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
428 members = {}; |
4361
7f1f3b79d991
mod_http_admin_api: Return new group object on successful creation
Matthew Wild <mwild1@gmail.com>
parents:
4360
diff
changeset
|
429 }); |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
430 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
431 |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
432 function update_group(event, group) --luacheck: ignore 212/event |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
433 local group_id, member_name = group:match("^([^/]+)/members/([^/]+)$"); |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
434 if group_id and member_name then |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
435 if not group_info_store:get(group_id) then |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
436 return 404; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
437 elseif not group_memberships:set(group_id, member_name, true) then |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
438 return 500; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
439 end |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
440 return 200; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
441 end |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
442 return 400; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
443 end |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
444 |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
445 function delete_group(event, subpath) --luacheck: ignore 212/event |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
446 -- Check if this is a membership deletion and handle it |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
447 local group_id, member_name = subpath:match("^([^/]+)/members/([^/]+)$"); |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
448 if group_id and member_name then |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
449 if not group_info_store:get(group_id) then |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
450 return 404; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
451 end |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
452 if group_memberships:set(group_id, member_name, nil) then |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
453 return 200; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
454 else |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
455 return 500; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
456 end |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
457 else |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
458 group_id = subpath; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
459 end |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
460 |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
461 if not group_id then |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
462 return 400; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
463 end |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
464 |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
465 if not group_info_store:get(group_id) then |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
466 return 404; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
467 end |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
468 |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
469 if not group_members_store:set(group_id, nil) then |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
470 return 500; |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
471 else |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
472 if not group_info_store:set(group_id, nil) then |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
473 return 500; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
474 end |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
475 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
476 return 200; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
477 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
478 |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
479 module:provides("http", { |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
480 route = check_auth { |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
481 ["GET /invites"] = list_invites; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
482 ["GET /invites/*"] = get_invite_by_id; |
4360
76bec3f66b24
mod_http_admin_api: Switch PUT to POST where appropriate
Matthew Wild <mwild1@gmail.com>
parents:
4359
diff
changeset
|
483 ["POST /invites"] = create_invite; |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
484 ["DELETE /invites/*"] = delete_invite; |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
485 |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
486 ["GET /users"] = list_users; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
487 ["GET /users/*"] = get_user_by_name; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
488 ["DELETE /users/*"] = delete_user; |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
489 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
490 ["GET /groups"] = list_groups; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
491 ["GET /groups/*"] = get_group_by_id; |
4360
76bec3f66b24
mod_http_admin_api: Switch PUT to POST where appropriate
Matthew Wild <mwild1@gmail.com>
parents:
4359
diff
changeset
|
492 ["POST /groups"] = create_group; |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
493 ["PUT /groups/*"] = update_group; |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
494 ["DELETE /groups/*"] = delete_group; |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
495 }; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
496 }); |