Mercurial > prosody-modules
annotate mod_http_admin_api/mod_http_admin_api.lua @ 4899:adecfb36349e
mod_portcheck: Include '*' in allowed characters so '*:port' works
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 19 Feb 2022 01:42:12 +0100 |
parents | 883ad8b0a7c0 |
children | 55e3ca6bdfd1 |
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 |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 local json = require "util.json"; |
4516
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
4 local st = require "util.stanza"; |
4517
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
5 local array = require "util.array"; |
4576
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
6 local statsmanager = require "core.statsmanager"; |
4343
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 module:depends("http"); |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 |
4576
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
10 local announce = module:depends("announce"); |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 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
|
12 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
|
13 local mod_pep = module:depends("pep"); |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
14 local mod_groups = module:depends("groups_internal"); |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 |
4363
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
16 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
|
17 |
4371
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
18 local site_name = module:get_option_string("site_name", module.host); |
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
19 |
4776
13e913471b75
mod_http_admin_api: Ensure freshness of metrics when in manual mode
Kim Alvefur <zash@zash.se>
parents:
4714
diff
changeset
|
20 local manual_stats_collection = module:context("*"):get_option("statistics_interval") == "manual"; |
13e913471b75
mod_http_admin_api: Ensure freshness of metrics when in manual mode
Kim Alvefur <zash@zash.se>
parents:
4714
diff
changeset
|
21 |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 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
|
23 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 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
|
25 |
4516
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
26 local xmlns_pubsub = "http://jabber.org/protocol/pubsub"; |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
27 local xmlns_nick = "http://jabber.org/protocol/nick"; |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
28 |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 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
|
30 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
|
31 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
|
32 return false; |
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 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 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
|
36 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
|
37 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
|
38 return false; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 return token_info.session; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 return nil; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 function check_auth(routes) |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 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
|
47 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
|
48 if not session then |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 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
|
50 return false, 401; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 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
|
52 return false, 403; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 event.session = session; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 return true; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 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
|
59 routes[route] = function (event, ...) |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 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
|
61 if not permit then |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 return code; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 return handler(event, ...); |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 end; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 return routes; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 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
|
71 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
|
72 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
|
73 local source = additional_data and additional_data.source or nil; |
4378
d4e0e4d22fc7
mod_http_admin_api: Add 'reset' property to returned invite objects
Matthew Wild <mwild1@gmail.com>
parents:
4375
diff
changeset
|
74 local reset = not not (additional_data and additional_data.allow_reset or nil); |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 return { |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
76 id = token_info.token; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 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
|
78 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
|
79 inviter = token_info.inviter; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 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
|
81 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
|
82 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
|
83 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
|
84 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
|
85 groups = groups; |
5ca36c36ab05
mod_http_admin_api: Expose new invite properties: groups, source and reusable
Matthew Wild <mwild1@gmail.com>
parents:
4345
diff
changeset
|
86 source = source; |
4378
d4e0e4d22fc7
mod_http_admin_api: Add 'reset' property to returned invite objects
Matthew Wild <mwild1@gmail.com>
parents:
4375
diff
changeset
|
87 reset = reset; |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
88 }; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
90 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
91 function list_invites(event) |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
92 local invites_list = {}; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
93 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
|
94 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
|
95 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
96 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
|
97 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
|
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; |
4350
270025e76bf8
mod_http_admin_api: Use json.encode_array() when returning an array
Matthew Wild <mwild1@gmail.com>
parents:
4349
diff
changeset
|
101 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
|
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 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
|
105 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
|
106 if not invite then |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
107 return 404; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
108 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
109 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
110 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
|
111 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
|
112 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
113 |
4374
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
114 function create_invite_type(event, invite_type) |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
115 local options; |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
116 |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
117 local request = event.request; |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
118 if request.body and #request.body > 0 then |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
119 if request.headers.content_type ~= json_content_type then |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
120 module:log("warn", "Invalid content type"); |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
121 return 400; |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
122 end |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
123 options = json.decode(event.request.body); |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
124 if not options then |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
125 module:log("warn", "Invalid JSON"); |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
126 return 400; |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
127 end |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
128 else |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
129 options = {}; |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
130 end |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
131 |
4396
de55e1475808
mod_http_admin_api: re-add information about invite creator
Jonas Schäfer <jonas@wielicki.name>
parents:
4393
diff
changeset
|
132 local source = event.session.username .. "@" .. module.host .. "/admin_api"; |
de55e1475808
mod_http_admin_api: re-add information about invite creator
Jonas Schäfer <jonas@wielicki.name>
parents:
4393
diff
changeset
|
133 |
4374
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
134 local invite; |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
135 if invite_type == "reset" then |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
136 if not options.username then |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
137 return 400; |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
138 end |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
139 invite = invites.create_account_reset(options.username, options.ttl); |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
140 elseif invite_type == "group" then |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
141 if not options.groups then |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
142 return 400; |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
143 end |
4396
de55e1475808
mod_http_admin_api: re-add information about invite creator
Jonas Schäfer <jonas@wielicki.name>
parents:
4393
diff
changeset
|
144 invite = invites.create_group(options.groups, { |
de55e1475808
mod_http_admin_api: re-add information about invite creator
Jonas Schäfer <jonas@wielicki.name>
parents:
4393
diff
changeset
|
145 source = source; |
de55e1475808
mod_http_admin_api: re-add information about invite creator
Jonas Schäfer <jonas@wielicki.name>
parents:
4393
diff
changeset
|
146 }, options.ttl); |
4374
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
147 elseif invite_type == "account" then |
4375
03cf0d41b272
mod_http_admin_api: Allow specifying groups in account invite
Matthew Wild <mwild1@gmail.com>
parents:
4374
diff
changeset
|
148 invite = invites.create_account(options.username, { |
4396
de55e1475808
mod_http_admin_api: re-add information about invite creator
Jonas Schäfer <jonas@wielicki.name>
parents:
4393
diff
changeset
|
149 source = source; |
4375
03cf0d41b272
mod_http_admin_api: Allow specifying groups in account invite
Matthew Wild <mwild1@gmail.com>
parents:
4374
diff
changeset
|
150 groups = options.groups; |
03cf0d41b272
mod_http_admin_api: Allow specifying groups in account invite
Matthew Wild <mwild1@gmail.com>
parents:
4374
diff
changeset
|
151 }, options.ttl); |
4374
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
152 else |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
153 return 400; |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
154 end |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
155 if not invite then |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
156 return 500; |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
157 end |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
158 event.response.headers["Content-Type"] = json_content_type; |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
159 return json.encode(token_info_to_invite_info(invite)); |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
160 end |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
161 |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
162 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
|
163 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
|
164 return 404; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
165 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
166 return 200; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
167 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
168 |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
169 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
|
170 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
|
171 return nil; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
172 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
173 local display_name; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
174 do |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
175 local pep_service = mod_pep.get_pep_service(username); |
4516
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
176 local ok, _, nick_item = pep_service:get_last_item(xmlns_nick, true); |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
177 if ok and nick_item then |
4516
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
178 display_name = nick_item:get_child_text("nick", xmlns_nick); |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
179 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
180 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
181 |
4517
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
182 local roles = nil; |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
183 if usermanager.get_roles then |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
184 local roles_map = usermanager.get_roles(username.."@"..module.host, module.host) |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
185 roles = array() |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
186 if roles_map then |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
187 for role in pairs(roles_map) do |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
188 roles:push(role) |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
189 end |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
190 end |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
191 end |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
192 |
4362
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
193 return { |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
194 username = username; |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
195 display_name = display_name; |
4517
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
196 roles = roles; |
4362
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
197 }; |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
198 end |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
199 |
4363
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
200 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
|
201 local info = { |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
202 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
|
203 ip = session.ip; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
204 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
|
205 status = { |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
206 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
|
207 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
|
208 }; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
209 features = { |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
210 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
|
211 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
|
212 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
|
213 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
|
214 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
|
215 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
|
216 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
|
217 }; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
218 queues = {}; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
219 }; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
220 -- CSI |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
221 if session.state then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
222 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
|
223 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
|
224 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
225 -- Smacks queue |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
226 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
|
227 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
|
228 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
229 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
|
230 info.push_info = { |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
231 id = session.push_identifier; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
232 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
|
233 }; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
234 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
235 return info; |
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 |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
238 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
|
239 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
|
240 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
|
241 local omemo_status = {}; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
242 local omemo_devices; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
243 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
|
244 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
|
245 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
|
246 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
|
247 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
|
248 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
249 if device_list then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
250 omemo_devices = {}; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
251 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
|
252 any_device = true; |
4363
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
253 local device_info = {}; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
254 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
|
255 if device_id then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
256 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
|
257 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
|
258 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
|
259 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
|
260 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
|
261 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
|
262 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
|
263 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
|
264 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
|
265 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
|
266 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
|
267 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
|
268 device_info.valid = true; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
269 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
270 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
271 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
272 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
273 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
|
274 device_info.valid = false; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
275 everything_valid = false; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
276 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
277 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
|
278 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
279 |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
280 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
|
281 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
|
282 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
|
283 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
|
284 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
|
285 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
|
286 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
|
287 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
|
288 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
289 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
290 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
|
291 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
|
292 everything_valid = false; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
293 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
294 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
295 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
|
296 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
|
297 return { |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
298 status = omemo_status; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
299 devices = omemo_devices; |
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 |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
303 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
|
304 local debug_info = { |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
305 time = os.time(); |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
306 }; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
307 -- Online sessions |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
308 do |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
309 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
|
310 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
|
311 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
|
312 end |
4363
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
313 local sessions = {}; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
314 if user_sessions then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
315 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
|
316 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
|
317 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
318 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
319 debug_info.sessions = sessions; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
320 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
321 -- Push registrations |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
322 do |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
323 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
|
324 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
|
325 local push_registrations = {}; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
326 if services then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
327 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
|
328 push_registrations[identifier] = { |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
329 since = push_info.timestamp; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
330 service = push_info.jid; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
331 node = push_info.node; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
332 error_count = push_errors[identifier] or 0; |
4714
bd83c9ada037
mod_http_admin_api: Include client info in push registration debug output
Matthew Wild <mwild1@gmail.com>
parents:
4576
diff
changeset
|
333 client = push_info.client; |
4363
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
334 }; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
335 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
336 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
337 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
|
338 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
339 -- OMEMO |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
340 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
|
341 |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
342 return debug_info; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
343 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
344 |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
345 function list_users(event) |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
346 local user_list = {}; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
347 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
|
348 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
|
349 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
350 |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
351 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
|
352 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
|
353 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
354 |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
355 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
|
356 local property |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
357 do |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
358 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
|
359 if name then |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
360 username = name; |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
361 property = sub_path; |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
362 end |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
363 end |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
364 |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
365 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
|
366 event.response.headers["Content-Type"] = json_content_type; |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
367 return json.encode(mod_groups.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
|
368 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
|
369 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
|
370 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
|
371 end |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
372 |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
373 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
|
374 if not user_info then |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
375 return 404; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
376 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
377 |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
378 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
|
379 return json.encode(user_info); |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
380 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
381 |
4516
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
382 function update_user(event, username) |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
383 local current_user = get_user_info(username); |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
384 |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
385 local request = event.request; |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
386 if request.headers.content_type ~= json_content_type |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
387 or (not request.body or #request.body == 0) then |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
388 return 400; |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
389 end |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
390 local new_user = json.decode(event.request.body); |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
391 if not new_user then |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
392 return 400; |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
393 end |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
394 |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
395 if new_user.username and new_user.username ~= username then |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
396 return 400; |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
397 end |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
398 |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
399 local final_user = {}; |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
400 |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
401 if new_user.display_name then |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
402 local pep_service = mod_pep.get_pep_service(username); |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
403 -- TODO: publish |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
404 local nick_item = st.stanza("item", { xmlns = xmlns_pubsub, id = "current" }) |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
405 :text_tag("nick", new_user.display_name, { xmlns = xmlns_nick }); |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
406 if pep_service:publish(xmlns_nick, true, "current", nick_item, { |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
407 access_model = "open"; |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
408 _defaults_only = true; |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
409 }) then |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
410 final_user.display_name = new_user.display_name; |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
411 end |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
412 end |
4517
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
413 |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
414 if new_user.roles then |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
415 if not usermanager.set_roles then |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
416 return 500, "feature-not-implemented" |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
417 end |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
418 |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
419 local backend_roles = {}; |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
420 for _, role in ipairs(new_user.roles) do |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
421 backend_roles[role] = true; |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
422 end |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
423 local jid = username.."@"..module.host; |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
424 if not usermanager.set_roles(jid, module.host, backend_roles) then |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
425 module:log("error", "failed to set roles %q for %s", backend_roles, jid) |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
426 return 500 |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
427 end |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
428 end |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
429 |
4516
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
430 return 200; |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
431 end |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
432 |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
433 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
|
434 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
|
435 return 404; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
436 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
437 return 200; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
438 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
439 |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
440 function list_groups(event) |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
441 local group_list = {}; |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
442 for group_id in mod_groups.groups() do |
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
443 local group_info = mod_groups.get_info(group_id); |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
444 table.insert(group_list, { |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
445 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
|
446 name = group_info.name; |
4390
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
447 muc_jid = group_info.muc_jid; |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
448 members = mod_groups.get_members(group_id); |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
449 }); |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
450 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
451 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
452 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
|
453 return json.encode_array(group_list); |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
454 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
455 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
456 function get_group_by_id(event, group_id) |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
457 local group = mod_groups.get_info(group_id); |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
458 if not group then |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
459 return 404; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
460 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
461 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
462 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
|
463 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
464 return json.encode({ |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
465 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
|
466 name = group.name; |
4390
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
467 muc_jid = group.muc_jid; |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
468 members = mod_groups.get_members(group_id); |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
469 }); |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
470 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
471 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
472 function create_group(event) |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
473 local request = event.request; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
474 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
|
475 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
|
476 return 400; |
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 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
|
479 if not group then |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
480 return 400; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
481 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
482 |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
483 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
|
484 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
|
485 return 400; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
486 end |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
487 |
4390
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
488 local create_muc = group.create_muc and true or false; |
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
489 |
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
490 local group_id = mod_groups.create( |
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
491 { |
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
492 name = group.name; |
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
493 }, |
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
494 create_muc |
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
495 ); |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
496 if not group_id then |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
497 return 500; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
498 end |
4361
7f1f3b79d991
mod_http_admin_api: Return new group object on successful creation
Matthew Wild <mwild1@gmail.com>
parents:
4360
diff
changeset
|
499 |
7f1f3b79d991
mod_http_admin_api: Return new group object on successful creation
Matthew Wild <mwild1@gmail.com>
parents:
4360
diff
changeset
|
500 event.response.headers["Content-Type"] = json_content_type; |
4390
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
501 |
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
502 local info = mod_groups.get_info(group_id); |
4361
7f1f3b79d991
mod_http_admin_api: Return new group object on successful creation
Matthew Wild <mwild1@gmail.com>
parents:
4360
diff
changeset
|
503 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
|
504 id = group_id; |
4390
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
505 name = info.name; |
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
506 muc_jid = info.muc_jid or nil; |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
507 members = {}; |
4361
7f1f3b79d991
mod_http_admin_api: Return new group object on successful creation
Matthew Wild <mwild1@gmail.com>
parents:
4360
diff
changeset
|
508 }); |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
509 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
510 |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
511 function update_group(event, group) --luacheck: ignore 212/event |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
512 -- Add member |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
513 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
|
514 if group_id and member_name then |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
515 if not mod_groups.add_member(group_id, member_name) then |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
516 return 500; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
517 end |
4369
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
518 return 204; |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
519 end |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
520 |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
521 local group_id = group:match("^([^/]+)$") |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
522 if group_id then |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
523 local request = event.request; |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
524 if request.headers.content_type ~= json_content_type or (not request.body or #request.body == 0) then |
4369
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
525 return 400; |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
526 end |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
527 |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
528 local update = json.decode(event.request.body); |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
529 if not update then |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
530 return 400; |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
531 end |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
532 |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
533 local group_info = mod_groups.get_info(group_id); |
4369
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
534 if not group_info then |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
535 return 404; |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
536 end |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
537 |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
538 if update.name then |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
539 group_info["name"] = update.name; |
4369
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
540 end |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
541 if mod_groups.set_info(group_id, group_info) then |
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
542 return 204; |
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
543 else |
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
544 return 500; |
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
545 end |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
546 end |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
547 return 404; |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
548 end |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
549 |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
550 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
|
551 -- 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
|
552 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
|
553 if group_id and member_name then |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
554 if mod_groups.remove_member(group_id, member_name) then |
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
555 return 204; |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
556 else |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
557 return 500; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
558 end |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
559 else |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
560 -- Action refers to the group |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
561 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
|
562 end |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
563 |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
564 if not group_id then |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
565 return 400; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
566 end |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
567 |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
568 if not mod_groups.exists(group_id) then |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
569 return 404; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
570 end |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
571 |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
572 if not mod_groups.delete(group_id) then |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
573 return 500; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
574 end |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
575 return 204; |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
576 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
577 |
4371
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
578 local function get_server_info(event) |
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
579 event.response.headers["Content-Type"] = json_content_type; |
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
580 return json.encode({ |
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
581 site_name = site_name; |
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
582 version = prosody.version; |
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
583 }); |
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
584 end |
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
585 |
4576
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
586 local function maybe_export_plain_gauge(mf) |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
587 if mf == nil then |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
588 return nil |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
589 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
590 return mf.data.value |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
591 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
592 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
593 local function maybe_export_plain_counter(mf) |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
594 if mf == nil then |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
595 return nil |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
596 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
597 return { |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
598 since = mf.data._created, |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
599 value = mf.data.value, |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
600 } |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
601 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
602 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
603 local function maybe_export_summed_gauge(mf) |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
604 if mf == nil then |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
605 return nil |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
606 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
607 local sum = 0; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
608 for _, metric in mf:iter_metrics() do |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
609 sum = sum + metric.value; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
610 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
611 return sum; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
612 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
613 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
614 local function get_server_metrics(event) |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
615 event.response.headers["Content-Type"] = json_content_type; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
616 local result = {}; |
4776
13e913471b75
mod_http_admin_api: Ensure freshness of metrics when in manual mode
Kim Alvefur <zash@zash.se>
parents:
4714
diff
changeset
|
617 if manual_stats_collection then |
13e913471b75
mod_http_admin_api: Ensure freshness of metrics when in manual mode
Kim Alvefur <zash@zash.se>
parents:
4714
diff
changeset
|
618 statsmanager.collect(); |
13e913471b75
mod_http_admin_api: Ensure freshness of metrics when in manual mode
Kim Alvefur <zash@zash.se>
parents:
4714
diff
changeset
|
619 end |
4576
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
620 local families = statsmanager.get_metric_registry():get_metric_families(); |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
621 result.memory = maybe_export_plain_gauge(families.process_resident_memory_bytes); |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
622 result.cpu = maybe_export_plain_counter(families.process_cpu_seconds); |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
623 result.c2s = maybe_export_summed_gauge(families["prosody_mod_c2s/connections"]) |
4777
883ad8b0a7c0
mod_http_admin_api: Export total storage use via mod_http_file_share
Kim Alvefur <zash@zash.se>
parents:
4776
diff
changeset
|
624 result.uploads = maybe_export_summed_gauge(families["prosody_mod_http_file_share/total_storage_bytes"]); |
4576
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
625 return json.encode(result); |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
626 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
627 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
628 local function post_server_announcement(event) |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
629 local request = event.request; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
630 if request.headers.content_type ~= json_content_type |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
631 or (not request.body or #request.body == 0) then |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
632 return 400; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
633 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
634 local body = json.decode(event.request.body); |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
635 if not body then |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
636 return 400; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
637 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
638 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
639 if type(body.recipients) ~= "table" and body.recipients ~= "online" and body.recipients ~= "all" then |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
640 return 400; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
641 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
642 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
643 if not body.body or #body.body == 0 then |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
644 return 400; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
645 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
646 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
647 local message = st.message():tag("body"):text(body.body):up(); |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
648 local host = module.host |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
649 message.attr.from = host |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
650 if body.recipients == "online" then |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
651 announce.send_to_online(message, host); |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
652 elseif body.recipients == "all" then |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
653 for username in usermanager.users(host) do |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
654 message.attr.to = username .. "@" .. host |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
655 module:send(st.clone(message)) |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
656 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
657 else |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
658 for _, addr in ipairs(body.recipients) do |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
659 message.attr.to = addr |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
660 module:send(message) |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
661 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
662 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
663 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
664 return 201; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
665 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
666 |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
667 module:provides("http", { |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
668 route = check_auth { |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
669 ["GET /invites"] = list_invites; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
670 ["GET /invites/*"] = get_invite_by_id; |
4374
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
671 ["POST /invites/*"] = create_invite_type; |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
672 ["DELETE /invites/*"] = delete_invite; |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
673 |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
674 ["GET /users"] = list_users; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
675 ["GET /users/*"] = get_user_by_name; |
4516
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
676 ["PUT /users/*"] = update_user; |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
677 ["DELETE /users/*"] = delete_user; |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
678 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
679 ["GET /groups"] = list_groups; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
680 ["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
|
681 ["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
|
682 ["PUT /groups/*"] = update_group; |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
683 ["DELETE /groups/*"] = delete_group; |
4371
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
684 |
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
685 ["GET /server/info"] = get_server_info; |
4576
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
686 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
687 ["GET /server/metrics"] = get_server_metrics; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
688 ["POST /server/announcement"] = post_server_announcement; |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
689 }; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
690 }); |