mod_http_admin_api/mod_http_admin_api.lua
author Jonas Schäfer <jonas@wielicki.name>
Mon, 25 Jan 2021 18:33:49 +0100
changeset 4386 0d6b69777bc1
parent 4382 d4e0e4d22fc7
child 4394 17d44ba8fde2
permissions -rw-r--r--
mod_http_admin_api: port to use new mod_groups_internal module Matthew Wild contributed much of the code, so I can only take partial credit.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4349
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
     1
local usermanager = require "core.usermanager";
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
     2
4347
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     3
local json = require "util.json";
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     4
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     5
module:depends("http");
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     6
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     7
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
     8
local tokens = module:depends("tokenauth");
4349
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
     9
local mod_pep = module:depends("pep");
4386
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
    10
local mod_groups = module:depends("groups_internal");
4347
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    11
4367
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
    12
local push_errors = module:shared("cloud_notify/push_errors");
4356
f6da234b21b8 mod_http_admin_api: Add groups property to users
Matthew Wild <mwild1@gmail.com>
parents: 4355
diff changeset
    13
4375
3d01bc4547b2 mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents: 4373
diff changeset
    14
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: 4373
diff changeset
    15
4347
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    16
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
    17
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    18
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
    19
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    20
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
    21
	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
    22
	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
    23
		return false;
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    24
	end
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    25
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    26
	if auth_type == "Bearer" then
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    27
		local token_info = tokens.get_token_info(auth_data);
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    28
		if not token_info or not token_info.session then
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    29
			return false;
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    30
		end
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    31
		return token_info.session;
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    32
	end
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    33
	return nil;
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    34
end
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    35
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    36
function check_auth(routes)
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    37
	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
    38
		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
    39
		if not session then
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    40
			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
    41
			return false, 401;
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    42
		elseif session.auth_scope ~= "prosody:scope:admin" then
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    43
			return false, 403;
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    44
		end
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    45
		event.session = session;
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    46
		return true;
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    47
	end
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    48
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    49
	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
    50
		routes[route] = function (event, ...)
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    51
			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
    52
			if not permit then
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    53
				return code;
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    54
			end
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    55
			return handler(event, ...);
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    56
		end;
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    57
	end
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    58
	return routes;
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    59
end
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    60
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    61
local function token_info_to_invite_info(token_info)
4353
5ca36c36ab05 mod_http_admin_api: Expose new invite properties: groups, source and reusable
Matthew Wild <mwild1@gmail.com>
parents: 4349
diff changeset
    62
	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: 4349
diff changeset
    63
	local groups = additional_data and additional_data.groups or nil;
5ca36c36ab05 mod_http_admin_api: Expose new invite properties: groups, source and reusable
Matthew Wild <mwild1@gmail.com>
parents: 4349
diff changeset
    64
	local source = additional_data and additional_data.source or nil;
4382
d4e0e4d22fc7 mod_http_admin_api: Add 'reset' property to returned invite objects
Matthew Wild <mwild1@gmail.com>
parents: 4379
diff changeset
    65
	local reset = not not (additional_data and additional_data.allow_reset or nil);
4347
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    66
	return {
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    67
		id = token_info.token;
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    68
		type = token_info.type;
4362
d3e0fe470877 mod_http_admin_api: Ensure 'reusable' flag is always present on an invite
Matthew Wild <mwild1@gmail.com>
parents: 4361
diff changeset
    69
		reusable = not not token_info.reusable;
4347
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    70
		inviter = token_info.inviter;
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    71
		jid = token_info.jid;
4358
d61d7d30f38d mod_http_admin_api: Add XMPP URI into invite objects
Matthew Wild <mwild1@gmail.com>
parents: 4357
diff changeset
    72
		uri = token_info.uri;
4347
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    73
		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
    74
		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
    75
		expires = token_info.expires;
4353
5ca36c36ab05 mod_http_admin_api: Expose new invite properties: groups, source and reusable
Matthew Wild <mwild1@gmail.com>
parents: 4349
diff changeset
    76
		groups = groups;
5ca36c36ab05 mod_http_admin_api: Expose new invite properties: groups, source and reusable
Matthew Wild <mwild1@gmail.com>
parents: 4349
diff changeset
    77
		source = source;
4382
d4e0e4d22fc7 mod_http_admin_api: Add 'reset' property to returned invite objects
Matthew Wild <mwild1@gmail.com>
parents: 4379
diff changeset
    78
		reset = reset;
4347
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    79
	};
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    80
end
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    81
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    82
function list_invites(event)
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    83
	local invites_list = {};
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    84
	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
    85
		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
    86
	end
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    87
	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
    88
		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
    89
	end);
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    90
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    91
	event.response.headers["Content-Type"] = json_content_type;
