Annotate

plugins/mod_admin_adhoc.lua @ 12181:783056b4e448 0.11 0.11.12

util.xml: Do not allow doctypes, comments or processing instructions Yes. This is as bad as it sounds. CVE pending. In Prosody itself, this only affects mod_websocket, which uses util.xml to parse the <open/> frame, thus allowing unauthenticated remote DoS using Billion Laughs. However, third-party modules using util.xml may also be affected by this. This commit installs handlers which disallow the use of doctype declarations and processing instructions without any escape hatch. It, by default, also introduces such a handler for comments, however, there is a way to enable comments nontheless. This is because util.xml is used to parse human-facing data, where comments are generally a desirable feature, and also because comments are generally harmless.
author Jonas Schäfer <jonas@wielicki.name>
date Mon, 10 Jan 2022 18:23:54 +0100
parent 9402:b530b5daae91
child 10398:fa50789d6ec7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4292
894ffea639e9 mod_admin_adhoc: Add "Reload configuration" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 3778
diff changeset
1 -- Copyright (C) 2009-2011 Florian Zeitz
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
2 --
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
3 -- This file is MIT/X11 licensed. Please see the
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
4 -- COPYING file in the source package for more information.
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
5 --
9401
6329c07452b7 mod_admin_adhoc: Ignore shadowed 'err' variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9400
diff changeset
6 -- luacheck: ignore 212/self 212/data 212/state 412/err 422/err
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
7
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
8 local _G = _G;
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
9
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
10 local prosody = _G.prosody;
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
11 local hosts = prosody.hosts;
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
12 local t_concat = table.concat;
6458
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
13 local t_sort = table.sort;
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
14
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
15 local module_host = module:get_host();
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
16
5371
706206e191e8 mod_motd, mod_register, mod_private, mod_http_errors, mod_admin_adhoc: Remove unused imports
Kim Alvefur <zash@zash.se>
parents: 5329
diff changeset
17 local keys = require "util.iterators".keys;
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
18 local usermanager_user_exists = require "core.usermanager".user_exists;
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
19 local usermanager_create_user = require "core.usermanager".create_user;
5100
65207b768f60 mod_admin_adhoc: Use usermanager.delete_user to delete users
Kim Alvefur <zash@zash.se>
parents: 5076
diff changeset
20 local usermanager_delete_user = require "core.usermanager".delete_user;
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
21 local usermanager_get_password = require "core.usermanager".get_password;
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
22 local usermanager_set_password = require "core.usermanager".set_password;
5135
52eafe0e9772 mod_admin_adhoc: Add commands for activating and deactivating hosts
Kim Alvefur <zash@zash.se>
parents: 5100
diff changeset
23 local hostmanager_activate = require "core.hostmanager".activate;
52eafe0e9772 mod_admin_adhoc: Add commands for activating and deactivating hosts
Kim Alvefur <zash@zash.se>
parents: 5100
diff changeset
24 local hostmanager_deactivate = require "core.hostmanager".deactivate;
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
25 local rm_load_roster = require "core.rostermanager".load_roster;
5371
706206e191e8 mod_motd, mod_register, mod_private, mod_http_errors, mod_admin_adhoc: Remove unused imports
Kim Alvefur <zash@zash.se>
parents: 5329
diff changeset
26 local st, jid = require "util.stanza", require "util.jid";
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
27 local timer_add_task = require "util.timer".add_task;
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
28 local dataforms_new = require "util.dataforms".new;
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
29 local array = require "util.array";
6779
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6627
diff changeset
30 local modulemanager = require "core.modulemanager";
5013
ab693eea0869 mod_admin_adhoc, mod_admin_telnet, mod_bosh, mod_c2s, mod_component, mod_pep, mod_presence, mod_roster, mod_s2s: Import core_post_stanza from the global prosody table.
Kim Alvefur <zash@zash.se>
parents: 4993
diff changeset
31 local core_post_stanza = prosody.core_post_stanza;
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
32 local adhoc_simple = require "util.adhoc".new_simple_form;
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
33 local adhoc_initial = require "util.adhoc".new_initial_data_form;
6795
c4ee38d78594 mod_admin_adhoc: Import missing util.set (fixes #518)
Kim Alvefur <zash@zash.se>
parents: 6779
diff changeset
34 local set = require"util.set";
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
35
4780
4b8f2b91826c mod_admin_adhoc: Small style fix
Matthew Wild <mwild1@gmail.com>
parents: 4595
diff changeset
36 module:depends("adhoc");
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
37 local adhoc_new = module:require "adhoc".new;
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
38
4932
212e81ac6ebb mod_admin_web: Use util.dataforms' own error checking
Florian Zeitz <florob@babelmonkeys.de>
parents: 4926
diff changeset
39 local function generate_error_message(errors)
212e81ac6ebb mod_admin_web: Use util.dataforms' own error checking
Florian Zeitz <florob@babelmonkeys.de>
parents: 4926
diff changeset
40 local errmsg = {};
212e81ac6ebb mod_admin_web: Use util.dataforms' own error checking
Florian Zeitz <florob@babelmonkeys.de>
parents: 4926
diff changeset
41 for name, err in pairs(errors) do
212e81ac6ebb mod_admin_web: Use util.dataforms' own error checking
Florian Zeitz <florob@babelmonkeys.de>
parents: 4926
diff changeset
42 errmsg[#errmsg + 1] = name .. ": " .. err;
212e81ac6ebb mod_admin_web: Use util.dataforms' own error checking
Florian Zeitz <florob@babelmonkeys.de>
parents: 4926
diff changeset
43 end
212e81ac6ebb mod_admin_web: Use util.dataforms' own error checking
Florian Zeitz <florob@babelmonkeys.de>
parents: 4926
diff changeset
44 return { status = "completed", error = { message = t_concat(errmsg, "\n") } };
212e81ac6ebb mod_admin_web: Use util.dataforms' own error checking
Florian Zeitz <florob@babelmonkeys.de>
parents: 4926
diff changeset
45 end
212e81ac6ebb mod_admin_web: Use util.dataforms' own error checking
Florian Zeitz <florob@babelmonkeys.de>
parents: 4926
diff changeset
46
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
47 -- Adding a new user
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
48 local add_user_layout = dataforms_new{
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
49 title = "Adding a User";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
50 instructions = "Fill out this form to add a user.";
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
51
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
52 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
53 { name = "accountjid", type = "jid-single", required = true, label = "The Jabber ID for the account to be added" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
54 { name = "password", type = "text-private", label = "The password for this account" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
55 { name = "password-verify", type = "text-private", label = "Retype password" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
56 };
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
57
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
58 local add_user_command_handler = adhoc_simple(add_user_layout, function(fields, err)
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
59 if err then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
60 return generate_error_message(err);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
61 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
62 local username, host, resource = jid.split(fields.accountjid);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
63 if module_host ~= host then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
64 return { status = "completed", error = { message = "Trying to add a user on " .. host .. " but command was sent to " .. module_host}};
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
65 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
66 if (fields["password"] == fields["password-verify"]) and username and host then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
67 if usermanager_user_exists(username, host) then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
68 return { status = "completed", error = { message = "Account already exists" } };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
69 else
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
70 if usermanager_create_user(username, fields.password, host) then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
71 module:log("info", "Created new account %s@%s", username, host);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
72 return { status = "completed", info = "Account successfully created" };
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
73 else
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
74 return { status = "completed", error = { message = "Failed to write data to disk" } };
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
75 end
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
76 end
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
77 else
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
78 module:log("debug", "Invalid data, password mismatch or empty username while creating account for %s", fields.accountjid or "<nil>");
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
79 return { status = "completed", error = { message = "Invalid data.\nPassword mismatch, or empty username" } };
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
80 end
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
81 end);
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
82
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
83 -- Changing a user's password
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
84 local change_user_password_layout = dataforms_new{
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
85 title = "Changing a User Password";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
86 instructions = "Fill out this form to change a user's password.";
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
87
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
88 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
89 { name = "accountjid", type = "jid-single", required = true, label = "The Jabber ID for this account" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
90 { name = "password", type = "text-private", required = true, label = "The password for this account" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
91 };
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
92
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
93 local change_user_password_command_handler = adhoc_simple(change_user_password_layout, function(fields, err)
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
94 if err then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
95 return generate_error_message(err);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
96 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
97 local username, host, resource = jid.split(fields.accountjid);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
98 if module_host ~= host then
8769
e809074cdc09 mod_admin_adhoc: Split a long line (improves readability) [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8728
diff changeset
99 return {
e809074cdc09 mod_admin_adhoc: Split a long line (improves readability) [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8728
diff changeset
100 status = "completed",
e809074cdc09 mod_admin_adhoc: Split a long line (improves readability) [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8728
diff changeset
101 error = {
e809074cdc09 mod_admin_adhoc: Split a long line (improves readability) [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8728
diff changeset
102 message = "Trying to change the password of a user on " .. host .. " but command was sent to " .. module_host
e809074cdc09 mod_admin_adhoc: Split a long line (improves readability) [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8728
diff changeset
103 }
e809074cdc09 mod_admin_adhoc: Split a long line (improves readability) [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8728
diff changeset
104 };
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
105 end
8192
4354f556c5db core.usermanager, various modules: Disconnect other resources on password change (thanks waqas) (fixes #512)
Kim Alvefur <zash@zash.se>
parents: 7045
diff changeset
106 if usermanager_user_exists(username, host) and usermanager_set_password(username, fields.password, host, nil) then
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
107 return { status = "completed", info = "Password successfully changed" };
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
108 else
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
109 return { status = "completed", error = { message = "User does not exist" } };
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
110 end
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
111 end);
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
112
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
113 -- Reloading the config
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
114 local function config_reload_handler(self, data, state)
4292
894ffea639e9 mod_admin_adhoc: Add "Reload configuration" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 3778
diff changeset
115 local ok, err = prosody.reload_config();
894ffea639e9 mod_admin_adhoc: Add "Reload configuration" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 3778
diff changeset
116 if ok then
894ffea639e9 mod_admin_adhoc: Add "Reload configuration" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 3778
diff changeset
117 return { status = "completed", info = "Configuration reloaded (modules may need to be reloaded for this to have an effect)" };
894ffea639e9 mod_admin_adhoc: Add "Reload configuration" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 3778
diff changeset
118 else
894ffea639e9 mod_admin_adhoc: Add "Reload configuration" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 3778
diff changeset
119 return { status = "completed", error = { message = "Failed to reload config: " .. tostring(err) } };
894ffea639e9 mod_admin_adhoc: Add "Reload configuration" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 3778
diff changeset
120 end
894ffea639e9 mod_admin_adhoc: Add "Reload configuration" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 3778
diff changeset
121 end
894ffea639e9 mod_admin_adhoc: Add "Reload configuration" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 3778
diff changeset
122
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
123 -- Deleting a user's account
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
124 local delete_user_layout = dataforms_new{
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
125 title = "Deleting a User";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
126 instructions = "Fill out this form to delete a user.";
4292
894ffea639e9 mod_admin_adhoc: Add "Reload configuration" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 3778
diff changeset
127
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
128 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
6462
fcff8fa495d4 mod_admin_adhoc: Add required to field in user deletion form too
Kim Alvefur <zash@zash.se>
parents: 6461
diff changeset
129 { name = "accountjids", type = "jid-multi", required = true, label = "The Jabber ID(s) to delete" };
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
130 };
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
131
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
132 local delete_user_command_handler = adhoc_simple(delete_user_layout, function(fields, err)
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
133 if err then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
134 return generate_error_message(err);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
135 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
136 local failed = {};
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
137 local succeeded = {};
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
138 for _, aJID in ipairs(fields.accountjids) do
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
139 local username, host, resource = jid.split(aJID);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
140 if (host == module_host) and usermanager_user_exists(username, host) and usermanager_delete_user(username, host) then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
141 module:log("debug", "User %s has been deleted", aJID);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
142 succeeded[#succeeded+1] = aJID;
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
143 else
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
144 module:log("debug", "Tried to delete non-existant user %s", aJID);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
145 failed[#failed+1] = aJID;
4932
212e81ac6ebb mod_admin_web: Use util.dataforms' own error checking
Florian Zeitz <florob@babelmonkeys.de>
parents: 4926
diff changeset
146 end
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
147 end
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
148 return {status = "completed", info = (#succeeded ~= 0 and
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
149 "The following accounts were successfully deleted:\n"..t_concat(succeeded, "\n").."\n" or "")..
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
150 (#failed ~= 0 and
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
151 "The following accounts could not be deleted:\n"..t_concat(failed, "\n") or "") };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
152 end);
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
153
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
154 -- Ending a user's session
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
155 local function disconnect_user(match_jid)
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
156 local node, hostname, givenResource = jid.split(match_jid);
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
157 local host = hosts[hostname];
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
158 local sessions = host.sessions[node] and host.sessions[node].sessions;
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
159 for resource, session in pairs(sessions or {}) do
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
160 if not givenResource or (resource == givenResource) then
4993
5243b74a4cbb Hopefully inert commit to clean up logging across a number of modules, removing all cases of concatenation when building log messages
Matthew Wild <mwild1@gmail.com>
parents: 4956
diff changeset
161 module:log("debug", "Disconnecting %s@%s/%s", node, hostname, resource);
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
162 session:close();
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
163 end
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
164 end
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
165 return true;
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
166 end
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
167
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
168 local end_user_session_layout = dataforms_new{
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
169 title = "Ending a User Session";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
170 instructions = "Fill out this form to end a user's session.";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
171
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
172 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
6461
6b38bfaafe0c mod_admin_adhoc: Mark 'accountjids' field as required in 'end user sessions' command (thanks Lloyd)
Kim Alvefur <zash@zash.se>
parents: 5721
diff changeset
173 { name = "accountjids", type = "jid-multi", label = "The Jabber ID(s) for which to end sessions", required = true };
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
174 };
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
175
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
176 local end_user_session_handler = adhoc_simple(end_user_session_layout, function(fields, err)
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
177 if err then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
178 return generate_error_message(err);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
179 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
180 local failed = {};
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
181 local succeeded = {};
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
182 for _, aJID in ipairs(fields.accountjids) do
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
183 local username, host, resource = jid.split(aJID);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
184 if (host == module_host) and usermanager_user_exists(username, host) and disconnect_user(aJID) then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
185 succeeded[#succeeded+1] = aJID;
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
186 else
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
187 failed[#failed+1] = aJID;
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
188 end
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
189 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
190 return {status = "completed", info = (#succeeded ~= 0 and
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
191 "The following accounts were successfully disconnected:\n"..t_concat(succeeded, "\n").."\n" or "")..
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
192 (#failed ~= 0 and
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
193 "The following accounts could not be disconnected:\n"..t_concat(failed, "\n") or "") };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
194 end);
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
195
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
196 -- Getting a user's password
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
197 local get_user_password_layout = dataforms_new{
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
198 title = "Getting User's Password";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
199 instructions = "Fill out this form to get a user's password.";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
200
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
201 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
202 { name = "accountjid", type = "jid-single", required = true, label = "The Jabber ID for which to retrieve the password" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
203 };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
204
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
205 local get_user_password_result_layout = dataforms_new{
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
206 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
207 { name = "accountjid", type = "jid-single", label = "JID" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
208 { name = "password", type = "text-single", label = "Password" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
209 };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
210
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
211 local get_user_password_handler = adhoc_simple(get_user_password_layout, function(fields, err)
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
212 if err then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
213 return generate_error_message(err);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
214 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
215 local user, host, resource = jid.split(fields.accountjid);
8770
9c9b198bab84 mod_admin_adhoc: Remove unused initial values [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8769
diff changeset
216 local accountjid;
9c9b198bab84 mod_admin_adhoc: Remove unused initial values [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8769
diff changeset
217 local password;
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
218 if host ~= module_host then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
219 return { status = "completed", error = { message = "Tried to get password for a user on " .. host .. " but command was sent to " .. module_host } };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
220 elseif usermanager_user_exists(user, host) then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
221 accountjid = fields.accountjid;
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
222 password = usermanager_get_password(user, host);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
223 else
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
224 return { status = "completed", error = { message = "User does not exist" } };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
225 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
226 return { status = "completed", result = { layout = get_user_password_result_layout, values = {accountjid = accountjid, password = password} } };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
227 end);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
228
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
229 -- Getting a user's roster
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
230 local get_user_roster_layout = dataforms_new{
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
231 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
232 { name = "accountjid", type = "jid-single", required = true, label = "The Jabber ID for which to retrieve the roster" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
233 };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
234
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
235 local get_user_roster_result_layout = dataforms_new{
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
236 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
237 { name = "accountjid", type = "jid-single", label = "This is the roster for" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
238 { name = "roster", type = "text-multi", label = "Roster XML" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
239 };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
240
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
241 local get_user_roster_handler = adhoc_simple(get_user_roster_layout, function(fields, err)
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
242 if err then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
243 return generate_error_message(err);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
244 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
245
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
246 local user, host, resource = jid.split(fields.accountjid);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
247 if host ~= module_host then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
248 return { status = "completed", error = { message = "Tried to get roster for a user on " .. host .. " but command was sent to " .. module_host } };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
249 elseif not usermanager_user_exists(user, host) then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
250 return { status = "completed", error = { message = "User does not exist" } };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
251 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
252 local roster = rm_load_roster(user, host);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
253
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
254 local query = st.stanza("query", { xmlns = "jabber:iq:roster" });
8771
82bdeb8009ce mod_admin_adhoc: Rename variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8770
diff changeset
255 for contact_jid in pairs(roster) do
82bdeb8009ce mod_admin_adhoc: Rename variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8770
diff changeset
256 if contact_jid then
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
257 query:tag("item", {
8771
82bdeb8009ce mod_admin_adhoc: Rename variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8770
diff changeset
258 jid = contact_jid,
82bdeb8009ce mod_admin_adhoc: Rename variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8770
diff changeset
259 subscription = roster[contact_jid].subscription,
82bdeb8009ce mod_admin_adhoc: Rename variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8770
diff changeset
260 ask = roster[contact_jid].ask,
82bdeb8009ce mod_admin_adhoc: Rename variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8770
diff changeset
261 name = roster[contact_jid].name,
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
262 });
8771
82bdeb8009ce mod_admin_adhoc: Rename variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8770
diff changeset
263 for group in pairs(roster[contact_jid].groups) do
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
264 query:tag("group"):text(group):up();
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
265 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
266 query:up();
4932
212e81ac6ebb mod_admin_web: Use util.dataforms' own error checking
Florian Zeitz <florob@babelmonkeys.de>
parents: 4926
diff changeset
267 end
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
268 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
269
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
270 local query_text = tostring(query):gsub("><", ">\n<");
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
271
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
272 local result = get_user_roster_result_layout:form({ accountjid = user.."@"..host, roster = query_text }, "result");
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
273 result:add_child(query);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
274 return { status = "completed", other = result };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
275 end);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
276
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
277 -- Getting user statistics
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
278 local get_user_stats_layout = dataforms_new{
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
279 title = "Get User Statistics";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
280 instructions = "Fill out this form to gather user statistics.";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
281
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
282 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
283 { name = "accountjid", type = "jid-single", required = true, label = "The Jabber ID for statistics" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
284 };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
285
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
286 local get_user_stats_result_layout = dataforms_new{
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
287 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
288 { name = "ipaddresses", type = "text-multi", label = "IP Addresses" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
289 { name = "rostersize", type = "text-single", label = "Roster size" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
290 { name = "onlineresources", type = "text-multi", label = "Online Resources" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
291 };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
292
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
293 local get_user_stats_handler = adhoc_simple(get_user_stats_layout, function(fields, err)
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
294 if err then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
295 return generate_error_message(err);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
296 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
297
9399
ec60e74fd9bb mod_admin_adhoc: Remove unused loop variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9086
diff changeset
298 local user, host = jid.split(fields.accountjid);
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
299 if host ~= module_host then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
300 return { status = "completed", error = { message = "Tried to get stats for a user on " .. host .. " but command was sent to " .. module_host } };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
301 elseif not usermanager_user_exists(user, host) then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
302 return { status = "completed", error = { message = "User does not exist" } };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
303 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
304 local roster = rm_load_roster(user, host);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
305 local rostersize = 0;
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
306 local IPs = "";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
307 local resources = "";
8772
375f2e663cea mod_admin_adhoc: Rename loop variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8771
diff changeset
308 for contact_jid in pairs(roster) do
375f2e663cea mod_admin_adhoc: Rename loop variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8771
diff changeset
309 if contact_jid then
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
310 rostersize = rostersize + 1;
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
311 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
312 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
313 for resource, session in pairs((hosts[host].sessions[user] and hosts[host].sessions[user].sessions) or {}) do
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
314 resources = resources .. "\n" .. resource;
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
315 IPs = IPs .. "\n" .. session.ip;
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
316 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
317 return { status = "completed", result = {layout = get_user_stats_result_layout, values = {ipaddresses = IPs, rostersize = tostring(rostersize),
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
318 onlineresources = resources}} };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
319 end);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
320
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
321 -- Getting a list of online users
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
322 local get_online_users_layout = dataforms_new{
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
323 title = "Getting List of Online Users";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
324 instructions = "How many users should be returned at most?";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
325
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
326 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
327 { name = "max_items", type = "list-single", label = "Maximum number of users",
9085
9bd38bbf8623 mod_admin_adhoc: Keep options for list-single in 'options' field where they belong
Kim Alvefur <zash@zash.se>
parents: 8773
diff changeset
328 options = { "25", "50", "75", "100", "150", "200", "all" } };
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
329 { name = "details", type = "boolean", label = "Show details" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
330 };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
331
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
332 local get_online_users_result_layout = dataforms_new{
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
333 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
334 { name = "onlineuserjids", type = "text-multi", label = "The list of all online users" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
335 };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
336
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
337 local get_online_users_command_handler = adhoc_simple(get_online_users_layout, function(fields, err)
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
338 if err then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
339 return generate_error_message(err);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
340 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
341
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
342 local max_items = nil
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
343 if fields.max_items ~= "all" then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
344 max_items = tonumber(fields.max_items);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
345 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
346 local count = 0;
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
347 local users = {};
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
348 for username, user in pairs(hosts[module_host].sessions or {}) do
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
349 if (max_items ~= nil) and (count >= max_items) then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
350 break;
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
351 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
352 users[#users+1] = username.."@"..module_host;
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
353 count = count + 1;
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
354 if fields.details then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
355 for resource, session in pairs(user.sessions or {}) do
6457
ddcb29a35409 mod_admin_adhoc: Show IP in detailed version of online user listing
Florian Zeitz <florob@babelmonkeys.de>
parents: 5818
diff changeset
356 local status, priority, ip = "unavailable", tostring(session.priority or "-"), session.ip or "<unknown>";
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
357 if session.presence then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
358 status = session.presence:child_with_name("show");
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
359 if status then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
360 status = status:get_text() or "[invalid!]";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
361 else
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
362 status = "available";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
363 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
364 end
6457
ddcb29a35409 mod_admin_adhoc: Show IP in detailed version of online user listing
Florian Zeitz <florob@babelmonkeys.de>
parents: 5818
diff changeset
365 users[#users+1] = " - "..resource..": "..status.."("..priority.."), IP: ["..ip.."]";
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
366 end
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
367 end
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
368 end
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
369 return { status = "completed", result = {layout = get_online_users_result_layout, values = {onlineuserjids=t_concat(users, "\n")}} };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
370 end);
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
371
6458
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
372 -- Getting a list of S2S connections (this host)
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
373 local list_s2s_this_result = dataforms_new {
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
374 title = "List of S2S connections on this host";
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
375
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
376 { name = "FORM_TYPE", type = "hidden", value = "http://prosody.im/protocol/s2s#list" };
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
377 { name = "sessions", type = "text-multi", label = "Connections:" };
8728
41c959c5c84b Fix spelling throughout the codebase [codespell]
Kim Alvefur <zash@zash.se>
parents: 8192
diff changeset
378 { name = "num_in", type = "text-single", label = "#incoming connections:" };
6458
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
379 { name = "num_out", type = "text-single", label = "#outgoing connections:" };
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
380 };
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
381
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
382 local function session_flags(session, line)
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
383 line = line or {};
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
384
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
385 if session.id then
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
386 line[#line+1] = "["..session.id.."]"
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
387 else
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
388 line[#line+1] = "["..session.type..(tostring(session):match("%x*$")).."]"
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
389 end
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
390
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
391 local flags = {};
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
392 if session.cert_identity_status == "valid" then
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
393 flags[#flags+1] = "authenticated";
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
394 end
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
395 if session.secure then
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
396 flags[#flags+1] = "encrypted";
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
397 end
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
398 if session.compressed then
7044
8fcee3339463 mod_admin_adhoc: Remove extra ) that should not be there
Kim Alvefur <zash@zash.se>
parents: 6796
diff changeset
399 flags[#flags+1] = "compressed";
6458
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
400 end
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
401 if session.smacks then
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
402 flags[#flags+1] = "sm";
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
403 end
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
404 if session.ip and session.ip:match(":") then
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
405 flags[#flags+1] = "IPv6";
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
406 end
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
407 line[#line+1] = "("..t_concat(flags, ", ")..")";
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
408
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
409 return t_concat(line, " ");
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
410 end
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
411
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
412 local function list_s2s_this_handler(self, data, state)
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
413 local count_in, count_out = 0, 0;
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
414 local s2s_list = {};
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
415
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
416 local s2s_sessions = module:shared"/*/s2s/sessions";
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
417 for _, session in pairs(s2s_sessions) do
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
418 local remotehost, localhost, direction;
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
419 if session.direction == "outgoing" then
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
420 direction = "->";
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
421 count_out = count_out + 1;
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
422 remotehost, localhost = session.to_host or "?", session.from_host or "?";
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
423 else
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
424 direction = "<-";
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
425 count_in = count_in + 1;
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
426 remotehost, localhost = session.from_host or "?", session.to_host or "?";
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
427 end
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
428 local sess_lines = { r = remotehost,
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
429 session_flags(session, { "", direction, remotehost or "?" })};
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
430
7045
49e2456bf2ce mod_admin_adhoc: Show only connections to/from the host the command was run on
Kim Alvefur <zash@zash.se>
parents: 7044
diff changeset
431 if localhost == module_host then
6458
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
432 s2s_list[#s2s_list+1] = sess_lines;
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
433 end
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
434 end
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
435
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
436 t_sort(s2s_list, function(a, b)
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
437 return a.r < b.r;
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
438 end);
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
439
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
440 for i, sess_lines in ipairs(s2s_list) do
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
441 s2s_list[i] = sess_lines[1];
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
442 end
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
443
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
444 return { status = "completed", result = { layout = list_s2s_this_result; values = {
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
445 sessions = t_concat(s2s_list, "\n"),
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
446 num_in = tostring(count_in),
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
447 num_out = tostring(count_out)
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
448 } } };
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
449 end
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
450
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
451 -- Getting a list of loaded modules
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
452 local list_modules_result = dataforms_new {
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
453 title = "List of loaded modules";
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
454
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
455 { name = "FORM_TYPE", type = "hidden", value = "http://prosody.im/protocol/modules#list" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
456 { name = "modules", type = "text-multi", label = "The following modules are loaded:" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
457 };
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
458
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
459 local function list_modules_handler(self, data, state)
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
460 local modules = array.collect(keys(hosts[module_host].modules)):sort():concat("\n");
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
461 return { status = "completed", result = { layout = list_modules_result; values = { modules = modules } } };
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
462 end
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
463
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
464 -- Loading a module
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
465 local load_module_layout = dataforms_new {
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
466 title = "Load module";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
467 instructions = "Specify the module to be loaded";
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
468
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
469 { name = "FORM_TYPE", type = "hidden", value = "http://prosody.im/protocol/modules#load" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
470 { name = "module", type = "text-single", required = true, label = "Module to be loaded:"};
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
471 };
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
472
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
473 local load_module_handler = adhoc_simple(load_module_layout, function(fields, err)
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
474 if err then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
475 return generate_error_message(err);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
476 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
477 if modulemanager.is_loaded(module_host, fields.module) then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
478 return { status = "completed", info = "Module already loaded" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
479 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
480 local ok, err = modulemanager.load(module_host, fields.module);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
481 if ok then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
482 return { status = "completed", info = 'Module "'..fields.module..'" successfully loaded on host "'..module_host..'".' };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
483 else
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
484 return { status = "completed", error = { message = 'Failed to load module "'..fields.module..'" on host "'..module_host..
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
485 '". Error was: "'..tostring(err or "<unspecified>")..'"' } };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
486 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
487 end);
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
488
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
489 -- Globally loading a module
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
490 local globally_load_module_layout = dataforms_new {
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
491 title = "Globally load module";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
492 instructions = "Specify the module to be loaded on all hosts";
4932
212e81ac6ebb mod_admin_web: Use util.dataforms' own error checking
Florian Zeitz <florob@babelmonkeys.de>
parents: 4926
diff changeset
493
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
494 { name = "FORM_TYPE", type = "hidden", value = "http://prosody.im/protocol/modules#global-load" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
495 { name = "module", type = "text-single", required = true, label = "Module to globally load:"};
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
496 };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
497
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
498 local globally_load_module_handler = adhoc_simple(globally_load_module_layout, function(fields, err)
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
499 local ok_list, err_list = {}, {};
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
500
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
501 if err then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
502 return generate_error_message(err);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
503 end
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
504
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
505 local ok, err = modulemanager.load(module_host, fields.module);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
506 if ok then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
507 ok_list[#ok_list + 1] = module_host;
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
508 else
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
509 err_list[#err_list + 1] = module_host .. " (Error: " .. tostring(err) .. ")";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
510 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
511
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
512 -- Is this a global module?
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
513 if modulemanager.is_loaded("*", fields.module) and not modulemanager.is_loaded(module_host, fields.module) then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
514 return { status = "completed", info = 'Global module '..fields.module..' loaded.' };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
515 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
516
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
517 -- This is either a shared or "normal" module, load it on all other hosts
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
518 for host_name, host in pairs(hosts) do
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
519 if host_name ~= module_host and host.type == "local" then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
520 local ok, err = modulemanager.load(host_name, fields.module);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
521 if ok then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
522 ok_list[#ok_list + 1] = host_name;
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
523 else
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
524 err_list[#err_list + 1] = host_name .. " (Error: " .. tostring(err) .. ")";
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
525 end
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
526 end
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
527 end
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
528
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
529 local info = (#ok_list > 0 and ("The module "..fields.module.." was successfully loaded onto the hosts:\n"..t_concat(ok_list, "\n")) or "")
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
530 .. ((#ok_list > 0 and #err_list > 0) and "\n" or "") ..
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
531 (#err_list > 0 and ("Failed to load the module "..fields.module.." onto the hosts:\n"..t_concat(err_list, "\n")) or "");
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
532 return { status = "completed", info = info };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
533 end);
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
534
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
535 -- Reloading modules
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
536 local reload_modules_layout = dataforms_new {
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
537 title = "Reload modules";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
538 instructions = "Select the modules to be reloaded";
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
539
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
540 { name = "FORM_TYPE", type = "hidden", value = "http://prosody.im/protocol/modules#reload" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
541 { name = "modules", type = "list-multi", required = true, label = "Modules to be reloaded:"};
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
542 };
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
543
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
544 local reload_modules_handler = adhoc_initial(reload_modules_layout, function()
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
545 return { modules = array.collect(keys(hosts[module_host].modules)):sort() };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
546 end, function(fields, err)
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
547 if err then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
548 return generate_error_message(err);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
549 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
550 local ok_list, err_list = {}, {};
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
551 for _, module in ipairs(fields.modules) do
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
552 local ok, err = modulemanager.reload(module_host, module);
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
553 if ok then
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
554 ok_list[#ok_list + 1] = module;
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
555 else
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
556 err_list[#err_list + 1] = module .. "(Error: " .. tostring(err) .. ")";
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
557 end
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
558 end
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
559 local info = (#ok_list > 0 and ("The following modules were successfully reloaded on host "..module_host..":\n"..t_concat(ok_list, "\n")) or "")
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
560 .. ((#ok_list > 0 and #err_list > 0) and "\n" or "") ..
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
561 (#err_list > 0 and ("Failed to reload the following modules on host "..module_host..":\n"..t_concat(err_list, "\n")) or "");
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
562 return { status = "completed", info = info };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
563 end);
5325
97bf651e32a4 mod_admin_adhoc: Implement global module loading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5324
diff changeset
564
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
565 -- Globally reloading a module
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
566 local globally_reload_module_layout = dataforms_new {
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
567 title = "Globally reload module";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
568 instructions = "Specify the module to reload on all hosts";
5325
97bf651e32a4 mod_admin_adhoc: Implement global module loading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5324
diff changeset
569
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
570 { name = "FORM_TYPE", type = "hidden", value = "http://prosody.im/protocol/modules#global-reload" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
571 { name = "module", type = "list-single", required = true, label = "Module to globally reload:"};
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
572 };
5325
97bf651e32a4 mod_admin_adhoc: Implement global module loading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5324
diff changeset
573
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
574 local globally_reload_module_handler = adhoc_initial(globally_reload_module_layout, function()
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
575 local loaded_modules = array(keys(modulemanager.get_modules("*")));
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
576 for _, host in pairs(hosts) do
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
577 loaded_modules:append(array(keys(host.modules)));
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
578 end
5818
5733a277237a mod_admin_adhoc: As the only user of set:items(), update... it's now an iterator, and the extra keys() iterator is now unnecessary
Matthew Wild <mwild1@gmail.com>
parents: 5721
diff changeset
579 loaded_modules = array(set.new(loaded_modules):items()):sort();
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
580 return { module = loaded_modules };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
581 end, function(fields, err)
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
582 local is_global = false;
5325
97bf651e32a4 mod_admin_adhoc: Implement global module loading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5324
diff changeset
583
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
584 if err then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
585 return generate_error_message(err);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
586 end
5325
97bf651e32a4 mod_admin_adhoc: Implement global module loading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5324
diff changeset
587
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
588 if modulemanager.is_loaded("*", fields.module) then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
589 local ok, err = modulemanager.reload("*", fields.module);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
590 if not ok then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
591 return { status = "completed", info = 'Global module '..fields.module..' failed to reload: '..err };
5325
97bf651e32a4 mod_admin_adhoc: Implement global module loading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5324
diff changeset
592 end
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
593 is_global = true;
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
594 end
5325
97bf651e32a4 mod_admin_adhoc: Implement global module loading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5324
diff changeset
595
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
596 local ok_list, err_list = {}, {};
9399
ec60e74fd9bb mod_admin_adhoc: Remove unused loop variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9086
diff changeset
597 for host_name in pairs(hosts) do
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
598 if modulemanager.is_loaded(host_name, fields.module) then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
599 local ok, err = modulemanager.reload(host_name, fields.module);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
600 if ok then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
601 ok_list[#ok_list + 1] = host_name;
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
602 else
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
603 err_list[#err_list + 1] = host_name .. " (Error: " .. tostring(err) .. ")";
5325
97bf651e32a4 mod_admin_adhoc: Implement global module loading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5324
diff changeset
604 end
97bf651e32a4 mod_admin_adhoc: Implement global module loading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5324
diff changeset
605 end
97bf651e32a4 mod_admin_adhoc: Implement global module loading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5324
diff changeset
606 end
5327
b0c36b043f00 mod_admin_adhoc: Implement global module reloading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5326
diff changeset
607
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
608 if #ok_list == 0 and #err_list == 0 then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
609 if is_global then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
610 return { status = "completed", info = 'Successfully reloaded global module '..fields.module };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
611 else
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
612 return { status = "completed", info = 'Module '..fields.module..' not loaded on any host.' };
5327
b0c36b043f00 mod_admin_adhoc: Implement global module reloading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5326
diff changeset
613 end
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
614 end
5327
b0c36b043f00 mod_admin_adhoc: Implement global module reloading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5326
diff changeset
615
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
616 local info = (#ok_list > 0 and ("The module "..fields.module.." was successfully reloaded on the hosts:\n"..t_concat(ok_list, "\n")) or "")
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
617 .. ((#ok_list > 0 and #err_list > 0) and "\n" or "") ..
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
618 (#err_list > 0 and ("Failed to reload the module "..fields.module.." on the hosts:\n"..t_concat(err_list, "\n")) or "");
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
619 return { status = "completed", info = info };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
620 end);
5327
b0c36b043f00 mod_admin_adhoc: Implement global module reloading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5326
diff changeset
621
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
622 local function send_to_online(message, server)
6796
87ec4e783ebd mod_admin_adhoc: Declare local variable, don't set a global [luacheck]
Kim Alvefur <zash@zash.se>
parents: 6795
diff changeset
623 local sessions;
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
624 if server then
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
625 sessions = { [server] = hosts[server] };
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
626 else
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
627 sessions = hosts;
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
628 end
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
629
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
630 local c = 0;
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
631 for domain, session in pairs(sessions) do
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
632 for user in pairs(session.sessions or {}) do
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
633 c = c + 1;
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
634 message.attr.from = domain;
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
635 message.attr.to = user.."@"..domain;
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
636 core_post_stanza(session, message);
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
637 end
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
638 end
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
639
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
640 return c;
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
641 end
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
642
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
643 -- Shutting down the service
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
644 local shut_down_service_layout = dataforms_new{
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
645 title = "Shutting Down the Service";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
646 instructions = "Fill out this form to shut down the service.";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
647
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
648 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
649 { name = "delay", type = "list-single", label = "Time delay before shutting down",
9085
9bd38bbf8623 mod_admin_adhoc: Keep options for list-single in 'options' field where they belong
Kim Alvefur <zash@zash.se>
parents: 8773
diff changeset
650 value = "5",
9bd38bbf8623 mod_admin_adhoc: Keep options for list-single in 'options' field where they belong
Kim Alvefur <zash@zash.se>
parents: 8773
diff changeset
651 options = {
9086
74b4be5afb74 mod_admin_adhoc: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 9085
diff changeset
652 {label = "5 seconds", value = "5"},
74b4be5afb74 mod_admin_adhoc: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 9085
diff changeset
653 {label = "30 seconds", value = "30"},
74b4be5afb74 mod_admin_adhoc: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 9085
diff changeset
654 {label = "60 seconds", value = "60"},
74b4be5afb74 mod_admin_adhoc: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 9085
diff changeset
655 {label = "90 seconds", value = "90"},
74b4be5afb74 mod_admin_adhoc: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 9085
diff changeset
656 {label = "2 minutes", value = "120"},
74b4be5afb74 mod_admin_adhoc: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 9085
diff changeset
657 {label = "3 minutes", value = "180"},
74b4be5afb74 mod_admin_adhoc: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 9085
diff changeset
658 {label = "4 minutes", value = "240"},
74b4be5afb74 mod_admin_adhoc: Normalize indentation
Kim Alvefur <zash@zash.se>
parents: 9085
diff changeset
659 {label = "5 minutes", value = "300"},
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
660 };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
661 };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
662 { name = "announcement", type = "text-multi", label = "Announcement" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
663 };
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
664
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
665 local shut_down_service_handler = adhoc_simple(shut_down_service_layout, function(fields, err)
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
666 if err then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
667 return generate_error_message(err);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
668 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
669
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
670 if fields.announcement and #fields.announcement > 0 then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
671 local message = st.message({type = "headline"}, fields.announcement):up()
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
672 :tag("subject"):text("Server is shutting down");
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
673 send_to_online(message);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
674 end
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
675
9400
9ef746c2a644 mod_admin_adhoc: Remove unused argument [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9399
diff changeset
676 timer_add_task(tonumber(fields.delay or "5"), function() prosody.shutdown("Shutdown by adhoc command") end);
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
677
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
678 return { status = "completed", info = "Server is about to shut down" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
679 end);
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
680
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
681 -- Unloading modules
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
682 local unload_modules_layout = dataforms_new {
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
683 title = "Unload modules";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
684 instructions = "Select the modules to be unloaded";
4932
212e81ac6ebb mod_admin_web: Use util.dataforms' own error checking
Florian Zeitz <florob@babelmonkeys.de>
parents: 4926
diff changeset
685
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
686 { name = "FORM_TYPE", type = "hidden", value = "http://prosody.im/protocol/modules#unload" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
687 { name = "modules", type = "list-multi", required = true, label = "Modules to be unloaded:"};
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
688 };
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
689
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
690 local unload_modules_handler = adhoc_initial(unload_modules_layout, function()
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
691 return { modules = array.collect(keys(hosts[module_host].modules)):sort() };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
692 end, function(fields, err)
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
693 if err then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
694 return generate_error_message(err);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
695 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
696 local ok_list, err_list = {}, {};
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
697 for _, module in ipairs(fields.modules) do
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
698 local ok, err = modulemanager.unload(module_host, module);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
699 if ok then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
700 ok_list[#ok_list + 1] = module;
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
701 else
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
702 err_list[#err_list + 1] = module .. "(Error: " .. tostring(err) .. ")";
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
703 end
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
704 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
705 local info = (#ok_list > 0 and ("The following modules were successfully unloaded on host "..module_host..":\n"..t_concat(ok_list, "\n")) or "")
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
706 .. ((#ok_list > 0 and #err_list > 0) and "\n" or "") ..
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
707 (#err_list > 0 and ("Failed to unload the following modules on host "..module_host..":\n"..t_concat(err_list, "\n")) or "");
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
708 return { status = "completed", info = info };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
709 end);
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
710
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
711 -- Globally unloading a module
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
712 local globally_unload_module_layout = dataforms_new {
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
713 title = "Globally unload module";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
714 instructions = "Specify a module to unload on all hosts";
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
715
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
716 { name = "FORM_TYPE", type = "hidden", value = "http://prosody.im/protocol/modules#global-unload" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
717 { name = "module", type = "list-single", required = true, label = "Module to globally unload:"};
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
718 };
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
719
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
720 local globally_unload_module_handler = adhoc_initial(globally_unload_module_layout, function()
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
721 local loaded_modules = array(keys(modulemanager.get_modules("*")));
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
722 for _, host in pairs(hosts) do
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
723 loaded_modules:append(array(keys(host.modules)));
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
724 end
5818
5733a277237a mod_admin_adhoc: As the only user of set:items(), update... it's now an iterator, and the extra keys() iterator is now unnecessary
Matthew Wild <mwild1@gmail.com>
parents: 5721
diff changeset
725 loaded_modules = array(set.new(loaded_modules):items()):sort();
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
726 return { module = loaded_modules };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
727 end, function(fields, err)
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
728 local is_global = false;
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
729 if err then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
730 return generate_error_message(err);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
731 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
732
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
733 if modulemanager.is_loaded("*", fields.module) then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
734 local ok, err = modulemanager.unload("*", fields.module);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
735 if not ok then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
736 return { status = "completed", info = 'Global module '..fields.module..' failed to unload: '..err };
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
737 end
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
738 is_global = true;
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
739 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
740
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
741 local ok_list, err_list = {}, {};
9399
ec60e74fd9bb mod_admin_adhoc: Remove unused loop variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9086
diff changeset
742 for host_name in pairs(hosts) do
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
743 if modulemanager.is_loaded(host_name, fields.module) then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
744 local ok, err = modulemanager.unload(host_name, fields.module);
3778
bd1845f9d5a4 mod_admin_adhoc: Support unloading multiple modules
Florian Zeitz <florob@babelmonkeys.de>
parents: 3777
diff changeset
745 if ok then
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
746 ok_list[#ok_list + 1] = host_name;
3778
bd1845f9d5a4 mod_admin_adhoc: Support unloading multiple modules
Florian Zeitz <florob@babelmonkeys.de>
parents: 3777
diff changeset
747 else
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
748 err_list[#err_list + 1] = host_name .. " (Error: " .. tostring(err) .. ")";
3778
bd1845f9d5a4 mod_admin_adhoc: Support unloading multiple modules
Florian Zeitz <florob@babelmonkeys.de>
parents: 3777
diff changeset
749 end
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
750 end
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
751 end
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
752
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
753 if #ok_list == 0 and #err_list == 0 then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
754 if is_global then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
755 return { status = "completed", info = 'Successfully unloaded global module '..fields.module };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
756 else
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
757 return { status = "completed", info = 'Module '..fields.module..' not loaded on any host.' };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
758 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
759 end
5328
5e15e6700412 mod_admin_adhoc: Implement global module unloading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5327
diff changeset
760
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
761 local info = (#ok_list > 0 and ("The module "..fields.module.." was successfully unloaded on the hosts:\n"..t_concat(ok_list, "\n")) or "")
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
762 .. ((#ok_list > 0 and #err_list > 0) and "\n" or "") ..
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
763 (#err_list > 0 and ("Failed to unload the module "..fields.module.." on the hosts:\n"..t_concat(err_list, "\n")) or "");
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
764 return { status = "completed", info = info };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
765 end);
5328
5e15e6700412 mod_admin_adhoc: Implement global module unloading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5327
diff changeset
766
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
767 -- Activating a host
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
768 local activate_host_layout = dataforms_new {
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
769 title = "Activate host";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
770 instructions = "";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
771
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
772 { name = "FORM_TYPE", type = "hidden", value = "http://prosody.im/protocol/hosts#activate" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
773 { name = "host", type = "text-single", required = true, label = "Host:"};
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
774 };
5328
5e15e6700412 mod_admin_adhoc: Implement global module unloading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5327
diff changeset
775
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
776 local activate_host_handler = adhoc_simple(activate_host_layout, function(fields, err)
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
777 if err then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
778 return generate_error_message(err);
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
779 end
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
780 local ok, err = hostmanager_activate(fields.host);
5328
5e15e6700412 mod_admin_adhoc: Implement global module unloading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5327
diff changeset
781
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
782 if ok then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
783 return { status = "completed", info = fields.host .. " activated" };
5328
5e15e6700412 mod_admin_adhoc: Implement global module unloading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5327
diff changeset
784 else
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
785 return { status = "canceled", error = err }
5328
5e15e6700412 mod_admin_adhoc: Implement global module unloading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5327
diff changeset
786 end
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
787 end);
5328
5e15e6700412 mod_admin_adhoc: Implement global module unloading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5327
diff changeset
788
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
789 -- Deactivating a host
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
790 local deactivate_host_layout = dataforms_new {
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
791 title = "Deactivate host";
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
792 instructions = "";
5135
52eafe0e9772 mod_admin_adhoc: Add commands for activating and deactivating hosts
Kim Alvefur <zash@zash.se>
parents: 5100
diff changeset
793
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
794 { name = "FORM_TYPE", type = "hidden", value = "http://prosody.im/protocol/hosts#activate" };
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
795 { name = "host", type = "text-single", required = true, label = "Host:"};
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
796 };
5135
52eafe0e9772 mod_admin_adhoc: Add commands for activating and deactivating hosts
Kim Alvefur <zash@zash.se>
parents: 5100
diff changeset
797
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
798 local deactivate_host_handler = adhoc_simple(deactivate_host_layout, function(fields, err)
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
799 if err then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
800 return generate_error_message(err);
5135
52eafe0e9772 mod_admin_adhoc: Add commands for activating and deactivating hosts
Kim Alvefur <zash@zash.se>
parents: 5100
diff changeset
801 end
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
802 local ok, err = hostmanager_deactivate(fields.host);
5135
52eafe0e9772 mod_admin_adhoc: Add commands for activating and deactivating hosts
Kim Alvefur <zash@zash.se>
parents: 5100
diff changeset
803
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
804 if ok then
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
805 return { status = "completed", info = fields.host .. " deactivated" };
5135
52eafe0e9772 mod_admin_adhoc: Add commands for activating and deactivating hosts
Kim Alvefur <zash@zash.se>
parents: 5100
diff changeset
806 else
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
807 return { status = "canceled", error = err }
5135
52eafe0e9772 mod_admin_adhoc: Add commands for activating and deactivating hosts
Kim Alvefur <zash@zash.se>
parents: 5100
diff changeset
808 end
5514
1091d7c3b4d2 mod_admin_adhoc: Use util.adhoc
Florian Zeitz <florob@babelmonkeys.de>
parents: 5371
diff changeset
809 end);
5135
52eafe0e9772 mod_admin_adhoc: Add commands for activating and deactivating hosts
Kim Alvefur <zash@zash.se>
parents: 5100
diff changeset
810
9402
b530b5daae91 mod_admin_adhoc: Ignore the very long lines at the end [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9401
diff changeset
811 -- luacheck: max_line_length 180
5135
52eafe0e9772 mod_admin_adhoc: Add commands for activating and deactivating hosts
Kim Alvefur <zash@zash.se>
parents: 5100
diff changeset
812
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
813 local add_user_desc = adhoc_new("Add User", "http://jabber.org/protocol/admin#add-user", add_user_command_handler, "admin");
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
814 local change_user_password_desc = adhoc_new("Change User Password", "http://jabber.org/protocol/admin#change-user-password", change_user_password_command_handler, "admin");
4292
894ffea639e9 mod_admin_adhoc: Add "Reload configuration" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 3778
diff changeset
815 local config_reload_desc = adhoc_new("Reload configuration", "http://prosody.im/protocol/config#reload", config_reload_handler, "global_admin");
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
816 local delete_user_desc = adhoc_new("Delete User", "http://jabber.org/protocol/admin#delete-user", delete_user_command_handler, "admin");
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
817 local end_user_session_desc = adhoc_new("End User Session", "http://jabber.org/protocol/admin#end-user-session", end_user_session_handler, "admin");
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
818 local get_user_password_desc = adhoc_new("Get User Password", "http://jabber.org/protocol/admin#get-user-password", get_user_password_handler, "admin");
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
819 local get_user_roster_desc = adhoc_new("Get User Roster","http://jabber.org/protocol/admin#get-user-roster", get_user_roster_handler, "admin");
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
820 local get_user_stats_desc = adhoc_new("Get User Statistics","http://jabber.org/protocol/admin#user-stats", get_user_stats_handler, "admin");
5721
579c51cbc12c mod_admin_adhoc: Fix node of the "Get List of Online Users" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 5514
diff changeset
821 local get_online_users_desc = adhoc_new("Get List of Online Users", "http://jabber.org/protocol/admin#get-online-users-list", get_online_users_command_handler, "admin");
6458
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
822 local list_s2s_this_desc = adhoc_new("List S2S connections", "http://prosody.im/protocol/s2s#list", list_s2s_this_handler, "admin");
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
823 local list_modules_desc = adhoc_new("List loaded modules", "http://prosody.im/protocol/modules#list", list_modules_handler, "admin");
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
824 local load_module_desc = adhoc_new("Load module", "http://prosody.im/protocol/modules#load", load_module_handler, "admin");
5325
97bf651e32a4 mod_admin_adhoc: Implement global module loading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5324
diff changeset
825 local globally_load_module_desc = adhoc_new("Globally load module", "http://prosody.im/protocol/modules#global-load", globally_load_module_handler, "global_admin");
3777
5ecbcef42ffb mod_admin_adhoc: Support for reloading multiple modules
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
826 local reload_modules_desc = adhoc_new("Reload modules", "http://prosody.im/protocol/modules#reload", reload_modules_handler, "admin");
5327
b0c36b043f00 mod_admin_adhoc: Implement global module reloading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5326
diff changeset
827 local globally_reload_module_desc = adhoc_new("Globally reload module", "http://prosody.im/protocol/modules#global-reload", globally_reload_module_handler, "global_admin");
4296
b991ffa0f2c5 mod_admin_adhoc: Only allow global admins to shut the server down
Florian Zeitz <florob@babelmonkeys.de>
parents: 4292
diff changeset
828 local shut_down_service_desc = adhoc_new("Shut Down Service", "http://jabber.org/protocol/admin#shutdown", shut_down_service_handler, "global_admin");
3778
bd1845f9d5a4 mod_admin_adhoc: Support unloading multiple modules
Florian Zeitz <florob@babelmonkeys.de>
parents: 3777
diff changeset
829 local unload_modules_desc = adhoc_new("Unload modules", "http://prosody.im/protocol/modules#unload", unload_modules_handler, "admin");
5328
5e15e6700412 mod_admin_adhoc: Implement global module unloading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5327
diff changeset
830 local globally_unload_module_desc = adhoc_new("Globally unload module", "http://prosody.im/protocol/modules#global-unload", globally_unload_module_handler, "global_admin");
5135
52eafe0e9772 mod_admin_adhoc: Add commands for activating and deactivating hosts
Kim Alvefur <zash@zash.se>
parents: 5100
diff changeset
831 local activate_host_desc = adhoc_new("Activate host", "http://prosody.im/protocol/hosts#activate", activate_host_handler, "global_admin");
52eafe0e9772 mod_admin_adhoc: Add commands for activating and deactivating hosts
Kim Alvefur <zash@zash.se>
parents: 5100
diff changeset
832 local deactivate_host_desc = adhoc_new("Deactivate host", "http://prosody.im/protocol/hosts#deactivate", deactivate_host_handler, "global_admin");
3487
b5c92275910b mod_admin_adhoc: New module with merged functonality of mod_adhoc_cmd_admin and mod_adhoc_cmd_modules (of prosody-modules fame)
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
833
4926
58714123f600 mod_adhoc, mod_admin_adhoc, mod_announce: Use module:provides() to manage Ad-Hoc commands
Florian Zeitz <florob@babelmonkeys.de>
parents: 4780
diff changeset
834 module:provides("adhoc", add_user_desc);
58714123f600 mod_adhoc, mod_admin_adhoc, mod_announce: Use module:provides() to manage Ad-Hoc commands
Florian Zeitz <florob@babelmonkeys.de>
parents: 4780
diff changeset
835 module:provides("adhoc", change_user_password_desc);
58714123f600 mod_adhoc, mod_admin_adhoc, mod_announce: Use module:provides() to manage Ad-Hoc commands
Florian Zeitz <florob@babelmonkeys.de>
parents: 4780
diff changeset
836 module:provides("adhoc", config_reload_desc);
58714123f600 mod_adhoc, mod_admin_adhoc, mod_announce: Use module:provides() to manage Ad-Hoc commands
Florian Zeitz <florob@babelmonkeys.de>
parents: 4780
diff changeset
837 module:provides("adhoc", delete_user_desc);
58714123f600 mod_adhoc, mod_admin_adhoc, mod_announce: Use module:provides() to manage Ad-Hoc commands
Florian Zeitz <florob@babelmonkeys.de>
parents: 4780
diff changeset
838 module:provides("adhoc", end_user_session_desc);
58714123f600 mod_adhoc, mod_admin_adhoc, mod_announce: Use module:provides() to manage Ad-Hoc commands
Florian Zeitz <florob@babelmonkeys.de>
parents: 4780
diff changeset
839 module:provides("adhoc", get_user_password_desc);
58714123f600 mod_adhoc, mod_admin_adhoc, mod_announce: Use module:provides() to manage Ad-Hoc commands
Florian Zeitz <florob@babelmonkeys.de>
parents: 4780
diff changeset
840 module:provides("adhoc", get_user_roster_desc);
58714123f600 mod_adhoc, mod_admin_adhoc, mod_announce: Use module:provides() to manage Ad-Hoc commands
Florian Zeitz <florob@babelmonkeys.de>
parents: 4780
diff changeset
841 module:provides("adhoc", get_user_stats_desc);
58714123f600 mod_adhoc, mod_admin_adhoc, mod_announce: Use module:provides() to manage Ad-Hoc commands
Florian Zeitz <florob@babelmonkeys.de>
parents: 4780
diff changeset
842 module:provides("adhoc", get_online_users_desc);
6458
f906b803dc42 mod_admin_web: Add "List S2S connections" command
Florian Zeitz <florob@babelmonkeys.de>
parents: 6457
diff changeset
843 module:provides("adhoc", list_s2s_this_desc);
4926
58714123f600 mod_adhoc, mod_admin_adhoc, mod_announce: Use module:provides() to manage Ad-Hoc commands
Florian Zeitz <florob@babelmonkeys.de>
parents: 4780
diff changeset
844 module:provides("adhoc", list_modules_desc);
58714123f600 mod_adhoc, mod_admin_adhoc, mod_announce: Use module:provides() to manage Ad-Hoc commands
Florian Zeitz <florob@babelmonkeys.de>
parents: 4780
diff changeset
845 module:provides("adhoc", load_module_desc);
5325
97bf651e32a4 mod_admin_adhoc: Implement global module loading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5324
diff changeset
846 module:provides("adhoc", globally_load_module_desc);
4926
58714123f600 mod_adhoc, mod_admin_adhoc, mod_announce: Use module:provides() to manage Ad-Hoc commands
Florian Zeitz <florob@babelmonkeys.de>
parents: 4780
diff changeset
847 module:provides("adhoc", reload_modules_desc);
5327
b0c36b043f00 mod_admin_adhoc: Implement global module reloading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5326
diff changeset
848 module:provides("adhoc", globally_reload_module_desc);
4926
58714123f600 mod_adhoc, mod_admin_adhoc, mod_announce: Use module:provides() to manage Ad-Hoc commands
Florian Zeitz <florob@babelmonkeys.de>
parents: 4780
diff changeset
849 module:provides("adhoc", shut_down_service_desc);
58714123f600 mod_adhoc, mod_admin_adhoc, mod_announce: Use module:provides() to manage Ad-Hoc commands
Florian Zeitz <florob@babelmonkeys.de>
parents: 4780
diff changeset
850 module:provides("adhoc", unload_modules_desc);
5328
5e15e6700412 mod_admin_adhoc: Implement global module unloading
Florian Zeitz <florob@babelmonkeys.de>
parents: 5327
diff changeset
851 module:provides("adhoc", globally_unload_module_desc);
5135
52eafe0e9772 mod_admin_adhoc: Add commands for activating and deactivating hosts
Kim Alvefur <zash@zash.se>
parents: 5100
diff changeset
852 module:provides("adhoc", activate_host_desc);
52eafe0e9772 mod_admin_adhoc: Add commands for activating and deactivating hosts
Kim Alvefur <zash@zash.se>
parents: 5100
diff changeset
853 module:provides("adhoc", deactivate_host_desc);