Mercurial > prosody-modules
annotate mod_http_admin_api/mod_http_admin_api.lua @ 6556:7477e97a9045
mod_firewall: Apply pre-reload state before re-reading config
This change makes load/reload a bit more robust. module.load() runs before
module.restore() and it reads from the config and updates the state (if
needed).
However, after this, module.restore() could run and apply the old state again.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Sun, 24 May 2026 20:03:20 +0100 |
| parents | 1fc38a840baa |
| children |
| 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 |
|
5784
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
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:
5783
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"; |
|
5784
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
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"); |
|
6236
4b52d579bc70
mod_http_admin_api: Switch from mod_lastlog2 to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
5895
diff
changeset
|
18 local mod_account_activity = module:depends("account_activity"); |
|
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 |
|
5779
6ab9e1763f35
mod_http_admin_api: Include information about pending deletion request, if any
Matthew Wild <mwild1@gmail.com>
parents:
5775
diff
changeset
|
33 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:
5775
diff
changeset
|
34 |
|
6329
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
35 local errors = require "util.error".init(module.name, "https://prosody.im/protocol/errors", { |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
36 ["feature-not-implemented"] = { "cancel", "feature-not-implemented", "Feature not implemented" }; |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
37 ["unknown-invite-type"] = { "cancel", "bad-request", "Unknown invitation type" }; |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
38 ["invite-creation-failed"] = { "cancel", "internal-server-error", "Failed to create invitation" }; |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
39 ["invalid-json"] = { "modify", "bad-request", "Invalid JSON submitted" }; |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
40 ["user-not-found"] = { "cancel", "item-not-found", "User not found", "user-not-found" }; |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
41 |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
42 -- From mod_groups_internal |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
43 ["group-name-required"] = { "modify", "bad-request", "Group name required", "group-name-required" }; |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
44 ["group-not-found"] = { "cancel", "item-not-found", "Group not found", "group-not-found" }; |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
45 |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
46 -- Generic |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
47 ["conflict"] = { "cancel", "conflict", "Resource already exists" }; |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
48 ["internal-server-error"] = { "wait", "internal-server-error", "Internal server error" }; |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
49 ["service-unavailable"] = { "cancel", "service-unavailable", "Unable to perform the requested action" }; |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
50 ["bad-request"] = { "cancel", "bad-request", "Invalid request" }; |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
51 }); |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
52 |
|
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 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
|
54 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
|
55 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
|
56 return false; |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 end |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 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
|
60 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
|
61 end |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 return nil; |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 end |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 |
|
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
|
65 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
|
66 |
|
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 function check_auth(routes) |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 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
|
69 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
|
70 if not session then |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 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
|
72 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
|
73 end |
|
5283
cc89c97befe7
mod_http_admin_api: Tweak token session to please module:may()
Kim Alvefur <zash@zash.se>
parents:
5005
diff
changeset
|
74 -- 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
|
75 session.type = "c2s"; |
|
cc89c97befe7
mod_http_admin_api: Tweak token session to please module:may()
Kim Alvefur <zash@zash.se>
parents:
5005
diff
changeset
|
76 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
|
77 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
|
78 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
|
79 return false, 403; |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 end |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
81 return true; |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
82 end |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
83 |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 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
|
85 routes[route] = function (event, ...) |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 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
|
87 if not permit then |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
88 return code; |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 end |
|
6332
1fc38a840baa
mod_http_admin_api: Pass util.error object as response when request fails
Matthew Wild <mwild1@gmail.com>
parents:
6331
diff
changeset
|
90 local ret, err = errors.coerce(handler(event, ...)); |
|
1fc38a840baa
mod_http_admin_api: Pass util.error object as response when request fails
Matthew Wild <mwild1@gmail.com>
parents:
6331
diff
changeset
|
91 return ret or err; |
|
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
92 end; |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
93 end |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
94 return routes; |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
95 end |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
96 |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
97 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
|
98 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
|
99 local groups = additional_data and additional_data.groups or nil; |
|
5888
432efc39572f
mod_http_admin_api: Return roles for existing invites, if any
Matthew Wild <mwild1@gmail.com>
parents:
5887
diff
changeset
|
100 local roles = additional_data and additional_data.roles or nil; |
|
4349
5ca36c36ab05
mod_http_admin_api: Expose new invite properties: groups, source and reusable
Matthew Wild <mwild1@gmail.com>
parents:
4345
diff
changeset
|
101 local source = additional_data and additional_data.source or nil; |
|
5895
095030677ae6
mod_http_admin_api: Support storing free-form text note with invitations
Matthew Wild <mwild1@gmail.com>
parents:
5891
diff
changeset
|
102 local note = additional_data and additional_data.note or nil; |
|
4378
d4e0e4d22fc7
mod_http_admin_api: Add 'reset' property to returned invite objects
Matthew Wild <mwild1@gmail.com>
parents:
4375
diff
changeset
|
103 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
|
104 return { |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
105 id = token_info.token; |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
106 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
|
107 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
|
108 inviter = token_info.inviter; |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
109 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
|
110 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
|
111 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
|
112 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
|
113 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
|
114 groups = groups; |
|
5888
432efc39572f
mod_http_admin_api: Return roles for existing invites, if any
Matthew Wild <mwild1@gmail.com>
parents:
5887
diff
changeset
|
115 roles = roles; |
|
4349
5ca36c36ab05
mod_http_admin_api: Expose new invite properties: groups, source and reusable
Matthew Wild <mwild1@gmail.com>
parents:
4345
diff
changeset
|
116 source = source; |
|
4378
d4e0e4d22fc7
mod_http_admin_api: Add 'reset' property to returned invite objects
Matthew Wild <mwild1@gmail.com>
parents:
4375
diff
changeset
|
117 reset = reset; |
|
5895
095030677ae6
mod_http_admin_api: Support storing free-form text note with invitations
Matthew Wild <mwild1@gmail.com>
parents:
5891
diff
changeset
|
118 note = note; |
|
4343
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 end |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
121 |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
122 function list_invites(event) |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
123 local invites_list = {}; |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
124 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
|
125 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
|
126 end |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
127 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
|
128 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
|
129 end); |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
130 |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
131 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
|
132 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
|
133 end |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
134 |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
135 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
|
136 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
|
137 if not invite then |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
138 return nil, "item-not-found"; |
|
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
139 end |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
140 |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
141 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
|
142 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
|
143 end |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
144 |
|
4374
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
145 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
|
146 local options; |
|
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
147 |
|
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
148 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
|
149 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
|
150 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
|
151 module:log("warn", "Invalid content type"); |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
152 return nil, "invalid-json"; |
|
4374
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
153 end |
|
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
154 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
|
155 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
|
156 module:log("warn", "Invalid JSON"); |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
157 return nil, "invalid-json"; |
|
4374
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
158 end |
|
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
159 else |
|
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
160 options = {}; |
|
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
161 end |
|
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
162 |
|
4396
de55e1475808
mod_http_admin_api: re-add information about invite creator
Jonas Schäfer <jonas@wielicki.name>
parents:
4393
diff
changeset
|
163 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
|
164 |
|
4374
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
165 local invite; |
|
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
166 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
|
167 if not options.username then |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
168 return nil, "bad-request"; |
|
4374
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
169 end |
|
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
170 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
|
171 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
|
172 if not options.groups then |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
173 return nil, "bad-request"; |
|
4374
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
174 end |
|
4396
de55e1475808
mod_http_admin_api: re-add information about invite creator
Jonas Schäfer <jonas@wielicki.name>
parents:
4393
diff
changeset
|
175 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
|
176 source = source; |
|
5887
2aa66e928aa0
mod_http_admin_api: Allow specifying roles for invitations
Matthew Wild <mwild1@gmail.com>
parents:
5883
diff
changeset
|
177 roles = options.roles; |
|
5895
095030677ae6
mod_http_admin_api: Support storing free-form text note with invitations
Matthew Wild <mwild1@gmail.com>
parents:
5891
diff
changeset
|
178 note = options.note; |
|
4396
de55e1475808
mod_http_admin_api: re-add information about invite creator
Jonas Schäfer <jonas@wielicki.name>
parents:
4393
diff
changeset
|
179 }, options.ttl); |
|
4374
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
180 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
|
181 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
|
182 source = source; |
|
4375
03cf0d41b272
mod_http_admin_api: Allow specifying groups in account invite
Matthew Wild <mwild1@gmail.com>
parents:
4374
diff
changeset
|
183 groups = options.groups; |
|
5887
2aa66e928aa0
mod_http_admin_api: Allow specifying roles for invitations
Matthew Wild <mwild1@gmail.com>
parents:
5883
diff
changeset
|
184 roles = options.roles; |
|
5895
095030677ae6
mod_http_admin_api: Support storing free-form text note with invitations
Matthew Wild <mwild1@gmail.com>
parents:
5891
diff
changeset
|
185 note = options.note; |
|
4375
03cf0d41b272
mod_http_admin_api: Allow specifying groups in account invite
Matthew Wild <mwild1@gmail.com>
parents:
4374
diff
changeset
|
186 }, options.ttl); |
|
4374
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
187 else |
|
6329
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
188 return nil, "unknown-invite-type"; |
|
4374
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
189 end |
|
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
190 if not invite then |
|
6329
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
191 return nil, "invite-creation-failed"; |
|
4374
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
192 end |
|
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
193 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
|
194 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
|
195 end |
|
e707810a943e
mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents:
4371
diff
changeset
|
196 |
|
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
197 function delete_invite(event, invite_id) --luacheck: ignore 212/event |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
198 local ok, err = invites.delete_account_invite(invite_id); |
|
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
199 if not ok then |
|
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
200 return nil, err; |
|
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
201 end |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
202 return 200; |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
203 end |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
204 |
|
5781
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5779
diff
changeset
|
205 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:
5779
diff
changeset
|
206 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:
5779
diff
changeset
|
207 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:
5779
diff
changeset
|
208 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:
5779
diff
changeset
|
209 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:
5779
diff
changeset
|
210 |
|
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5779
diff
changeset
|
211 local avatar_info = {}; |
|
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5779
diff
changeset
|
212 |
|
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5779
diff
changeset
|
213 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:
5779
diff
changeset
|
214 table.insert(avatar_info, { |
|
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5779
diff
changeset
|
215 bytes = tonumber(avatar.attr.bytes); |
|
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5779
diff
changeset
|
216 hash = avatar.attr.id; |
|
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5779
diff
changeset
|
217 type = avatar.attr.type; |
|
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5779
diff
changeset
|
218 width = tonumber(avatar.attr.width); |
|
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5779
diff
changeset
|
219 height = tonumber(avatar.attr.height); |
|
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5779
diff
changeset
|
220 }); |
|
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5779
diff
changeset
|
221 end |
|
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5779
diff
changeset
|
222 |
|
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5779
diff
changeset
|
223 return avatar_info; |
|
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5779
diff
changeset
|
224 end |
|
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5779
diff
changeset
|
225 |
|
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
226 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
|
227 if not usermanager.user_exists(username, module.host) then |
|
6331
6a3b38051d74
mod_http_admin_api: get_user_info: Fix missing error return
Matthew Wild <mwild1@gmail.com>
parents:
6330
diff
changeset
|
228 return nil, "user-not-found"; |
|
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
229 end |
|
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
230 local display_name; |
|
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
231 do |
|
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
232 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
|
233 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
|
234 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
|
235 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
|
236 end |
|
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
237 end |
|
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
238 |
|
5005
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
239 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
|
240 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
|
241 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
|
242 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
|
243 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
|
244 legacy_roles = array(); |
|
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
245 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
|
246 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
|
247 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
|
248 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
|
249 end |
|
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
250 |
|
5775
4c3216d9b118
mod_http_admin_api: Include user account status and activity in get_user_info
Matthew Wild <mwild1@gmail.com>
parents:
5687
diff
changeset
|
251 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:
5687
diff
changeset
|
252 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:
5687
diff
changeset
|
253 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:
5687
diff
changeset
|
254 end |
|
4c3216d9b118
mod_http_admin_api: Include user account status and activity in get_user_info
Matthew Wild <mwild1@gmail.com>
parents:
5687
diff
changeset
|
255 |
|
4362
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
256 return { |
|
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
257 username = username; |
|
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
258 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
|
259 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
|
260 secondary_roles = secondary_roles; |
|
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
261 roles = legacy_roles; -- COMPAT w/0.12 |
|
5775
4c3216d9b118
mod_http_admin_api: Include user account status and activity in get_user_info
Matthew Wild <mwild1@gmail.com>
parents:
5687
diff
changeset
|
262 enabled = enabled; |
|
6236
4b52d579bc70
mod_http_admin_api: Switch from mod_lastlog2 to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
5895
diff
changeset
|
263 last_active = mod_account_activity.get_last_active(username); |
|
5782
5621dece3ee4
mod_http_admin_api: Only include user deletion_request if account is disabled
Matthew Wild <mwild1@gmail.com>
parents:
5781
diff
changeset
|
264 deletion_request = not enabled and deleted_users:get(username) or nil; |
|
5781
cb25d341745f
mod_http_admin_api: Return avatar metadata from get_user_info()
Matthew Wild <mwild1@gmail.com>
parents:
5779
diff
changeset
|
265 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
|
266 }; |
|
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
267 end |
|
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
268 |
|
4363
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
269 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
|
270 local info = { |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
271 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
|
272 ip = session.ip; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
273 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
|
274 status = { |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
275 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
|
276 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
|
277 }; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
278 features = { |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
279 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
|
280 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
|
281 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
|
282 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
|
283 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
|
284 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
|
285 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
|
286 }; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
287 queues = {}; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
288 }; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
289 -- CSI |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
290 if session.state then |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
291 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
|
292 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
|
293 end |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
294 -- Smacks queue |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
295 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
|
296 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
|
297 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
|
298 -- 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
|
299 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
|
300 end |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
301 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
|
302 info.push_info = { |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
303 id = session.push_identifier; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
304 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
|
305 }; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
306 end |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
307 return info; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
308 end |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
309 |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
310 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
|
311 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
|
312 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
|
313 local omemo_status = {}; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
314 local omemo_devices; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
315 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
|
316 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
|
317 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
|
318 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
|
319 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
|
320 end |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
321 if device_list then |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
322 omemo_devices = {}; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
323 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
|
324 any_device = true; |
|
4363
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
325 local device_info = {}; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
326 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
|
327 if device_id then |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
328 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
|
329 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
|
330 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
|
331 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
|
332 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
|
333 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
|
334 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
|
335 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
|
336 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
|
337 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
|
338 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
|
339 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
|
340 device_info.valid = true; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
341 end |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
342 end |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
343 end |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
344 end |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
345 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
|
346 device_info.valid = false; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
347 everything_valid = false; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
348 end |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
349 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
|
350 end |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
351 |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
352 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
|
353 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
|
354 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
|
355 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
|
356 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
|
357 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
|
358 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
|
359 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
|
360 end |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
361 end |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
362 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
|
363 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
|
364 everything_valid = false; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
365 end |
|
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 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
|
368 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
|
369 return { |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
370 status = omemo_status; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
371 devices = omemo_devices; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
372 }; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
373 end |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
374 |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
375 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
|
376 local debug_info = { |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
377 time = os.time(); |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
378 }; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
379 -- Online sessions |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
380 do |
|
5005
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
381 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
|
382 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
|
383 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
|
384 end |
|
4363
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
385 local sessions = {}; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
386 if user_sessions then |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
387 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
|
388 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
|
389 end |
|
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 debug_info.sessions = sessions; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
392 end |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
393 -- Push registrations |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
394 do |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
395 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
|
396 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
|
397 local push_registrations = {}; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
398 if services then |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
399 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
|
400 push_registrations[identifier] = { |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
401 since = push_info.timestamp; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
402 service = push_info.jid; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
403 node = push_info.node; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
404 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
|
405 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
|
406 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
|
407 }; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
408 end |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
409 end |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
410 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
|
411 end |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
412 -- OMEMO |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
413 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
|
414 |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
415 return debug_info; |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
416 end |
|
636d56bbad97
mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents:
4362
diff
changeset
|
417 |
|
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
418 function list_users(event) |
|
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
419 local user_list = {}; |
|
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
420 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
|
421 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
|
422 end |
|
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
423 |
|
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
424 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
|
425 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
|
426 end |
|
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
427 |
|
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
428 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
|
429 local property |
|
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
430 do |
|
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
431 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
|
432 if name then |
|
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
433 username = name; |
|
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
434 property = sub_path; |
|
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
435 end |
|
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
436 end |
|
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
437 |
|
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
438 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
|
439 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
|
440 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
|
441 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
|
442 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
|
443 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
|
444 end |
|
116c88c28532
mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents:
4361
diff
changeset
|
445 |
|
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
446 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
|
447 if not user_info then |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
448 return nil, "user-not-found"; |
|
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
449 end |
|
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
450 |
|
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
451 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
|
452 return json.encode(user_info); |
|
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
453 end |
|
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
454 |
|
5783
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5782
diff
changeset
|
455 local user_attribute_writers = { |
|
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5782
diff
changeset
|
456 enabled = function (username, enabled) |
|
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5782
diff
changeset
|
457 local ok, err; |
|
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5782
diff
changeset
|
458 if enabled == true then |
|
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5782
diff
changeset
|
459 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:
5782
diff
changeset
|
460 elseif enabled == false then |
|
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5782
diff
changeset
|
461 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:
5782
diff
changeset
|
462 else |
|
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5782
diff
changeset
|
463 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:
5782
diff
changeset
|
464 end |
|
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5782
diff
changeset
|
465 if not ok then |
|
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5782
diff
changeset
|
466 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:
5782
diff
changeset
|
467 return nil, err; |
|
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5782
diff
changeset
|
468 end |
|
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5782
diff
changeset
|
469 return true; |
|
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5782
diff
changeset
|
470 end; |
|
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5782
diff
changeset
|
471 }; |
|
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5782
diff
changeset
|
472 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:
5782
diff
changeset
|
473 |
|
5784
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
diff
changeset
|
474 function patch_user(event, username) |
|
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
diff
changeset
|
475 if not username then return; end |
|
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
diff
changeset
|
476 |
|
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
diff
changeset
|
477 local current_user = get_user_info(username); |
|
6329
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
478 if not current_user then return nil, "user-not-found"; end |
|
5784
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
diff
changeset
|
479 |
|
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
diff
changeset
|
480 local request = event.request; |
|
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
diff
changeset
|
481 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:
5783
diff
changeset
|
482 or (not request.body or #request.body == 0) then |
|
6329
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
483 return nil, "invalid-json"; |
|
5784
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
diff
changeset
|
484 end |
|
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
diff
changeset
|
485 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:
5783
diff
changeset
|
486 if not new_user then |
|
6329
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
487 return nil, "invalid-json"; |
|
5784
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
diff
changeset
|
488 end |
|
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
diff
changeset
|
489 |
|
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
diff
changeset
|
490 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:
5783
diff
changeset
|
491 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:
5783
diff
changeset
|
492 module:log("warn", "Unable to service PATCH user request, unsupported attributes: %s", (updated_attributes - writable_user_attributes)); |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
493 return nil, "feature-not-implemented"; |
|
5784
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
diff
changeset
|
494 end |
|
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
diff
changeset
|
495 |
|
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
diff
changeset
|
496 if new_user.enabled ~= nil and new_user.enabled ~= current_user.enabled then |
|
6329
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
497 local ok, err = user_attribute_writers.enabled(username, new_user.enabled); |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
498 if not ok then |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
499 return nil, err; |
|
5784
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
diff
changeset
|
500 end |
|
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
diff
changeset
|
501 end |
|
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
diff
changeset
|
502 |
|
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
diff
changeset
|
503 return 200; |
|
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
diff
changeset
|
504 end |
|
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
diff
changeset
|
505 |
|
4516
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
506 function update_user(event, username) |
|
5786
076b79eb747f
mod_http_admin_api: Abort request if no valid username
Matthew Wild <mwild1@gmail.com>
parents:
5785
diff
changeset
|
507 if not username then |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
508 return nil, "bad-request"; |
|
5786
076b79eb747f
mod_http_admin_api: Abort request if no valid username
Matthew Wild <mwild1@gmail.com>
parents:
5785
diff
changeset
|
509 end |
|
4516
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
510 |
|
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
511 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
|
512 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
|
513 or (not request.body or #request.body == 0) then |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
514 return nil, "invalid-json"; |
|
4516
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
515 end |
|
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
516 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
|
517 if not new_user then |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
518 return nil, "invalid-json"; |
|
4516
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
519 end |
|
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
520 |
|
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
521 if new_user.username and new_user.username ~= username then |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
522 return nil, "bad-request"; -- Cannot change the username |
|
4516
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
523 end |
|
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
524 |
|
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
525 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
|
526 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
|
527 -- TODO: publish |
|
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
528 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
|
529 :text_tag("nick", new_user.display_name, { xmlns = xmlns_nick }); |
|
5785
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5784
diff
changeset
|
530 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
|
531 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
|
532 _defaults_only = true; |
|
5785
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5784
diff
changeset
|
533 }); |
|
4516
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
534 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
|
535 |
|
5005
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
536 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
|
537 if not usermanager.set_user_role then |
|
6329
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
538 return nil, "feature-not-implemented"; |
|
5005
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
539 end |
|
6329
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
540 local role, role_err = usermanager.set_user_role(username, module.host, new_user.role); |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
541 if not role then |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
542 module:log("error", "failed to set role %s for %s: ", new_user.role, username, role_err); |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
543 return nil, role_err; |
|
5005
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
544 end |
|
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
545 end |
|
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
546 |
|
d68348323406
mod_http_admin_api: Update for new new role API
Matthew Wild <mwild1@gmail.com>
parents:
4997
diff
changeset
|
547 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
|
548 if not usermanager.set_user_roles then |
|
6329
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
549 return nil, "feature-not-implemented"; |
|
4517
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
550 end |
|
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
551 |
|
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
552 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
|
553 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
|
554 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
|
555 end |
|
5785
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5784
diff
changeset
|
556 local user_jid = username.."@"..module.host; |
|
6329
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
557 local role, role_err = usermanager.set_user_roles(username, module.host, backend_roles); |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
558 if not role then |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
559 module:log("error", "failed to set roles %q for %s: %s", backend_roles, user_jid, role_err) |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
560 return nil, role_err; |
|
4517
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
561 end |
|
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
562 end |
|
d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Jonas Schäfer <jonas@wielicki.name>
parents:
4516
diff
changeset
|
563 |
|
5783
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5782
diff
changeset
|
564 if new_user.enabled ~= nil then |
|
6329
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
565 local ok, err = user_attribute_writers.enabled(username, new_user.enabled); |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
566 if not ok then |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
567 return nil, err; |
|
5783
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5782
diff
changeset
|
568 end |
|
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5782
diff
changeset
|
569 end |
|
6c8cf3ecb885
mod_http_admin_api: Support for setting user account enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5782
diff
changeset
|
570 |
|
4516
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
571 return 200; |
|
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
572 end |
|
5bc706c2db8f
mod_http_admin_api: allow updating the user nickname via API
Jonas Schäfer <jonas@wielicki.name>
parents:
4396
diff
changeset
|
573 |
|
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
574 function delete_user(event, username) --luacheck: ignore 212/event |
|
6329
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
575 local ok, err = usermanager.delete_user(username, module.host); |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
576 if not ok then |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
577 return nil, err; |
|
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
578 end |
|
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
579 return 200; |
|
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
580 end |
|
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
581 |
|
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
582 function list_groups(event) |
|
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
583 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
|
584 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
|
585 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
|
586 table.insert(group_list, { |
|
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
587 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
|
588 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
|
589 members = mod_groups.get_members(group_id); |
|
5687
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
590 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
|
591 }); |
|
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 |
|
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
594 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
|
595 return json.encode_array(group_list); |
|
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
596 end |
|
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
597 |
|
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
598 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
|
599 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
|
600 if not group then |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
601 return nil, "group-not-found"; |
|
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
602 end |
|
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
603 |
|
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
604 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
|
605 |
|
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
606 return json.encode({ |
|
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
607 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
|
608 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
|
609 members = mod_groups.get_members(group_id); |
|
5687
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
610 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
|
611 }); |
|
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
612 end |
|
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
613 |
|
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
614 function create_group(event) |
|
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
615 local request = event.request; |
|
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
616 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
|
617 or (not request.body or #request.body == 0) then |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
618 return nil, "invalid-json"; |
|
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
619 end |
|
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
620 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
|
621 if not group then |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
622 return nil, "invalid-json"; |
|
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
623 end |
|
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
624 |
|
4390
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
625 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
|
626 |
|
6329
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
627 local group_id, err = mod_groups.create( |
|
4390
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
628 { |
|
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
629 name = group.name; |
|
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
630 }, |
|
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
631 create_muc |
|
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
632 ); |
|
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
633 if not group_id then |
|
6329
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
634 return nil, err; |
|
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
635 end |
|
4361
7f1f3b79d991
mod_http_admin_api: Return new group object on successful creation
Matthew Wild <mwild1@gmail.com>
parents:
4360
diff
changeset
|
636 |
|
7f1f3b79d991
mod_http_admin_api: Return new group object on successful creation
Matthew Wild <mwild1@gmail.com>
parents:
4360
diff
changeset
|
637 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
|
638 |
|
17d44ba8fde2
mod_http_admin_api: support for creating groups with MUCs
Jonas Schäfer <jonas@wielicki.name>
parents:
4382
diff
changeset
|
639 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
|
640 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
|
641 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
|
642 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
|
643 members = {}; |
|
5687
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
644 chats = {}; |
|
4361
7f1f3b79d991
mod_http_admin_api: Return new group object on successful creation
Matthew Wild <mwild1@gmail.com>
parents:
4360
diff
changeset
|
645 }); |
|
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
646 end |
|
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
647 |
|
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
648 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
|
649 -- Add member |
|
5785
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5784
diff
changeset
|
650 do |
|
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5784
diff
changeset
|
651 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:
5784
diff
changeset
|
652 if group_id and member_name then |
|
6329
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
653 local ok, err = mod_groups.add_member(group_id, member_name); |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
654 if not ok then |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
655 return nil, err; |
|
5785
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5784
diff
changeset
|
656 end |
|
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5784
diff
changeset
|
657 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
|
658 end |
|
4369
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
659 end |
|
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
660 |
|
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
661 local group_id = group:match("^([^/]+)$") |
|
6329
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
662 if not group_id then return nil, "group-not-found"; end |
|
4369
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
663 |
|
5785
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5784
diff
changeset
|
664 local request = event.request; |
|
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5784
diff
changeset
|
665 if request.headers.content_type ~= json_content_type or (not request.body or #request.body == 0) then |
|
6329
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
666 return nil, "invalid-json"; |
|
5785
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5784
diff
changeset
|
667 end |
|
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5784
diff
changeset
|
668 |
|
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5784
diff
changeset
|
669 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:
5784
diff
changeset
|
670 if not update then |
|
6329
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
671 return nil, "invalid-json"; |
|
5785
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5784
diff
changeset
|
672 end |
|
4369
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
673 |
|
5785
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5784
diff
changeset
|
674 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:
5784
diff
changeset
|
675 if not group_info then |
|
6329
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
676 return nil, "group-not-found"; |
|
5785
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5784
diff
changeset
|
677 end |
|
4369
29b7f445aec5
mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents:
4368
diff
changeset
|
678 |
|
5785
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5784
diff
changeset
|
679 if update.name then |
|
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5784
diff
changeset
|
680 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
|
681 end |
|
6329
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
682 local ok, err = mod_groups.set_info(group_id, group_info); |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
683 if not ok then |
|
5571c75a4fed
mod_http_admin_api: Unify error reporting around util.error
Matthew Wild <mwild1@gmail.com>
parents:
6236
diff
changeset
|
684 return nil, err; |
|
5785
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5784
diff
changeset
|
685 end |
|
671a6ad1f026
mod_http_admin_api: Fix some luacheck warnings and code style issues
Matthew Wild <mwild1@gmail.com>
parents:
5784
diff
changeset
|
686 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
|
687 end |
|
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
688 |
|
5687
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
689 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
|
690 -- Add group chat |
|
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
691 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
|
692 if group_id then |
|
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
693 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
|
694 if not muc_params then |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
695 return nil, "invalid-json"; |
|
5687
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
696 end |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
697 local muc, err = mod_groups.add_group_chat(group_id, muc_params.name); |
|
5687
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
698 if not muc then |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
699 return nil, err; |
|
5687
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
700 end |
|
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
701 return json.encode(muc); |
|
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
702 end |
|
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
703 |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
704 return nil, "group-not-found"; |
|
5687
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
705 end |
|
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
706 |
|
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
707 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
|
708 -- Check if this is a membership deletion and handle it |
|
5687
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
709 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
|
710 if group_id then |
|
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
711 -- 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
|
712 if sub_resource_type == "members" then |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
713 local ok, err = mod_groups.remove_member(group_id, sub_resource_id); |
|
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
714 if not ok then |
|
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
715 return nil, err; |
|
5687
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
716 end |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
717 return 204; |
|
5687
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
718 elseif sub_resource_type == "chats" then |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
719 local ok, err = mod_groups.remove_group_chat(group_id, sub_resource_id); |
|
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
720 if not ok then |
|
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
721 return nil, err; |
|
5687
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
722 end |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
723 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
|
724 else |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
725 return nil, "item-not-found"; |
|
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
726 end |
|
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
727 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
|
728 -- 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
|
729 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
|
730 end |
|
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
731 |
|
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
732 if not group_id then |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
733 return nil, "bad-request"; |
|
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
734 end |
|
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
735 |
|
4382
0d6b69777bc1
mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents:
4378
diff
changeset
|
736 if not mod_groups.exists(group_id) then |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
737 return nil, "group-not-found"; |
|
4368
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
738 end |
|
e0c8d866d58c
mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents:
4366
diff
changeset
|
739 |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
740 local ok, err = mod_groups.delete(group_id); |
|
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
741 if not ok then |
|
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
742 return nil, err; |
|
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
743 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
|
744 return 204; |
|
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
745 end |
|
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
746 |
|
4371
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
747 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
|
748 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
|
749 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
|
750 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
|
751 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
|
752 }); |
|
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
753 end |
|
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
754 |
|
4576
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
755 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
|
756 if mf == nil then |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
757 return nil |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
758 end |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
759 return mf.data.value |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
760 end |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
761 |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
762 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
|
763 if mf == nil then |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
764 return nil |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
765 end |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
766 return { |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
767 since = mf.data._created, |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
768 value = mf.data.value, |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
769 } |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
770 end |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
771 |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
772 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
|
773 if mf == nil then |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
774 return nil |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
775 end |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
776 local sum = 0; |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
777 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
|
778 sum = sum + metric.value; |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
779 end |
|
5827
f76909ec1300
mod_http_admin_api: metrics: Filter out a value that is commonly nan at startup
Matthew Wild <mwild1@gmail.com>
parents:
5786
diff
changeset
|
780 return (sum == sum) and sum or nil; -- Filter out nan |
|
4576
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 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
|
784 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
|
785 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
|
786 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
|
787 statsmanager.collect(); |
|
13e913471b75
mod_http_admin_api: Ensure freshness of metrics when in manual mode
Kim Alvefur <zash@zash.se>
parents:
4714
diff
changeset
|
788 end |
|
4576
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
789 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
|
790 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
|
791 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
|
792 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
|
793 result.uploads = maybe_export_summed_gauge(families["prosody_mod_http_file_share/total_storage_bytes"]); |
|
5862
9f2816287556
mod_http_admin_api: Include active user counts in metrics response
Matthew Wild <mwild1@gmail.com>
parents:
5827
diff
changeset
|
794 result.users = { |
|
5883
6c11e1b4066d
mod_http_admin_api: User activity gauges need to be summed (labels by host)
Matthew Wild <mwild1@gmail.com>
parents:
5862
diff
changeset
|
795 active_1d = maybe_export_summed_gauge(families["prosody_mod_measure_active_users/active_users_1d"]); |
|
6c11e1b4066d
mod_http_admin_api: User activity gauges need to be summed (labels by host)
Matthew Wild <mwild1@gmail.com>
parents:
5862
diff
changeset
|
796 active_7d = maybe_export_summed_gauge(families["prosody_mod_measure_active_users/active_users_7d"]); |
|
6c11e1b4066d
mod_http_admin_api: User activity gauges need to be summed (labels by host)
Matthew Wild <mwild1@gmail.com>
parents:
5862
diff
changeset
|
797 active_30d = maybe_export_summed_gauge(families["prosody_mod_measure_active_users/active_users_30d"]); |
|
5862
9f2816287556
mod_http_admin_api: Include active user counts in metrics response
Matthew Wild <mwild1@gmail.com>
parents:
5827
diff
changeset
|
798 }; |
|
4576
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
799 return json.encode(result); |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
800 end |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
801 |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
802 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
|
803 local request = event.request; |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
804 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
|
805 or (not request.body or #request.body == 0) then |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
806 return nil, "invalid-json"; |
|
4576
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
807 end |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
808 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
|
809 if not body then |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
810 return nil, "invalid-json"; |
|
4576
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
811 end |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
812 |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
813 if type(body.recipients) ~= "table" and body.recipients ~= "online" and body.recipients ~= "all" then |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
814 return nil, "bad-request"; |
|
4576
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
815 end |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
816 |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
817 if not body.body or #body.body == 0 then |
|
6330
4e63151010bf
mod_http_admin_api: Convert remaining HTTP errors to util.error
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
818 return nil, "bad-request"; |
|
4576
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
819 end |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
820 |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
821 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
|
822 local host = module.host |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
823 message.attr.from = host |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
824 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
|
825 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
|
826 elseif body.recipients == "all" then |
|
5891
512f912fdfa5
mod_http_admin_api: Use new API in mod_announce to send announcements
Matthew Wild <mwild1@gmail.com>
parents:
5888
diff
changeset
|
827 if announce.send_to_all then |
|
512f912fdfa5
mod_http_admin_api: Use new API in mod_announce to send announcements
Matthew Wild <mwild1@gmail.com>
parents:
5888
diff
changeset
|
828 announce.send_to_all(message, host); |
|
512f912fdfa5
mod_http_admin_api: Use new API in mod_announce to send announcements
Matthew Wild <mwild1@gmail.com>
parents:
5888
diff
changeset
|
829 else -- COMPAT w/ 0.12 and trunk before e22609460975 |
|
512f912fdfa5
mod_http_admin_api: Use new API in mod_announce to send announcements
Matthew Wild <mwild1@gmail.com>
parents:
5888
diff
changeset
|
830 for username in usermanager.users(host) do |
|
512f912fdfa5
mod_http_admin_api: Use new API in mod_announce to send announcements
Matthew Wild <mwild1@gmail.com>
parents:
5888
diff
changeset
|
831 message.attr.to = username .. "@" .. host |
|
512f912fdfa5
mod_http_admin_api: Use new API in mod_announce to send announcements
Matthew Wild <mwild1@gmail.com>
parents:
5888
diff
changeset
|
832 module:send(st.clone(message)) |
|
512f912fdfa5
mod_http_admin_api: Use new API in mod_announce to send announcements
Matthew Wild <mwild1@gmail.com>
parents:
5888
diff
changeset
|
833 end |
|
4576
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
834 end |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
835 else |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
836 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
|
837 message.attr.to = addr |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
838 module:send(message) |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
839 end |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
840 end |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
841 |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
842 return 201; |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
843 end |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
844 |
|
4343
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
845 module:provides("http", { |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
846 route = check_auth { |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
847 ["GET /invites"] = list_invites; |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
848 ["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
|
849 ["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
|
850 ["DELETE /invites/*"] = delete_invite; |
|
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
851 |
|
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
852 ["GET /users"] = list_users; |
|
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
853 ["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
|
854 ["PUT /users/*"] = update_user; |
|
5784
5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
Matthew Wild <mwild1@gmail.com>
parents:
5783
diff
changeset
|
855 ["PATCH /users/*"] = patch_user; |
|
4345
1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents:
4343
diff
changeset
|
856 ["DELETE /users/*"] = delete_user; |
|
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
857 |
|
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
858 ["GET /groups"] = list_groups; |
|
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
859 ["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
|
860 ["POST /groups"] = create_group; |
|
5687
4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
Matthew Wild <mwild1@gmail.com>
parents:
5284
diff
changeset
|
861 ["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
|
862 ["PUT /groups/*"] = update_group; |
|
4353
535d80be110d
mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents:
4352
diff
changeset
|
863 ["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
|
864 |
|
3d01bc4547b2
mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents:
4369
diff
changeset
|
865 ["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
|
866 |
|
cade5dac1003
mod_http_admin_api: Add endpoints for server maintenance
Jonas Schäfer <jonas@wielicki.name>
parents:
4517
diff
changeset
|
867 ["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
|
868 ["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
|
869 }; |
|
ee313922b8d1
mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
870 }); |