4354
270025e76bf8 mod_http_admin_api: Use json.encode_array() when returning an array
Matthew Wild <mwild1@gmail.com>
parents: 4353
diff changeset
    92
	return json.encode_array(invites_list);
4347
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
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    95
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
    96
	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
    97
	if not invite then
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    98
		return 404;
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    99
	end
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   100
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   101
	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
   102
	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
   103
end
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   104
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   105
function create_invite(event)
4355
c0b1b2a61e3c mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents: 4354
diff changeset
   106
	local invite_options;
c0b1b2a61e3c mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents: 4354
diff changeset
   107
c0b1b2a61e3c mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents: 4354
diff changeset
   108
	local request = event.request;
c0b1b2a61e3c mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents: 4354
diff changeset
   109
	if request.body and #request.body > 0 then
c0b1b2a61e3c mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents: 4354
diff changeset
   110
		if request.headers.content_type ~= json_content_type then
c0b1b2a61e3c mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents: 4354
diff changeset
   111
			module:log("warn", "Invalid content type");
c0b1b2a61e3c mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents: 4354
diff changeset
   112
			return 400;
c0b1b2a61e3c mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents: 4354
diff changeset
   113
		end
c0b1b2a61e3c mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents: 4354
diff changeset
   114
		invite_options = json.decode(event.request.body);
c0b1b2a61e3c mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents: 4354
diff changeset
   115
		if not invite_options then
c0b1b2a61e3c mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents: 4354
diff changeset
   116
			module:log("warn", "Invalid JSON");
c0b1b2a61e3c mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents: 4354
diff changeset
   117
			return 400;
c0b1b2a61e3c mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents: 4354
diff changeset
   118
		end
4363
5dbce7f35aa0 mod_http_admin_api: Fix logic bug
Matthew Wild <mwild1@gmail.com>
parents: 4362
diff changeset
   119
	else
5dbce7f35aa0 mod_http_admin_api: Fix logic bug
Matthew Wild <mwild1@gmail.com>
parents: 4362
diff changeset
   120
		invite_options = {};
4355
c0b1b2a61e3c mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents: 4354
diff changeset
   121
	end
c0b1b2a61e3c mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents: 4354
diff changeset
   122
c0b1b2a61e3c mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents: 4354
diff changeset
   123
	local invite;
4363
5dbce7f35aa0 mod_http_admin_api: Fix logic bug
Matthew Wild <mwild1@gmail.com>
parents: 4362
diff changeset
   124
	if invite_options.reusable then
4361
a49ca492e621 mod_invites, mod_http_admin_api: Allow specifying multiple groups when creating an invite
Matthew Wild <mwild1@gmail.com>
parents: 4358
diff changeset
   125
		invite = invites.create_group(invite_options.groups, invite_options.ttl, {
4355
c0b1b2a61e3c mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents: 4354
diff changeset
   126
			source = "admin_api/"..event.session.username;
c0b1b2a61e3c mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents: 4354
diff changeset
   127
		});
c0b1b2a61e3c mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents: 4354
diff changeset
   128
	else
c0b1b2a61e3c mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents: 4354
diff changeset
   129
		invite = invites.create_account(nil, {
c0b1b2a61e3c mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents: 4354
diff changeset
   130
			source = "admin_api/"..event.session.username;
4361
a49ca492e621 mod_invites, mod_http_admin_api: Allow specifying multiple groups when creating an invite
Matthew Wild <mwild1@gmail.com>
parents: 4358
diff changeset
   131
			groups = invite_options.groups;
4355
c0b1b2a61e3c mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents: 4354
diff changeset
   132
		});
