Mercurial > prosody-modules
annotate mod_http_admin_api/mod_http_admin_api.lua @ 4942:e7b9bc629ecc
mod_rest: Add special handling to catch MAM results from remote hosts
Makes MAM queries to remote hosts works.
As the comment says, MAM results from users' local archives or local
MUCs are returned via origin.send() which is provided in the event and
thus already worked. Results from remote hosts go via normal stanza
routing and events, which need this extra handling to catch.
This pattern of iq-set, message+, iq-result is generally limited to MAM.
Closest similar thing might be MUC join, but to really handle that you
would need the webhook callback mechanism.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 16 May 2022 19:47:09 +0200 |
parents | 404a22d52376 |
children | 65870d42a7b1 |
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; |
4925
55e3ca6bdfd1
mod_http_admin_api: Fix client -> client_id (the actual field name)
Matthew Wild <mwild1@gmail.com>
parents:
4777
diff
changeset
|
333 client_id = push_info.client_id; |
4926
404a22d52376
mod_http_admin_api: Indicate whether a given push registration uses encryption
Matthew Wild <mwild1@gmail.com>
parents:
4925
diff
changeset
|
334 encryption = not not push_info.encryption; |
4363
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
335 }; |
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 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
338 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
|
339 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
340 -- OMEMO |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
341 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
|
342 |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
343 return debug_info; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
344 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
345 |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
346 function list_users(event) |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
347 local user_list = {}; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
348 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
|
349 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
|
350 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
351 |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
352 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
|
353 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
|
354 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
355 |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
356 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
|
357 local property |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
358 do |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
359 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
|
360 if name then |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
361 username = name; |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
362 property = sub_path; |
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 end |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
365 |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
366 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
|
367 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
|
368 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
|
369 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
|
370 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
|
371 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
|
372 end |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
373 |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
374 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
|
375 if not user_info then |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
376 return 404; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
377 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
378 |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
379 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
|
380 return json.encode(user_info); |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
381 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
382 |
4516
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
383 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
|
384 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
|
385 |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
386 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
|
387 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
|
388 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
|
389 return 400; |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
390 end |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
391 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
|
392 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
|
393 return 400; |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
394 end |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
395 |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
396 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
|
397 return 400; |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
398 end |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
399 |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
400 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
|
401 |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
402 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
|
403 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
|
404 -- TODO: publish |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
405 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
|
406 :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
|
407 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
|
408 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
|
409 _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
|
410 }) then |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
411 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
|
412 end |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
413 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
|
414 |
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 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
|
416 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
|
417 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
|
418 end |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
419 |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
420 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
|
421 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
|
422 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
|
423 end |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
424 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
|
425 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
|
426 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
|
427 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
|
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 end |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
430 |
4516
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
431 return 200; |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
432 end |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
433 |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
434 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
|
435 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
|
436 return 404; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
437 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
438 return 200; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
439 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
440 |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
441 function list_groups(event) |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
442 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
|
443 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
|
444 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
|
445 table.insert(group_list, { |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
446 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
|
447 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
|
448 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
|
449 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
|
450 }); |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
451 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
452 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
453 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
|
454 return json.encode_array(group_list); |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
455 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
456 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
457 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
|
458 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
|
459 if not group then |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
460 return 404; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
461 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
462 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
463 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
|
464 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
465 return json.encode({ |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
466 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
|
467 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
|
468 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
|
469 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
|
470 }); |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
471 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
472 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
473 function create_group(event) |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
474 local request = event.request; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
475 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
|
476 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
|
477 return 400; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
478 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
479 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
|
480 if not group then |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
481 return 400; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
482 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
483 |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
484 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
|
485 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
|
486 return 400; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
487 end |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
488 |
4390
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
489 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
|
490 |
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
491 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
|
492 { |
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
493 name = group.name; |
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
494 }, |
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
495 create_muc |
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
496 ); |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
497 if not group_id then |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
498 return 500; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
499 end |
4361
7f1f3b79d991
mod_http_admin_api: Return new group object on successful creation
Matthew Wild <mwild1@gmail.com>
parents:
4360
diff
changeset
|
500 |
7f1f3b79d991
mod_http_admin_api: Return new group object on successful creation
Matthew Wild <mwild1@gmail.com>
parents:
4360
diff
changeset
|
501 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
|
502 |
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
503 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
|
504 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
|
505 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
|
506 name = info.name; |
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
507 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
|
508 members = {}; |
4361
7f1f3b79d991
mod_http_admin_api: Return new group object on successful creation
Matthew Wild <mwild1@gmail.com>
parents:
4360
diff
changeset
|
509 }); |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
510 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
511 |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
512 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
|
513 -- 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
|
514 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
|
515 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
|
516 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
|
517 return 500; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
518 end |
4369
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
519 return 204; |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
520 end |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
521 |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
522 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
|
523 if group_id then |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
524 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
|
525 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
|
526 return 400; |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
527 end |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
528 |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
529 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
|
530 if not update then |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
531 return 400; |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
532 end |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
533 |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
534 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
|
535 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
|
536 return 404; |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
537 end |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
538 |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
539 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
|
540 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
|
541 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
|
542 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
|
543 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
|
544 else |
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
545 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
|
546 end |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
547 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
|
548 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
|
549 end |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
550 |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
551 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
|
552 -- 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
|
553 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
|
554 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
|
555 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
|
556 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
|
557 else |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
558 return 500; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
559 end |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
560 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
|
561 -- 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
|
562 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
|
563 end |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
564 |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
565 if not group_id then |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
566 return 400; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
567 end |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
568 |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
569 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
|
570 return 404; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
571 end |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
572 |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
573 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
|
574 return 500; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
575 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
|
576 return 204; |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
577 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
578 |
4371
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
579 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
|
580 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
|
581 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
|
582 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
|
583 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
|
584 }); |
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
585 end |
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
586 |
4576
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
587 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
|
588 if mf == nil then |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
589 return nil |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
590 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
591 return mf.data.value |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
592 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
593 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
594 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
|
595 if mf == nil then |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
596 return nil |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
597 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
598 return { |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
599 since = mf.data._created, |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
600 value = mf.data.value, |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
601 } |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
602 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
603 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
604 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
|
605 if mf == nil then |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
606 return nil |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
607 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
608 local sum = 0; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
609 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
|
610 sum = sum + metric.value; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
611 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
612 return sum; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
613 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
614 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
615 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
|
616 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
|
617 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
|
618 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
|
619 statsmanager.collect(); |
13e913471b75
mod_http_admin_api: Ensure freshness of metrics when in manual mode
Kim Alvefur <zash@zash.se>
parents:
4714
diff
changeset
|
620 end |
4576
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
621 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
|
622 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
|
623 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
|
624 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
|
625 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
|
626 return json.encode(result); |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
627 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
628 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
629 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
|
630 local request = event.request; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
631 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
|
632 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
|
633 return 400; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
634 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
635 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
|
636 if not body then |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
637 return 400; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
638 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
639 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
640 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
|
641 return 400; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
642 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
643 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
644 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
|
645 return 400; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
646 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
647 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
648 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
|
649 local host = module.host |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
650 message.attr.from = host |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
651 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
|
652 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
|
653 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
|
654 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
|
655 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
|
656 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
|
657 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
658 else |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
659 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
|
660 message.attr.to = addr |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
661 module:send(message) |
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 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
664 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
665 return 201; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
666 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
667 |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
668 module:provides("http", { |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
669 route = check_auth { |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
670 ["GET /invites"] = list_invites; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
671 ["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
|
672 ["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
|
673 ["DELETE /invites/*"] = delete_invite; |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
674 |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
675 ["GET /users"] = list_users; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
676 ["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
|
677 ["PUT /users/*"] = update_user; |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
678 ["DELETE /users/*"] = delete_user; |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
679 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
680 ["GET /groups"] = list_groups; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
681 ["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
|
682 ["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
|
683 ["PUT /groups/*"] = update_group; |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
684 ["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
|
685 |
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
686 ["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
|
687 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
688 ["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
|
689 ["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
|
690 }; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
691 }); |