Software /
code /
prosody-modules
Annotate
mod_http_admin_api/mod_http_admin_api.lua @ 5841:d3b69859553a
mod_password_policy: Change error type from 'cancel' to 'modify'
This makes more sense, as the problem relates to the data that has been
entered, and therefore the request could be retried with different data.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Mon, 08 Jan 2024 17:28:39 +0000 |
parent | 5809:076b79eb747f |
child | 5850:f76909ec1300 |
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 |
5807
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
3 local array = require "util.array"; |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
4 local it = require "util.iterators"; |
5284
5178c13deb78
mod_http_admin_api: Fix missing import
Kim Alvefur <zash@zash.se>
parents:
5283
diff
changeset
|
5 local jid = require "util.jid"; |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 local json = require "util.json"; |
5807
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
7 local set = require "util.set"; |
4516
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
8 local st = require "util.stanza"; |
4576
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
9 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
|
10 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 module:depends("http"); |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 |
4576
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
13 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
|
14 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
|
15 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
|
16 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
|
17 local mod_groups = module:depends("groups_internal"); |
5798
4c3216d9b118
mod_http_admin_api: Include user account status and activity in get_user_info
Matthew Wild <mwild1@gmail.com>
parents:
5710
diff
changeset
|
18 local mod_lastlog2 = module:depends("lastlog2"); |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 |
4363
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
20 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
|
21 |
4371
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
22 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
|
23 |
4776
13e913471b75
mod_http_admin_api: Ensure freshness of metrics when in manual mode
Kim Alvefur <zash@zash.se>
parents:
4714
diff
changeset
|
24 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
|
25 |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 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
|
27 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 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
|
29 |
4516
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
30 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
|
31 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
|
32 |
5798
4c3216d9b118
mod_http_admin_api: Include user account status and activity in get_user_info
Matthew Wild <mwild1@gmail.com>
parents:
5710
diff
changeset
|
33 assert(mod_lastlog2.get_last_active, "Newer version of mod_lastlog2 is required to use this module"); |
4c3216d9b118
mod_http_admin_api: Include user account status and activity in get_user_info
Matthew Wild <mwild1@gmail.com>
parents:
5710
diff
changeset
|
34 |
5802
6ab9e1763f35
mod_http_admin_api: Include information about pending deletion request, if any
Matthew Wild <mwild1@gmail.com>
parents:
5798
diff
changeset
|
35 local deleted_users = module:open_store("accounts_cleanup"); |
6ab9e1763f35
mod_http_admin_api: Include information about pending deletion request, if any
Matthew Wild <mwild1@gmail.com>
parents:
5798
diff
changeset
|
36 |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 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
|
38 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
|
39 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
|
40 return false; |
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 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 if auth_type == "Bearer" then |
4997
1b5869c34026
mod_http_admin_api: Updates for new role auth API in Prosody (trunk/0.13 only)
Matthew Wild <mwild1@gmail.com>
parents:
4956
diff
changeset
|
44 return tokens.get_token_session(auth_data); |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 return nil; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 |
4997
1b5869c34026
mod_http_admin_api: Updates for new role auth API in Prosody (trunk/0.13 only)
Matthew Wild <mwild1@gmail.com>
parents:
4956
diff
changeset
|
49 module:default_permission("prosody:admin", ":access-admin-api"); |
1b5869c34026
mod_http_admin_api: Updates for new role auth API in Prosody (trunk/0.13 only)
Matthew Wild <mwild1@gmail.com>
parents:
4956
diff
changeset
|
50 |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 function check_auth(routes) |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 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
|
53 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
|
54 if not session then |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 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
|
56 return false, 401; |
4997
1b5869c34026
mod_http_admin_api: Updates for new role auth API in Prosody (trunk/0.13 only)
Matthew Wild <mwild1@gmail.com>
parents:
4956
diff
changeset
|
57 end |
5283
cc89c97befe7
mod_http_admin_api: Tweak token session to please module:may()
Kim Alvefur <zash@zash.se>
parents:
5005
diff
changeset
|
58 -- FIXME this should probably live in mod_tokenauth or similar |
cc89c97befe7
mod_http_admin_api: Tweak token session to please module:may()
Kim Alvefur <zash@zash.se>
parents:
5005
diff
changeset
|
59 session.type = "c2s"; |
cc89c97befe7
mod_http_admin_api: Tweak token session to please module:may()
Kim Alvefur <zash@zash.se>
parents:
5005
diff
changeset
|
60 session.full_jid = jid.join(session.username, session.host, session.resource); |
4997
1b5869c34026
mod_http_admin_api: Updates for new role auth API in Prosody (trunk/0.13 only)
Matthew Wild <mwild1@gmail.com>
parents:
4956
diff
changeset
|
61 event.session = session; |
1b5869c34026
mod_http_admin_api: Updates for new role auth API in Prosody (trunk/0.13 only)
Matthew Wild <mwild1@gmail.com>
parents:
4956
diff
changeset
|
62 if not module:may(":access-admin-api", event) then |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 return false, 403; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 return true; |
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 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 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
|
69 routes[route] = function (event, ...) |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 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
|
71 if not permit then |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
72 return code; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
73 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 return handler(event, ...); |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 end; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
76 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 return routes; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
78 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 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
|
81 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
|
82 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
|
83 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
|
84 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
|
85 return { |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 id = token_info.token; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
87 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
|
88 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
|
89 inviter = token_info.inviter; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
90 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
|
91 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
|
92 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
|
93 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
|
94 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
|
95 groups = groups; |
5ca36c36ab05
mod_http_admin_api: Expose new invite properties: groups, source and reusable
Matthew Wild <mwild1@gmail.com>
parents:
4345
diff
changeset
|
96 source = source; |
4378
d4e0e4d22fc7
mod_http_admin_api: Add 'reset' property to returned invite objects
Matthew Wild <mwild1@gmail.com>
parents:
4375
diff
changeset
|
97 reset = reset; |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
98 }; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
99 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
100 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
101 function list_invites(event) |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
102 local invites_list = {}; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
103 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
|
104 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
|
105 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
106 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
|
107 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
|
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; |
4350
270025e76bf8
mod_http_admin_api: Use json.encode_array() when returning an array
Matthew Wild <mwild1@gmail.com>
parents:
4349
diff
changeset
|
111 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
|
112 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
113 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
114 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
|
115 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
|
116 if not invite then |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
117 return 404; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
118 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
119 |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
120 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
|
121 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
|
122 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
123 |
4374
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
124 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
|
125 local options; |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
126 |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
127 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
|
128 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
|
129 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
|
130 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
|
131 return 400; |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
132 end |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
133 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
|
134 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
|
135 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
|
136 return 400; |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
137 end |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
138 else |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
139 options = {}; |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
140 end |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
141 |
4396
de55e1475808
mod_http_admin_api: re-add information about invite creator
Jonas Schäfer <jonas@wielicki.name>
parents:
4393
diff
changeset
|
142 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
|
143 |
4374
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
144 local invite; |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
145 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
|
146 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
|
147 return 400; |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
148 end |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
149 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
|
150 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
|
151 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
|
152 return 400; |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
153 end |
4396
de55e1475808
mod_http_admin_api: re-add information about invite creator
Jonas Schäfer <jonas@wielicki.name>
parents:
4393
diff
changeset
|
154 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
|
155 source = source; |
de55e1475808
mod_http_admin_api: re-add information about invite creator
Jonas Schäfer <jonas@wielicki.name>
parents:
4393
diff
changeset
|
156 }, options.ttl); |
4374
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
157 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
|
158 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
|
159 source = source; |
4375
03cf0d41b272
mod_http_admin_api: Allow specifying groups in account invite
Matthew Wild <mwild1@gmail.com>
parents:
4374
diff
changeset
|
160 groups = options.groups; |
03cf0d41b272
mod_http_admin_api: Allow specifying groups in account invite
Matthew Wild <mwild1@gmail.com>
parents:
4374
diff
changeset
|
161 }, options.ttl); |
4374
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
162 else |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
163 return 400; |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
164 end |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
165 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
|
166 return 500; |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
167 end |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
168 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
|
169 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
|
170 end |
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
171 |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
172 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
|
173 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
|
174 return 404; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
175 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
176 return 200; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
177 end |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
178 |
5804
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5802
diff
changeset
|
179 local function get_user_avatar_info(username) |
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5802
diff
changeset
|
180 local pep_service = mod_pep.get_pep_service(username); |
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5802
diff
changeset
|
181 local ok, _, avatar_item = pep_service:get_last_item("urn:xmpp:avatar:metadata", true); |
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5802
diff
changeset
|
182 avatar_item = avatar_item and avatar_item:get_child("metadata", "urn:xmpp:avatar:metadata"); |
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5802
diff
changeset
|
183 if not ok or not avatar_item then return; end |
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5802
diff
changeset
|
184 |
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5802
diff
changeset
|
185 local avatar_info = {}; |
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5802
diff
changeset
|
186 |
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5802
diff
changeset
|
187 for avatar in avatar_item:childtags("info") do |
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5802
diff
changeset
|
188 table.insert(avatar_info, { |
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5802
diff
changeset
|
189 bytes = tonumber(avatar.attr.bytes); |
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5802
diff
changeset
|
190 hash = avatar.attr.id; |
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5802
diff
changeset
|
191 type = avatar.attr.type; |
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5802
diff
changeset
|
192 width = tonumber(avatar.attr.width); |
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5802
diff
changeset
|
193 height = tonumber(avatar.attr.height); |
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5802
diff
changeset
|
194 }); |
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5802
diff
changeset
|
195 end |
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5802
diff
changeset
|
196 |
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5802
diff
changeset
|
197 return avatar_info; |
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5802
diff
changeset
|
198 end |
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5802
diff
changeset
|
199 |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
200 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
|
201 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
|
202 return nil; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
203 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
204 local display_name; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
205 do |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
206 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
|
207 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
|
208 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
|
209 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
|
210 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
211 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
212 |
5005
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
213 local primary_role, secondary_roles, legacy_roles; |
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
214 if usermanager.get_user_role then |
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
215 primary_role = usermanager.get_user_role(username, module.host); |
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
216 secondary_roles = array.collect(it.keys(usermanager.get_user_secondary_roles(username, module.host))); |
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
217 elseif usermanager.get_user_roles then -- COMPAT w/0.12 |
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
218 legacy_roles = array(); |
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
219 local roles_map = usermanager.get_user_roles(username, module.host); |
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
220 for role_name in pairs(roles_map) do |
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
221 legacy_roles:push(role_name); |
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
222 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
|
223 end |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
224 |
5798
4c3216d9b118
mod_http_admin_api: Include user account status and activity in get_user_info
Matthew Wild <mwild1@gmail.com>
parents:
5710
diff
changeset
|
225 local enabled = true; -- Assume all enabled if on a version without is_enabled |
4c3216d9b118
mod_http_admin_api: Include user account status and activity in get_user_info
Matthew Wild <mwild1@gmail.com>
parents:
5710
diff
changeset
|
226 if usermanager.user_is_enabled then |
4c3216d9b118
mod_http_admin_api: Include user account status and activity in get_user_info
Matthew Wild <mwild1@gmail.com>
parents:
5710
diff
changeset
|
227 enabled = usermanager.user_is_enabled(username, module.host); |
4c3216d9b118
mod_http_admin_api: Include user account status and activity in get_user_info
Matthew Wild <mwild1@gmail.com>
parents:
5710
diff
changeset
|
228 end |
4c3216d9b118
mod_http_admin_api: Include user account status and activity in get_user_info
Matthew Wild <mwild1@gmail.com>
parents:
5710
diff
changeset
|
229 |
4362
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
230 return { |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
231 username = username; |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
232 display_name = display_name; |
5005
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
233 role = primary_role and primary_role.name or nil; |
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
234 secondary_roles = secondary_roles; |
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
235 roles = legacy_roles; -- COMPAT w/0.12 |
5798
4c3216d9b118
mod_http_admin_api: Include user account status and activity in get_user_info
Matthew Wild <mwild1@gmail.com>
parents:
5710
diff
changeset
|
236 enabled = enabled; |
4c3216d9b118
mod_http_admin_api: Include user account status and activity in get_user_info
Matthew Wild <mwild1@gmail.com>
parents:
5710
diff
changeset
|
237 last_active = mod_lastlog2.get_last_active(username); |
5805
5621dece3ee4
mod_http_admin_api: Only include user deletion_request if account is disabled
Matthew Wild <mwild1@gmail.com>
parents:
5804
diff
changeset
|
238 deletion_request = not enabled and deleted_users:get(username) or nil; |
5804
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5802
diff
changeset
|
239 avatar_info = get_user_avatar_info(username); |
4362
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
240 }; |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
241 end |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
242 |
4363
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
243 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
|
244 local info = { |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
245 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
|
246 ip = session.ip; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
247 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
|
248 status = { |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
249 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
|
250 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
|
251 }; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
252 features = { |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
253 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
|
254 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
|
255 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
|
256 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
|
257 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
|
258 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
|
259 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
|
260 }; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
261 queues = {}; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
262 }; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
263 -- CSI |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
264 if session.state then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
265 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
|
266 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
|
267 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
268 -- Smacks queue |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
269 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
|
270 info.queues.awaiting_acks = session.last_requested_h - session.last_acknowledged_stanza; |
4956
65870d42a7b1
mod_http_admin_api: Update for 0.12 changes to mod_smacks
Kim Alvefur <zash@zash.se>
parents:
4925
diff
changeset
|
271 elseif session.outgoing_stanza_queue then |
65870d42a7b1
mod_http_admin_api: Update for 0.12 changes to mod_smacks
Kim Alvefur <zash@zash.se>
parents:
4925
diff
changeset
|
272 -- New mod_smacks |
65870d42a7b1
mod_http_admin_api: Update for 0.12 changes to mod_smacks
Kim Alvefur <zash@zash.se>
parents:
4925
diff
changeset
|
273 info.queues.awaiting_acks = session.outgoing_stanza_queue:count_unacked(); |
4363
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
274 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
275 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
|
276 info.push_info = { |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
277 id = session.push_identifier; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
278 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
|
279 }; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
280 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
281 return info; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
282 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
283 |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
284 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
|
285 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
|
286 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
|
287 local omemo_status = {}; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
288 local omemo_devices; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
289 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
|
290 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
|
291 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
|
292 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
|
293 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
|
294 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
295 if device_list then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
296 omemo_devices = {}; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
297 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
|
298 any_device = true; |
4363
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
299 local device_info = {}; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
300 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
|
301 if device_id then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
302 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
|
303 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
|
304 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
|
305 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
|
306 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
|
307 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
|
308 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
|
309 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
|
310 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
|
311 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
|
312 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
|
313 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
|
314 device_info.valid = true; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
315 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
316 end |
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 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
|
320 device_info.valid = false; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
321 everything_valid = false; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
322 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
323 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
|
324 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
325 |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
326 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
|
327 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
|
328 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
|
329 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
|
330 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
|
331 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
|
332 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
|
333 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
|
334 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
335 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
336 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
|
337 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
|
338 everything_valid = false; |
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 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
341 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
|
342 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
|
343 return { |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
344 status = omemo_status; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
345 devices = omemo_devices; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
346 }; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
347 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
348 |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
349 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
|
350 local debug_info = { |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
351 time = os.time(); |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
352 }; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
353 -- Online sessions |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
354 do |
5005
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
355 local user_sessions = prosody.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
|
356 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
|
357 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
|
358 end |
4363
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
359 local sessions = {}; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
360 if user_sessions then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
361 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
|
362 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
|
363 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
364 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
365 debug_info.sessions = sessions; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
366 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
367 -- Push registrations |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
368 do |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
369 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
|
370 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
|
371 local push_registrations = {}; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
372 if services then |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
373 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
|
374 push_registrations[identifier] = { |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
375 since = push_info.timestamp; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
376 service = push_info.jid; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
377 node = push_info.node; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
378 error_count = push_errors[identifier] or 0; |
4924
55e3ca6bdfd1
mod_http_admin_api: Fix client -> client_id (the actual field name)
Matthew Wild <mwild1@gmail.com>
parents:
4777
diff
changeset
|
379 client_id = push_info.client_id; |
4925
404a22d52376
mod_http_admin_api: Indicate whether a given push registration uses encryption
Matthew Wild <mwild1@gmail.com>
parents:
4924
diff
changeset
|
380 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
|
381 }; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
382 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
383 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
384 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
|
385 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
386 -- OMEMO |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
387 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
|
388 |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
389 return debug_info; |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
390 end |
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
391 |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
392 function list_users(event) |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
393 local user_list = {}; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
394 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
|
395 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
|
396 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
397 |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
398 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
|
399 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
|
400 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
401 |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
402 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
|
403 local property |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
404 do |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
405 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
|
406 if name then |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
407 username = name; |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
408 property = sub_path; |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
409 end |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
410 end |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
411 |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
412 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
|
413 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
|
414 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
|
415 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
|
416 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
|
417 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
|
418 end |
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
419 |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
420 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
|
421 if not user_info then |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
422 return 404; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
423 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
424 |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
425 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
|
426 return json.encode(user_info); |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
427 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
428 |
5806
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
429 local user_attribute_writers = { |
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
430 enabled = function (username, enabled) |
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
431 local ok, err; |
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
432 if enabled == true then |
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
433 ok, err = usermanager.enable_user(username, module.host); |
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
434 elseif enabled == false then |
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
435 ok, err = usermanager.disable_user(username, module.host); |
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
436 else |
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
437 ok, err = nil, "Invalid value provided for 'enabled'"; |
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
438 end |
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
439 if not ok then |
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
440 module:log("error", "Unable to %s user '%s': %s", enabled and "enable" or "disable", username, err); |
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
441 return nil, err; |
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
442 end |
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
443 return true; |
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
444 end; |
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
445 }; |
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
446 local writable_user_attributes = set.new(array.collect(it.keys(user_attribute_writers))); |
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
447 |
5807
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
448 function patch_user(event, username) |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
449 if not username then return; end |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
450 |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
451 local current_user = get_user_info(username); |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
452 if not current_user then return 404; end |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
453 |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
454 local request = event.request; |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
455 if request.headers.content_type ~= json_content_type |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
456 or (not request.body or #request.body == 0) then |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
457 return 400; |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
458 end |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
459 local new_user = json.decode(event.request.body); |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
460 if not new_user then |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
461 return 400; |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
462 end |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
463 |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
464 local updated_attributes = set.new(array.collect(it.keys(new_user))); |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
465 if not (updated_attributes - writable_user_attributes):empty() then |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
466 module:log("warn", "Unable to service PATCH user request, unsupported attributes: %s", (updated_attributes - writable_user_attributes)); |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
467 return 400; |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
468 end |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
469 |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
470 if new_user.enabled ~= nil and new_user.enabled ~= current_user.enabled then |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
471 if not user_attribute_writers.enabled(username, new_user.enabled) then |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
472 return 500; |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
473 end |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
474 end |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
475 |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
476 return 200; |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
477 end |
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
478 |
4516
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
479 function update_user(event, username) |
5809
076b79eb747f
mod_http_admin_api: Abort request if no valid username
Matthew Wild <mwild1@gmail.com>
parents:
5808
diff
changeset
|
480 if not username then |
076b79eb747f
mod_http_admin_api: Abort request if no valid username
Matthew Wild <mwild1@gmail.com>
parents:
5808
diff
changeset
|
481 return 400; |
076b79eb747f
mod_http_admin_api: Abort request if no valid username
Matthew Wild <mwild1@gmail.com>
parents:
5808
diff
changeset
|
482 end |
4516
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
483 |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
484 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
|
485 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
|
486 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
|
487 return 400; |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
488 end |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
489 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
|
490 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
|
491 return 400; |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
492 end |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
493 |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
494 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
|
495 return 400; |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
496 end |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
497 |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
498 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
|
499 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
|
500 -- TODO: publish |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
501 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
|
502 :text_tag("nick", new_user.display_name, { xmlns = xmlns_nick }); |
5808
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
503 pep_service:publish(xmlns_nick, true, "current", nick_item, { |
4516
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
504 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
|
505 _defaults_only = true; |
5808
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
506 }); |
4516
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
507 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
|
508 |
5005
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
509 if new_user.role then |
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
510 if not usermanager.set_user_role then |
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
511 return 500, "feature-not-implemented"; |
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
512 end |
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
513 if not usermanager.set_user_role(username, module.host, new_user.role) then |
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
514 module:log("error", "failed to set role %s for %s", new_user.role, username); |
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
515 return 500; |
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
516 end |
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
517 end |
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
518 |
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
519 if new_user.roles then -- COMPAT w/0.12 |
4997
1b5869c34026
mod_http_admin_api: Updates for new role auth API in Prosody (trunk/0.13 only)
Matthew Wild <mwild1@gmail.com>
parents:
4956
diff
changeset
|
520 if not usermanager.set_user_roles then |
4517
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
521 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
|
522 end |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
523 |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
524 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
|
525 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
|
526 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
|
527 end |
5808
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
528 local user_jid = username.."@"..module.host; |
4997
1b5869c34026
mod_http_admin_api: Updates for new role auth API in Prosody (trunk/0.13 only)
Matthew Wild <mwild1@gmail.com>
parents:
4956
diff
changeset
|
529 if not usermanager.set_user_roles(username, module.host, backend_roles) then |
5808
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
530 module:log("error", "failed to set roles %q for %s", backend_roles, user_jid) |
4517
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
531 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
|
532 end |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
533 end |
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
534 |
5806
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
535 if new_user.enabled ~= nil then |
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
536 if not user_attribute_writers.enabled(username, new_user.enabled) then |
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
537 return 500; |
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
538 end |
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
539 end |
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5805
diff
changeset
|
540 |
4516
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
541 return 200; |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
542 end |
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
543 |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
544 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
|
545 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
|
546 return 404; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
547 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
548 return 200; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
549 end |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
550 |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
551 function list_groups(event) |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
552 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
|
553 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
|
554 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
|
555 table.insert(group_list, { |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
556 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
|
557 name = group_info.name; |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
558 members = mod_groups.get_members(group_id); |
5710
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
559 chats = mod_groups.get_group_chats(group_id); |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
560 }); |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
561 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
562 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
563 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
|
564 return json.encode_array(group_list); |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
565 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
566 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
567 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
|
568 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
|
569 if not group then |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
570 return 404; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
571 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
572 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
573 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
|
574 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
575 return json.encode({ |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
576 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
|
577 name = group.name; |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
578 members = mod_groups.get_members(group_id); |
5710
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
579 chats = mod_groups.get_group_chats(group_id); |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
580 }); |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
581 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
582 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
583 function create_group(event) |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
584 local request = event.request; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
585 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
|
586 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
|
587 return 400; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
588 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
589 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
|
590 if not group then |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
591 return 400; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
592 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
593 |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
594 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
|
595 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
|
596 return 400; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
597 end |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
598 |
4390
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
599 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
|
600 |
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
601 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
|
602 { |
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
603 name = group.name; |
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
604 }, |
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
605 create_muc |
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
606 ); |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
607 if not group_id then |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
608 return 500; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
609 end |
4361
7f1f3b79d991
mod_http_admin_api: Return new group object on successful creation
Matthew Wild <mwild1@gmail.com>
parents:
4360
diff
changeset
|
610 |
7f1f3b79d991
mod_http_admin_api: Return new group object on successful creation
Matthew Wild <mwild1@gmail.com>
parents:
4360
diff
changeset
|
611 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
|
612 |
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
613 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
|
614 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
|
615 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
|
616 name = info.name; |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
617 members = {}; |
5710
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
618 chats = {}; |
4361
7f1f3b79d991
mod_http_admin_api: Return new group object on successful creation
Matthew Wild <mwild1@gmail.com>
parents:
4360
diff
changeset
|
619 }); |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
620 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
621 |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
622 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
|
623 -- Add member |
5808
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
624 do |
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
625 local group_id, member_name = group:match("^([^/]+)/members/([^/]+)$"); |
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
626 if group_id and member_name then |
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
627 if not mod_groups.add_member(group_id, member_name) then |
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
628 return 500; |
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
629 end |
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
630 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
|
631 end |
4369
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
632 end |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
633 |
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
634 local group_id = group:match("^([^/]+)$") |
5808
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
635 if not group_id then return 404; end |
4369
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
636 |
5808
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
637 local request = event.request; |
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
638 if request.headers.content_type ~= json_content_type or (not request.body or #request.body == 0) then |
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
639 return 400; |
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
640 end |
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
641 |
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
642 local update = json.decode(event.request.body); |
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
643 if not update then |
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
644 return 400; |
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
645 end |
4369
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
646 |
5808
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
647 local group_info = mod_groups.get_info(group_id); |
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
648 if not group_info then |
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
649 return 404; |
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
650 end |
4369
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
651 |
5808
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
652 if update.name then |
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
653 group_info["name"] = update.name; |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
654 end |
5808
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
655 if not mod_groups.set_info(group_id, group_info) then |
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
656 return 500; |
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
657 end |
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
658 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
|
659 end |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
660 |
5710
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
661 function extend_group(event, subpath) |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
662 -- Add group chat |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
663 local group_id = subpath:match("^([^/]+)/chats$"); |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
664 if group_id then |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
665 local muc_params = json.decode(event.request.body); |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
666 if not muc_params then |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
667 return 400; |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
668 end |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
669 local muc = mod_groups.add_group_chat(group_id, muc_params.name); |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
670 if not muc then |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
671 return 500; |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
672 end |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
673 return json.encode(muc); |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
674 end |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
675 |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
676 return 404; |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
677 end |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
678 |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
679 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
|
680 -- Check if this is a membership deletion and handle it |
5710
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
681 local group_id, sub_resource_type, sub_resource_id = subpath:match("^([^/]+)/([^/]+)/([^/]+)$"); |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
682 if group_id then |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
683 -- Operation is on a sub-resource |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
684 if sub_resource_type == "members" then |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
685 if mod_groups.remove_member(group_id, sub_resource_id) then |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
686 return 204; |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
687 else |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
688 return 500; |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
689 end |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
690 elseif sub_resource_type == "chats" then |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
691 if mod_groups.remove_group_chat(group_id, sub_resource_id) then |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
692 return 204; |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
693 else |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
694 return 500; |
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
695 end |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
696 else |
5710
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
697 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
|
698 end |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
699 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
|
700 -- 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
|
701 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
|
702 end |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
703 |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
704 if not group_id then |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
705 return 400; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
706 end |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
707 |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
708 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
|
709 return 404; |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
710 end |
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
711 |
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
712 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
|
713 return 500; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
714 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
|
715 return 204; |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
716 end |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
717 |
4371
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
718 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
|
719 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
|
720 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
|
721 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
|
722 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
|
723 }); |
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
724 end |
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
725 |
4576
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
726 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
|
727 if mf == nil then |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
728 return nil |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
729 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
730 return mf.data.value |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
731 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
732 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
733 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
|
734 if mf == nil then |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
735 return nil |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
736 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
737 return { |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
738 since = mf.data._created, |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
739 value = mf.data.value, |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
740 } |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
741 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
742 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
743 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
|
744 if mf == nil then |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
745 return nil |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
746 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
747 local sum = 0; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
748 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
|
749 sum = sum + metric.value; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
750 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
751 return sum; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
752 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
753 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
754 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
|
755 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
|
756 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
|
757 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
|
758 statsmanager.collect(); |
13e913471b75
mod_http_admin_api: Ensure freshness of metrics when in manual mode
Kim Alvefur <zash@zash.se>
parents:
4714
diff
changeset
|
759 end |
4576
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
760 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
|
761 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
|
762 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
|
763 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
|
764 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
|
765 return json.encode(result); |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
766 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
767 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
768 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
|
769 local request = event.request; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
770 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
|
771 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
|
772 return 400; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
773 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
774 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
|
775 if not body then |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
776 return 400; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
777 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
778 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
779 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
|
780 return 400; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
781 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
782 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
783 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
|
784 return 400; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
785 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
786 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
787 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
|
788 local host = module.host |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
789 message.attr.from = host |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
790 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
|
791 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
|
792 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
|
793 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
|
794 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
|
795 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
|
796 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
797 else |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
798 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
|
799 message.attr.to = addr |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
800 module:send(message) |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
801 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
802 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
803 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
804 return 201; |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
805 end |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
806 |
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
807 module:provides("http", { |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
808 route = check_auth { |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
809 ["GET /invites"] = list_invites; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
810 ["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
|
811 ["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
|
812 ["DELETE /invites/*"] = delete_invite; |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
813 |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
814 ["GET /users"] = list_users; |
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
815 ["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
|
816 ["PUT /users/*"] = update_user; |
5807
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5806
diff
changeset
|
817 ["PATCH /users/*"] = patch_user; |
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
818 ["DELETE /users/*"] = delete_user; |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
819 |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
820 ["GET /groups"] = list_groups; |
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
821 ["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
|
822 ["POST /groups"] = create_group; |
5710
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
823 ["POST /groups/*"] = extend_group; |
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
824 ["PUT /groups/*"] = update_group; |
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
825 ["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
|
826 |
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
827 ["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
|
828 |
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
829 ["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
|
830 ["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
|
831 }; |
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
832 }); |