c0b1b2a61e3c mod_http_admin_api: Add support for creating reusable/group/custom-ttl invites
Matthew Wild <mwild1@gmail.com>
parents: 4354
diff changeset
   133
	end
4347
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   134
	if not invite then
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   135
		return 500;
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   136
	end
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   137
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   138
	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
   139
	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
   140
end
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   141
4378
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   142
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: 4375
diff changeset
   143
	local options;
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   144
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   145
	local request = event.request;
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   146
	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: 4375
diff changeset
   147
		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: 4375
diff changeset
   148
			module:log("warn", "Invalid content type");
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   149
			return 400;
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   150
		end
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   151
		options = json.decode(event.request.body);
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   152
		if not options then
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   153
			module:log("warn", "Invalid JSON");
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   154
			return 400;
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   155
		end
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   156
	else
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   157
		options = {};
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   158
	end
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   159
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   160
	local invite;
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   161
	if invite_type == "reset" then
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   162
		if not options.username then
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   163
			return 400;
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   164
		end
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   165
		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: 4375
diff changeset
   166
	elseif invite_type == "group" then
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   167
		if not options.groups then
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   168
			return 400;
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   169
		end
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   170
		invite = invites.create_group(options.groups, nil, options.ttl);
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   171
	elseif invite_type == "account" then
4379
03cf0d41b272 mod_http_admin_api: Allow specifying groups in account invite
Matthew Wild <mwild1@gmail.com>
parents: 4378
diff changeset
   172
		invite = invites.create_account(options.username, {
03cf0d41b272 mod_http_admin_api: Allow specifying groups in account invite
Matthew Wild <mwild1@gmail.com>
parents: 4378
diff changeset
   173
			groups = options.groups;
03cf0d41b272 mod_http_admin_api: Allow specifying groups in account invite
Matthew Wild <mwild1@gmail.com>
parents: 4378
diff changeset
   174
		}, options.ttl);
4378
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   175
	else
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   176
		return 400;
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   177
	end
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   178
	if not invite then
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   179
		return 500;
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   180
	end
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   181
	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: 4375
diff changeset
   182
	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: 4375
diff changeset
   183
end
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   184
4347
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   185
function delete_invite(event, invite_id) --luacheck: ignore 212/event
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   186
	if not invites.delete_account_invite(invite_id) then
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   187
		return 404;
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   188
	end
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   189
	return 200;
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   190
end
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   191
4349
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   192
local function get_user_info(username)
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   193
	if not usermanager.user_exists(username, module.host) then
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   194
		return nil;
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   195
	end
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   196
	local display_name;
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   197
	do
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   198
		local pep_service = mod_pep.get_pep_service(username);
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   199
		local ok, _, nick_item = pep_service:get_last_item("http://jabber.org/protocol/nick", true);
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   200
		if ok and nick_item then
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   201
			display_name = nick_item:get_child_text("nick", "http://jabber.org/protocol/nick");
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   202
		end
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   203
	end
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   204
4366
116c88c28532 mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents: 4365
diff changeset
   205
	return {
116c88c28532 mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents: 4365
diff changeset
   206
		username = username;
116c88c28532 mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents: 4365
diff changeset
   207
		display_name = display_name;
116c88c28532 mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents: 4365
diff changeset
   208
	};
116c88c28532 mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents: 4365
diff changeset
   209
end
116c88c28532 mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents: 4365
diff changeset
   210
4367
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   211
local function get_session_debug_info(session)
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   212
	local info = {
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   213
		full_jid = session.full_jid;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   214
		ip = session.ip;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   215
		since = math.floor(session.conntime);
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   216
		status = {
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   217
			connected = not not session.conn;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   218
			hibernating = not not session.hibernating;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   219
		};
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   220
		features = {
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   221
			carbons = not not session.want_carbons;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   222
			encrypted = not not session.secure;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   223
			acks = not not session.smacks;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   224
			resumption = not not session.resumption_token;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   225
			mobile_optimization = not not session.csi_counter;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   226
			push_notifications = not not session.push_identifier;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   227
			history = not not session.mam_requested;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   228
		};
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   229
		queues = {};
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   230
	};
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   231
	-- CSI
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   232
	if session.state then
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   233
		info.status.active = session.state == "active";
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   234
		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: 4366
