annotate mod_http_admin_api/mod_http_admin_api.lua @ 6562:5da6fb562df9 default tip

mod_unified_push: Fix push error handling (fixes #2000) Use the error object that send_iq() passes as an argument to it's reject callback instead of attempting and failing to do the parsing in the callback itself.
author kmq
date Mon, 06 Jul 2026 14:23:57 +0200
parents 1fc38a840baa
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 });