diff changeset
   235
	end
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   236
	-- Smacks queue
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   237
	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: 4366
diff changeset
   238
		info.queues.awaiting_acks = session.last_requested_h - session.last_acknowledged_stanza;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   239
	end
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   240
	if session.push_identifier then
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   241
		info.push_info = {
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   242
			id = session.push_identifier;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   243
			wakeup_push_sent = session.first_hibernated_push;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   244
		};
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   245
	end
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   246
	return info;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   247
end
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   248
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   249
local function get_user_omemo_info(username)
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   250
	local everything_valid = true;
4370
83370df0ce4a mod_http_admin_api: do not report OMEMO as ok if no devices exist
Jonas Schäfer <jonas@wielicki.name>
parents: 4369
diff changeset
   251
	local any_device = false;
4367
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   252
	local omemo_status = {};
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   253
	local omemo_devices;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   254
	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: 4366
diff changeset
   255
	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: 4366
diff changeset
   256
		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: 4366
diff changeset
   257
		if ok and device_list then
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   258
			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: 4366
diff changeset
   259
		end
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   260
		if device_list then
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   261
			omemo_devices = {};
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   262
			for device_entry in device_list:childtags("device") do
4370
83370df0ce4a mod_http_admin_api: do not report OMEMO as ok if no devices exist
Jonas Schäfer <jonas@wielicki.name>
parents: 4369
diff changeset
   263
				any_device = true;
4367
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   264
				local device_info = {};
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   265
				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: 4366
diff changeset
   266
				if device_id then
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   267
					device_info.id = device_id;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   268
					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: 4366
diff changeset
   269
					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: 4366
diff changeset
   270
					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: 4366
diff changeset
   271
						device_info.have_bundle = true;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   272
						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: 4366
diff changeset
   273
						if config_ok and bundle_config then
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   274
							device_info.bundle_config = bundle_config;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   275
							if bundle_config.max_items == 1
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   276
							and bundle_config.access_model == "open"
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   277
							and bundle_config.persist_items == true
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   278
							and bundle_config.publish_model == "publishers" then
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   279
								device_info.valid = true;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   280
							end
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   281
						end
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   282
					end
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   283
				end
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   284
				if device_info.valid == nil then
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   285
					device_info.valid = false;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   286
					everything_valid = false;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   287
				end
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   288
				table.insert(omemo_devices, device_info);
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   289
			end
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   290
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   291
			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: 4366
diff changeset
   292
			if config_ok and list_config then
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   293
				omemo_status.config = list_config;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   294
				if list_config.max_items == 1
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   295
				and list_config.access_model == "open"
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   296
				and list_config.persist_items == true
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   297
				and list_config.publish_model == "publishers" then
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   298
					omemo_status.config_valid = true;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   299
				end
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   300
			end
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   301
			if omemo_status.config_valid == nil then
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   302
				omemo_status.config_valid = false;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   303
				everything_valid = false;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   304
			end
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   305
		end
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   306
	end
4370
83370df0ce4a mod_http_admin_api: do not report OMEMO as ok if no devices exist
Jonas Schäfer <jonas@wielicki.name>
parents: 4369
diff changeset
   307
	omemo_status.valid = everything_valid and any_device;
4367
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   308
	return {
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   309
		status = omemo_status;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   310
		devices = omemo_devices;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   311
	};
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   312
end
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   313
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   314
local function get_user_debug_info(username)
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   315
	local debug_info = {
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   316
		time = os.time();
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   317
	};
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   318
	-- Online sessions
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   319
	do
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   320
		local user_sessions = hosts[module.host].sessions[username];
4369
f975a4d31f35 mod_http_admin_api: make the api a bit less untested
Jonas Schäfer <jonas@wielicki.name>
parents: 4368
diff changeset
   321
		if user_sessions then
f975a4d31f35 mod_http_admin_api: make the api a bit less untested
Jonas Schäfer <jonas@wielicki.name>
parents: 4368
diff changeset
   322
			user_sessions = user_sessions.sessions
f975a4d31f35 mod_http_admin_api: make the api a bit less untested
Jonas Schäfer <jonas@wielicki.name>
parents: 4368
diff changeset
   323
		end
4367
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   324
		local sessions = {};
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   325
		if user_sessions then
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   326
			for _, session in pairs(user_sessions) do
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   327
				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: 4366
diff changeset
   328
			end
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   329
		end
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   330
		debug_info.sessions = sessions;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   331
	end
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   332
	-- Push registrations
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   333
	do
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   334
		local store = module:open_store("cloud_notify");
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   335
		local services = store:get(username);
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   336
		local push_registrations = {};
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   337
		if services then
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   338
			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: 4366
diff changeset
   339
				push_registrations[identifier] = {
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   340
					since = push_info.timestamp;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   341
					service = push_info.jid;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   342
					node = push_info.node;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   343
					error_count = push_errors[identifier] or 0;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   344
				};
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   345
			end
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   346
		end
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   347
		debug_info.push_registrations = push_registrations;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   348
	end
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   349
	-- OMEMO
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   350
	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: 4366
diff changeset
   351
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   352
	return debug_info;
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   353
end
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   354
4349
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   355
function list_users(event)
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   356
	local user_list = {};
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   357
	for username in usermanager.users(module.host) do
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   358
		table.insert(user_list, get_user_info(username));
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   359
	end
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   360
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   361
	event.response.headers["Content-Type"] = json_content_type;
4354
270025e76bf8 mod_http_admin_api: Use json.encode_array() when returning an array
Matthew Wild <mwild1@gmail.com>
parents: 4353
diff changeset
   362
	return json.encode_array(user_list);
4349
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   363
end
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   364
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   365
function get_user_by_name(event, username)
4366
116c88c28532 mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents: 4365
diff changeset
   366
	local property
116c88c28532 mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents: 4365
diff changeset
   367
	do
116c88c28532 mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents: 4365
diff changeset
   368
		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: 4365
diff changeset
   369
		if name then
116c88c28532 mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents: 4365
diff changeset
   370
			username = name;
116c88c28532 mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents: 4365
diff changeset
   371
			property = sub_path;
116c88c28532 mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents: 4365
diff changeset
   372
		end
116c88c28532 mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents: 4365
diff changeset
   373
	end
116c88c28532 mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents: 4365
diff changeset
   374
116c88c28532 mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents: 4365
diff changeset
   375
	if property == "groups" then
4368
49cf9d188b26 mod_http_admin_api: set content-type for debug API
Jonas Schäfer <jonas@wielicki.name>
parents: 4367
diff changeset
   376
		event.response.headers["Content-Type"] = json_content_type;
4386
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   377
		return json.encode(mod_groups.get_user_groups(username));
4367
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   378
	elseif property == "debug" then
4368
49cf9d188b26 mod_http_admin_api: set content-type for debug API
Jonas Schäfer <jonas@wielicki.name>
parents: 4367
diff changeset
   379
		event.response.headers["Content-Type"] = json_content_type;
4367
636d56bbad97 mod_http_admin_api: 100% untested user debug info endpoint
Matthew Wild <mwild1@gmail.com>
parents: 4366
diff changeset
   380
		return json.encode(get_user_debug_info(username));
4366
116c88c28532 mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents: 4365
diff changeset
   381
	end
116c88c28532 mod_http_admin_api: restructure group-related info in API
Jonas Schäfer <jonas@wielicki.name>
parents: 4365
diff changeset
   382
4349
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   383
	local user_info = get_user_info(username);
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   384
	if not user_info then
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   385
		return 404;
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   386
	end
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   387
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   388
	event.response.headers["Content-Type"] = json_content_type;
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   389
	return json.encode(user_info);
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   390
end
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   391
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   392
function delete_user(event, username) --luacheck: ignore 212/event
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   393
	if not usermanager.delete_user(username, module.host) then
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   394
		return 404;
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   395
	end
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   396
	return 200;
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   397
end
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   398
4357
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   399
function list_groups(event)
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   400
	local group_list = {};
4386
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   401
	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: 4382
diff changeset
   402
		local group_info = mod_groups.get_info(group_id);
4357
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   403
		table.insert(group_list, {
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   404
			id = group_id;
4372
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   405
			name = group_info.name;
4386
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   406
			members = mod_groups.get_members(group_id);
4357
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   407
		});
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   408
	end
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   409
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   410
	event.response.headers["Content-Type"] = json_content_type;
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   411
	return json.encode_array(group_list);
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   412
end
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   413
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   414
function get_group_by_id(event, group_id)
4386
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   415
	local group = mod_groups.get_info(group_id);
4357
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   416
	if not group then
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   417
		return 404;
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   418
	end
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   419
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   420
	event.response.headers["Content-Type"] = json_content_type;
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   421
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   422
	return json.encode({
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   423
		id = group_id;
4372
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   424
		name = group.name;
4386
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   425
		members = mod_groups.get_members(group_id);
4357
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   426
	});
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   427
end
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   428
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   429
function create_group(event)
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   430
	local request = event.request;
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   431
	if request.headers.content_type ~= json_content_type
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   432
	or (not request.body or #request.body == 0) then
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   433
		return 400;
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   434
	end
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   435
	local group = json.decode(event.request.body);
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   436
	if not group then
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   437
		return 400;
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   438
	end
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   439
4372
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   440
	if not group.name then
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   441
		module:log("warn", "Group missing name property");
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   442
		return 400;
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   443
	end
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   444
4386
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   445
	local group_id = mod_groups.create({
4372
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   446
		name = group.name;
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   447
	});
4386
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   448
	if not group_id then
4357
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   449
		return 500;
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   450
	end
4365
7f1f3b79d991 mod_http_admin_api: Return new group object on successful creation
Matthew Wild <mwild1@gmail.com>
parents: 4364
diff changeset
   451
7f1f3b79d991 mod_http_admin_api: Return new group object on successful creation
Matthew Wild <mwild1@gmail.com>
parents: 4364
diff changeset
   452
	event.response.headers["Content-Type"] = json_content_type;
7f1f3b79d991 mod_http_admin_api: Return new group object on successful creation
Matthew Wild <mwild1@gmail.com>
parents: 4364
diff changeset
   453
	return json.encode({
4372
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   454
		id = group_id;
4365
7f1f3b79d991 mod_http_admin_api: Return new group object on successful creation
Matthew Wild <mwild1@gmail.com>
parents: 4364
diff changeset
   455
		name = group.name;
4372
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   456
		members = {};
4365
7f1f3b79d991 mod_http_admin_api: Return new group object on successful creation
Matthew Wild <mwild1@gmail.com>
parents: 4364
diff changeset
   457
	});
4357
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   458
end
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   459
4372
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   460
function update_group(event, group) --luacheck: ignore 212/event
4386
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   461
	-- Add member
4372
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   462
	local group_id, member_name = group:match("^([^/]+)/members/([^/]+)$");
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   463
	if group_id and member_name then
4386
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   464
		if not mod_groups.add_member(group_id, member_name) then
4372
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   465
			return 500;
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   466
		end
4373
29b7f445aec5 mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4372
diff changeset
   467
		return 204;
29b7f445aec5 mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4372
diff changeset
   468
	end
29b7f445aec5 mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4372
diff changeset
   469
29b7f445aec5 mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4372
diff changeset
   470
	local group_id = group:match("^([^/]+)$")
29b7f445aec5 mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4372
diff changeset
   471
	if group_id then
29b7f445aec5 mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4372
diff changeset
   472
		local request = event.request;
4386
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   473
		if request.headers.content_type ~= json_content_type or (not request.body or #request.body == 0) then
4373
29b7f445aec5 mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4372
diff changeset
   474
			return 400;
29b7f445aec5 mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4372
diff changeset
   475
		end
29b7f445aec5 mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4372
diff changeset
   476
29b7f445aec5 mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4372
diff changeset
   477
		local update = json.decode(event.request.body);
29b7f445aec5 mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4372
diff changeset
   478
		if not update then
29b7f445aec5 mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4372
diff changeset
   479
			return 400;
29b7f445aec5 mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4372
diff changeset
   480
		end
29b7f445aec5 mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4372
diff changeset
   481
4386
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   482
		local group_info = mod_groups.get_info(group_id);
4373
29b7f445aec5 mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4372
diff changeset
   483
		if not group_info then
29b7f445aec5 mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4372
diff changeset
   484
			return 404;
29b7f445aec5 mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4372
diff changeset
   485
		end
29b7f445aec5 mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4372
diff changeset
   486
29b7f445aec5 mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4372
diff changeset
   487
		if update.name then
4386
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   488
			group_info["name"] = update.name;
4373
29b7f445aec5 mod_http_admin_api: add support for updating groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4372
diff changeset
   489
		end
4386
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   490
		if mod_groups.set_info(group_id, group_info) then
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   491
			return 204;
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   492
		else
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   493
			return 500;
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   494
		end
4372
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   495
	end
4386
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   496
	return 404;
4372
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   497
end
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   498
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   499
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: 4370
diff changeset
   500
	-- Check if this is a membership deletion and handle it
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   501
	local group_id, member_name = subpath:match("^([^/]+)/members/([^/]+)$");
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   502
	if group_id and member_name then
4386
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   503
		if mod_groups.remove_member(group_id, member_name) then
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   504
			return 204;
4372
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   505
		else
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   506
			return 500;
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   507
		end
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   508
	else
4386
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   509
		-- Action refers to the group
4372
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   510
		group_id = subpath;
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   511
	end
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   512
4357
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   513
	if not group_id then
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   514
		return 400;
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   515
	end
4372
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   516
4386
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   517
	if not mod_groups.exists(group_id) then
4372
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   518
		return 404;
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   519
	end
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   520
4386
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   521
	if not mod_groups.delete(group_id) then
4357
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   522
		return 500;
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   523
	end
4386
0d6b69777bc1 mod_http_admin_api: port to use new mod_groups_internal module
Jonas Schäfer <jonas@wielicki.name>
parents: 4382
diff changeset
   524
	return 204;
4357
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   525
end
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   526
4375
3d01bc4547b2 mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents: 4373
diff changeset
   527
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: 4373
diff changeset
   528
	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: 4373
diff changeset
   529
	return json.encode({
3d01bc4547b2 mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents: 4373
diff changeset
   530
		site_name = site_name;
3d01bc4547b2 mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents: 4373
diff changeset
   531
		version = prosody.version;
3d01bc4547b2 mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents: 4373
diff changeset
   532
	});
3d01bc4547b2 mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents: 4373
diff changeset
   533
end
3d01bc4547b2 mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents: 4373
diff changeset
   534
4347
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   535
module:provides("http", {
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   536
	route = check_auth {
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   537
		["GET /invites"] = list_invites;
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   538
		["GET /invites/*"] = get_invite_by_id;
4378
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   539
		["POST /invites"] = create_invite; -- Deprecated
e707810a943e mod_http_admin_api: Improve invite API and support password resets
Matthew Wild <mwild1@gmail.com>
parents: 4375
diff changeset
   540
		["POST /invites/*"] = create_invite_type;
4347
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   541
		["DELETE /invites/*"] = delete_invite;
4349
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   542
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   543
		["GET /users"] = list_users;
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   544
		["GET /users/*"] = get_user_by_name;
1bb08e9ffa82 mod_http_admin_api: Add methods for managing users
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
   545
		["DELETE /users/*"] = delete_user;
4357
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   546
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   547
		["GET /groups"] = list_groups;
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   548
		["GET /groups/*"] = get_group_by_id;
4364
76bec3f66b24 mod_http_admin_api: Switch PUT to POST where appropriate
Matthew Wild <mwild1@gmail.com>
parents: 4363
diff changeset
   549
		["POST /groups"] = create_group;
4372
e0c8d866d58c mod_http_admin_api: Some fixes and improvements for the groups API
Matthew Wild <mwild1@gmail.com>
parents: 4370
diff changeset
   550
		["PUT /groups/*"] = update_group;
4357
535d80be110d mod_http_admin_api: Add groups management endpoints
Matthew Wild <mwild1@gmail.com>
parents: 4356
diff changeset
   551
		["DELETE /groups/*"] = delete_group;
4375
3d01bc4547b2 mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents: 4373
diff changeset
   552
3d01bc4547b2 mod_http_admin_api: Add /server/info endpoint for site_name and version
Matthew Wild <mwild1@gmail.com>
parents: 4373
diff changeset
   553
		["GET /server/info"] = get_server_info;
4347
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   554
	};
ee313922b8d1 mod_http_admin_api: HTTP API for managing users and invites
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   555
});