plugins/mod_admin_telnet.lua
author Kim Alvefur <zash@zash.se>
Wed, 29 Apr 2020 22:23:05 +0200
changeset 10791 459efb1afbfe
parent 10705 929c95e518f0
child 10792 3fc4863227a9
permissions -rw-r--r--
mod_admin_telnet: Pretty-print values returned from commands This makes it much nicer to inspect Prosody internals. Existing textual status messages from commands are not serialized to preserve existing behavior. Explicit serialization of configuration is kept in order to make it clear that returned strings are serialized strings that would look like what's actually in the config file. The default maxdepth of 2 seems ought to be an okay default, balanced between showing enough structure to continue exploring and DoS-ing your terminal. Thanks to Ge0rG for the motivation to finally do this.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1523
841d61be198f Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents: 1506
diff changeset
     1
-- Prosody IM
2923
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 2870
diff changeset
     2
-- Copyright (C) 2008-2010 Matthew Wild
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 2870
diff changeset
     3
-- Copyright (C) 2008-2010 Waqas Hussain
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
     4
--
758
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 736
diff changeset
     5
-- This project is MIT/X11 licensed. Please see the
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 736
diff changeset
     6
-- COPYING file in the source package for more information.
519
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 461
diff changeset
     7
--
9407
f40b0cd41a87 mod_admin_telnet: Remove or rename various unused arguments and variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9406
diff changeset
     8
-- luacheck: ignore 212/self
519
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 461
diff changeset
     9
4623
403b56b78018 mod_posix, mod_bosh, mod_admin_telnet: Use module:set_global()
Kim Alvefur <zash@zash.se>
parents: 4582
diff changeset
    10
module:set_global();
519
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 461
diff changeset
    11
5030
9962fc19f9e9 mod_admin_telnet: Import prosody.incoming_s2s
Matthew Wild <mwild1@gmail.com>
parents: 5029
diff changeset
    12
local hostmanager = require "core.hostmanager";
9962fc19f9e9 mod_admin_telnet: Import prosody.incoming_s2s
Matthew Wild <mwild1@gmail.com>
parents: 5029
diff changeset
    13
local modulemanager = require "core.modulemanager";
9962fc19f9e9 mod_admin_telnet: Import prosody.incoming_s2s
Matthew Wild <mwild1@gmail.com>
parents: 5029
diff changeset
    14
local s2smanager = require "core.s2smanager";
9962fc19f9e9 mod_admin_telnet: Import prosody.incoming_s2s
Matthew Wild <mwild1@gmail.com>
parents: 5029
diff changeset
    15
local portmanager = require "core.portmanager";
8924
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
    16
local helpers = require "util.helpers";
9409
7f277975768d mod_admin_telnet: Import net.server instead of relying on global
Kim Alvefur <zash@zash.se>
parents: 9408
diff changeset
    17
local server = require "net.server";
5030
9962fc19f9e9 mod_admin_telnet: Import prosody.incoming_s2s
Matthew Wild <mwild1@gmail.com>
parents: 5029
diff changeset
    18
1342
947d94e3619f mod_console: Redirect print() to console session when executing commands in global environment
Matthew Wild <mwild1@gmail.com>
parents: 1341
diff changeset
    19
local _G = _G;
947d94e3619f mod_console: Redirect print() to console session when executing commands in global environment
Matthew Wild <mwild1@gmail.com>
parents: 1341
diff changeset
    20
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
    21
local prosody = _G.prosody;
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    22
4989
573123ff2ab0 mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents: 4979
diff changeset
    23
local console_listener = { default_port = 5582; default_mode = "*a"; interface = "127.0.0.1" };
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    24
9695
e11e076f0eb8 various: Don't rely on _G.unpack existing
Kim Alvefur <zash@zash.se>
parents: 9457
diff changeset
    25
local unpack = table.unpack or unpack; -- luacheck: ignore 113
4582
542afb9c2ab1 mod_admin_telnet: Import util.iterators properly
Kim Alvefur <zash@zash.se>
parents: 4571
diff changeset
    26
local iterators = require "util.iterators";
542afb9c2ab1 mod_admin_telnet: Import util.iterators properly
Kim Alvefur <zash@zash.se>
parents: 4571
diff changeset
    27
local keys, values = iterators.keys, iterators.values;
7071
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
    28
local jid_bare, jid_split, jid_join = import("util.jid", "bare", "prepped_split", "join");
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
    29
local set, array = require "util.set", require "util.array";
3733
26571a99f6e6 core.s2smanager, mod_console, mod_saslauth, util.certverification: rename util.certverification to util.x509
Kim Alvefur <zash@zash.se>
parents: 3718
diff changeset
    30
local cert_verify_identity = require "util.x509".verify_identity;
5021
85b2689dbcfe Eliminate direct setfenv usage
Florian Zeitz <florob@babelmonkeys.de>
parents: 4913
diff changeset
    31
local envload = require "util.envload".envload;
85b2689dbcfe Eliminate direct setfenv usage
Florian Zeitz <florob@babelmonkeys.de>
parents: 4913
diff changeset
    32
local envloadfile = require "util.envload".envloadfile;
6506
8437058c4226 mod_admin_telnet: Soft-reqire util.pposix for server:memory()
Kim Alvefur <zash@zash.se>
parents: 6382
diff changeset
    33
local has_pposix, pposix = pcall(require, "util.pposix");
9739
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    34
local async = require "util.async";
10791
459efb1afbfe mod_admin_telnet: Pretty-print values returned from commands
Kim Alvefur <zash@zash.se>
parents: 10705
diff changeset
    35
local serialization = require "util.serialization";
459efb1afbfe mod_admin_telnet: Pretty-print values returned from commands
Kim Alvefur <zash@zash.se>
parents: 10705
diff changeset
    36
local serialize_config = serialization.new ({ fatal = false, unquoted = true});
10314
b03065cd033a mod_admin_telnet: xmpp:ping: Log ping time
Kim Alvefur <zash@zash.se>
parents: 10296
diff changeset
    37
local time = require "util.time";
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
    38
4540
ddce5b1bdfca mod_admin_telnet: Use module:shared() to expose commands table and default console environment
Matthew Wild <mwild1@gmail.com>
parents: 4328
diff changeset
    39
local commands = module:shared("commands")
ddce5b1bdfca mod_admin_telnet: Use module:shared() to expose commands table and default console environment
Matthew Wild <mwild1@gmail.com>
parents: 4328
diff changeset
    40
local def_env = module:shared("env");
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    41
local default_env_mt = { __index = def_env };
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    42
9406
4416c1a96400 mod_admin_telnet: Rename variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9394
diff changeset
    43
local function redirect_output(target, session)
9407
f40b0cd41a87 mod_admin_telnet: Remove or rename various unused arguments and variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9406
diff changeset
    44
	local env = setmetatable({ print = session.print }, { __index = function (_, k) return rawget(target, k); end });
3407
15f633285755 mod_console: Override dofile() in the console environment (this lets print() print to the console session for example).
Waqas Hussain <waqas20@gmail.com>
parents: 3404
diff changeset
    45
	env.dofile = function(name)
5021
85b2689dbcfe Eliminate direct setfenv usage
Florian Zeitz <florob@babelmonkeys.de>
parents: 4913
diff changeset
    46
		local f, err = envloadfile(name, env);
3407
15f633285755 mod_console: Override dofile() in the console environment (this lets print() print to the console session for example).
Waqas Hussain <waqas20@gmail.com>
parents: 3404
diff changeset
    47
		if not f then return f, err; end
5021
85b2689dbcfe Eliminate direct setfenv usage
Florian Zeitz <florob@babelmonkeys.de>
parents: 4913
diff changeset
    48
		return f();
3407
15f633285755 mod_console: Override dofile() in the console environment (this lets print() print to the console session for example).
Waqas Hussain <waqas20@gmail.com>
parents: 3404
diff changeset
    49
	end;
15f633285755 mod_console: Override dofile() in the console environment (this lets print() print to the console session for example).
Waqas Hussain <waqas20@gmail.com>
parents: 3404
diff changeset
    50
	return env;
1342
947d94e3619f mod_console: Redirect print() to console session when executing commands in global environment
Matthew Wild <mwild1@gmail.com>
parents: 1341
diff changeset
    51
end
947d94e3619f mod_console: Redirect print() to console session when executing commands in global environment
Matthew Wild <mwild1@gmail.com>
parents: 1341
diff changeset
    52
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    53
console = {};
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    54
9739
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    55
local runner_callbacks = {};
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    56
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    57
function runner_callbacks:ready()
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    58
	self.data.conn:resume();
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    59
end
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    60
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    61
function runner_callbacks:waiting()
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    62
	self.data.conn:pause();
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    63
end
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    64
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    65
function runner_callbacks:error(err)
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    66
	module:log("error", "Traceback[telnet]: %s", err);
10072
73a8192058f9 mod_admin_telnet: Move error handling to thread callback (fixes #1391)
Kim Alvefur <zash@zash.se>
parents: 10071
diff changeset
    67
73a8192058f9 mod_admin_telnet: Move error handling to thread callback (fixes #1391)
Kim Alvefur <zash@zash.se>
parents: 10071
diff changeset
    68
	self.data.print("Fatal error while running command, it did not complete");
73a8192058f9 mod_admin_telnet: Move error handling to thread callback (fixes #1391)
Kim Alvefur <zash@zash.se>
parents: 10071
diff changeset
    69
	self.data.print("Error: "..tostring(err));
9739
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    70
end
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    71
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    72
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    73
function console:new_session(conn)
2145
daeb6ebf304c mod_console: Update for new net.server API
Matthew Wild <mwild1@gmail.com>
parents: 2087
diff changeset
    74
	local w = function(s) conn:write(s:gsub("\n", "\r\n")); end;
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    75
	local session = { conn = conn;
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    76
			send = function (t) w(tostring(t)); end;
3404
33c81ee280e3 mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents: 3044
diff changeset
    77
			print = function (...)
33c81ee280e3 mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents: 3044
diff changeset
    78
				local t = {};
33c81ee280e3 mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents: 3044
diff changeset
    79
				for i=1,select("#", ...) do
33c81ee280e3 mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents: 3044
diff changeset
    80
					t[i] = tostring(select(i, ...));
33c81ee280e3 mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents: 3044
diff changeset
    81
				end
33c81ee280e3 mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents: 3044
diff changeset
    82
				w("| "..table.concat(t, "\t").."\n");
33c81ee280e3 mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents: 3044
diff changeset
    83
			end;
10791
459efb1afbfe mod_admin_telnet: Pretty-print values returned from commands
Kim Alvefur <zash@zash.se>
parents: 10705
diff changeset
    84
			serialize = serialization.new({ fatal = false, unquoted = true, maxdepth = 2});
2253
a3537266a916 mod_console: Update for new server API, fixes traceback when closing console sessions
Matthew Wild <mwild1@gmail.com>
parents: 2145
diff changeset
    85
			disconnect = function () conn:close(); end;
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    86
			};
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    87
	session.env = setmetatable({}, default_env_mt);
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
    88
9739
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    89
	session.thread = async.runner(function (line)
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    90
		console:process_line(session, line);
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    91
		session.send(string.char(0));
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    92
	end, runner_callbacks, session);
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    93
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    94
	-- Load up environment with helper objects
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    95
	for name, t in pairs(def_env) do
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    96
		if type(t) == "table" then
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    97
			session.env[name] = setmetatable({ session = session }, { __index = t });
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    98
		end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    99
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   100
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   101
	return session;
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   102
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   103
5186
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   104
function console:process_line(session, line)
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   105
	local useglobalenv;
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   106
5186
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   107
	if line:match("^>") then
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   108
		line = line:gsub("^>", "");
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   109
		useglobalenv = true;
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   110
	elseif line == "\004" then
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   111
		commands["bye"](session, line);
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   112
		return;
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   113
	else
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   114
		local command = line:match("^%w+") or line:match("%p");
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   115
		if commands[command] then
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   116
			commands[command](session, line);
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   117
			return;
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   118
		end
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   119
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   120
5186
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   121
	session.env._ = line;
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   122
10071
598befab492e mod_admin_telnet: Check for simple commands before executing in sandbox
Kim Alvefur <zash@zash.se>
parents: 10048
diff changeset
   123
	if not useglobalenv and commands[line:lower()] then
598befab492e mod_admin_telnet: Check for simple commands before executing in sandbox
Kim Alvefur <zash@zash.se>
parents: 10048
diff changeset
   124
		commands[line:lower()](session, line);
598befab492e mod_admin_telnet: Check for simple commands before executing in sandbox
Kim Alvefur <zash@zash.se>
parents: 10048
diff changeset
   125
		return;
598befab492e mod_admin_telnet: Check for simple commands before executing in sandbox
Kim Alvefur <zash@zash.se>
parents: 10048
diff changeset
   126
	end
598befab492e mod_admin_telnet: Check for simple commands before executing in sandbox
Kim Alvefur <zash@zash.se>
parents: 10048
diff changeset
   127
5186
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   128
	local chunkname = "=console";
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   129
	local env = (useglobalenv and redirect_output(_G, session)) or session.env or nil
10548
0bd408d93f9a mod_admin_telnet: Silence luacheck warnings
Kim Alvefur <zash@zash.se>
parents: 10521
diff changeset
   130
	-- luacheck: ignore 311/err
5186
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   131
	local chunk, err = envload("return "..line, chunkname, env);
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   132
	if not chunk then
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   133
		chunk, err = envload(line, chunkname, env);
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   134
		if not chunk then
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   135
			err = err:gsub("^%[string .-%]:%d+: ", "");
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   136
			err = err:gsub("^:%d+: ", "");
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   137
			err = err:gsub("'<eof>'", "the end of the line");
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   138
			session.print("Sorry, I couldn't understand that... "..err);
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   139
			return;
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   140
		end
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   141
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   142
10072
73a8192058f9 mod_admin_telnet: Move error handling to thread callback (fixes #1391)
Kim Alvefur <zash@zash.se>
parents: 10071
diff changeset
   143
	local taskok, message = chunk();
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   144
5186
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   145
	if not message then
10791
459efb1afbfe mod_admin_telnet: Pretty-print values returned from commands
Kim Alvefur <zash@zash.se>
parents: 10705
diff changeset
   146
		if type(taskok) ~= "string" then
459efb1afbfe mod_admin_telnet: Pretty-print values returned from commands
Kim Alvefur <zash@zash.se>
parents: 10705
diff changeset
   147
			taskok = session.serialize(taskok);
459efb1afbfe mod_admin_telnet: Pretty-print values returned from commands
Kim Alvefur <zash@zash.se>
parents: 10705
diff changeset
   148
		end
459efb1afbfe mod_admin_telnet: Pretty-print values returned from commands
Kim Alvefur <zash@zash.se>
parents: 10705
diff changeset
   149
		session.print("Result: "..taskok);
5186
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   150
		return;
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   151
	elseif (not taskok) and message then
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   152
		session.print("Command completed with a problem");
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   153
		session.print("Message: "..tostring(message));
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   154
		return;
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   155
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   156
10791
459efb1afbfe mod_admin_telnet: Pretty-print values returned from commands
Kim Alvefur <zash@zash.se>
parents: 10705
diff changeset
   157
	if type(message) ~= "string" then
459efb1afbfe mod_admin_telnet: Pretty-print values returned from commands
Kim Alvefur <zash@zash.se>
parents: 10705
diff changeset
   158
		message = session.serialize(message);
459efb1afbfe mod_admin_telnet: Pretty-print values returned from commands
Kim Alvefur <zash@zash.se>
parents: 10705
diff changeset
   159
	end
459efb1afbfe mod_admin_telnet: Pretty-print values returned from commands
Kim Alvefur <zash@zash.se>
parents: 10705
diff changeset
   160
459efb1afbfe mod_admin_telnet: Pretty-print values returned from commands
Kim Alvefur <zash@zash.se>
parents: 10705
diff changeset
   161
	session.print("OK: "..message);
5186
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   162
end
ad898e50b8f3 mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents: 5168
diff changeset
   163
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   164
local sessions = {};
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   165
3009
06f7d8054065 mod_console: Make use of the new onconnect callback to initialise session and send banner
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
   166
function console_listener.onconnect(conn)
06f7d8054065 mod_console: Make use of the new onconnect callback to initialise session and send banner
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
   167
	-- Handle new connection
06f7d8054065 mod_console: Make use of the new onconnect callback to initialise session and send banner
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
   168
	local session = console:new_session(conn);
06f7d8054065 mod_console: Make use of the new onconnect callback to initialise session and send banner
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
   169
	sessions[conn] = session;
06f7d8054065 mod_console: Make use of the new onconnect callback to initialise session and send banner
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
   170
	printbanner(session);
669
9255abbb3068 mod_console: replace all \n with \r\n in the output, and send \0 as a marker character after every response
Waqas Hussain <waqas20@gmail.com>
parents: 615
diff changeset
   171
	session.send(string.char(0));
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   172
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   173
2145
daeb6ebf304c mod_console: Update for new net.server API
Matthew Wild <mwild1@gmail.com>
parents: 2087
diff changeset
   174
function console_listener.onincoming(conn, data)
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   175
	local session = sessions[conn];
1317
f6e56a555c37 mod_console: Allow running code in the global environment by prefixing with '>'
Matthew Wild <mwild1@gmail.com>
parents: 1316
diff changeset
   176
4989
573123ff2ab0 mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents: 4979
diff changeset
   177
	local partial = session.partial_data;
573123ff2ab0 mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents: 4979
diff changeset
   178
	if partial then
573123ff2ab0 mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents: 4979
diff changeset
   179
		data = partial..data;
573123ff2ab0 mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents: 4979
diff changeset
   180
	end
573123ff2ab0 mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents: 4979
diff changeset
   181
573123ff2ab0 mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents: 4979
diff changeset
   182
	for line in data:gmatch("[^\n]*[\n\004]") do
5278
f79be67e5666 mod_admin_telnet: Stop processing lines when session is closed
Kim Alvefur <zash@zash.se>
parents: 5270
diff changeset
   183
		if session.closed then return end
9739
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
   184
		session.thread:run(line);
4989
573123ff2ab0 mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents: 4979
diff changeset
   185
	end
573123ff2ab0 mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents: 4979
diff changeset
   186
	session.partial_data = data:match("[^\n]+$");
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   187
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   188
6169
cb15eac75b50 mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents: 6067
diff changeset
   189
function console_listener.onreadtimeout(conn)
cb15eac75b50 mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents: 6067
diff changeset
   190
	local session = sessions[conn];
cb15eac75b50 mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents: 6067
diff changeset
   191
	if session then
cb15eac75b50 mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents: 6067
diff changeset
   192
		session.send("\0");
cb15eac75b50 mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents: 6067
diff changeset
   193
		return true;
cb15eac75b50 mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents: 6067
diff changeset
   194
	end
cb15eac75b50 mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents: 6067
diff changeset
   195
end
cb15eac75b50 mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents: 6067
diff changeset
   196
9407
f40b0cd41a87 mod_admin_telnet: Remove or rename various unused arguments and variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9406
diff changeset
   197
function console_listener.ondisconnect(conn, err) -- luacheck: ignore 212/err
2054
a43aea9b0bd1 mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents: 2010
diff changeset
   198
	local session = sessions[conn];
a43aea9b0bd1 mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents: 2010
diff changeset
   199
	if session then
a43aea9b0bd1 mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents: 2010
diff changeset
   200
		session.disconnect();
a43aea9b0bd1 mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents: 2010
diff changeset
   201
		sessions[conn] = nil;
a43aea9b0bd1 mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents: 2010
diff changeset
   202
	end
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   203
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   204
6380
4220ffb87b22 net.http, net.http.server, mod_c2s, mod_s2s, mod_component, mod_admin_telnet, mod_net_multiplex: Add ondetach to release connection from 'sessions' table (or equivalent)
Matthew Wild <mwild1@gmail.com>
parents: 6311
diff changeset
   205
function console_listener.ondetach(conn)
4220ffb87b22 net.http, net.http.server, mod_c2s, mod_s2s, mod_component, mod_admin_telnet, mod_net_multiplex: Add ondetach to release connection from 'sessions' table (or equivalent)
Matthew Wild <mwild1@gmail.com>
parents: 6311
diff changeset
   206
	sessions[conn] = nil;
4220ffb87b22 net.http, net.http.server, mod_c2s, mod_s2s, mod_component, mod_admin_telnet, mod_net_multiplex: Add ondetach to release connection from 'sessions' table (or equivalent)
Matthew Wild <mwild1@gmail.com>
parents: 6311
diff changeset
   207
end
4220ffb87b22 net.http, net.http.server, mod_c2s, mod_s2s, mod_component, mod_admin_telnet, mod_net_multiplex: Add ondetach to release connection from 'sessions' table (or equivalent)
Matthew Wild <mwild1@gmail.com>
parents: 6311
diff changeset
   208
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   209
-- Console commands --
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   210
-- These are simple commands, not valid standalone in Lua
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   211
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   212
function commands.bye(session)
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   213
	session.print("See you! :)");
5278
f79be67e5666 mod_admin_telnet: Stop processing lines when session is closed
Kim Alvefur <zash@zash.se>
parents: 5270
diff changeset
   214
	session.closed = true;
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   215
	session.disconnect();
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   216
end
1503
5970e06d9335 mod_console: Add quit and exit as aliases for 'bye' command
Matthew Wild <mwild1@gmail.com>
parents: 1502
diff changeset
   217
commands.quit, commands.exit = commands.bye, commands.bye;
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   218
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   219
commands["!"] = function (session, data)
3614
8b436cc88c0e mod_console: Don't allow bang bang as the first command in a session, or when the last command is unknown (fixes #218)
Matthew Wild <mwild1@gmail.com>
parents: 3557
diff changeset
   220
	if data:match("^!!") and session.env._ then
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   221
		session.print("!> "..session.env._);
2512
d04b0eeeb954 mod_console: Update !! shortcut for new connection API
Matthew Wild <mwild1@gmail.com>
parents: 2296
diff changeset
   222
		return console_listener.onincoming(session.conn, session.env._);
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   223
	end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   224
	local old, new = data:match("^!(.-[^\\])!(.-)!$");
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   225
	if old and new then
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   226
		local ok, res = pcall(string.gsub, session.env._, old, new);
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   227
		if not ok then
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   228
			session.print(res)
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   229
			return;
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   230
		end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   231
		session.print("!> "..res);
2512
d04b0eeeb954 mod_console: Update !! shortcut for new connection API
Matthew Wild <mwild1@gmail.com>
parents: 2296
diff changeset
   232
		return console_listener.onincoming(session.conn, res);
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   233
	end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   234
	session.print("Sorry, not sure what you want");
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   235
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   236
3452
2d1a5d8893c2 mod_console: Add host:* commands to help (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents: 3407
diff changeset
   237
1616
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   238
function commands.help(session, data)
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   239
	local print = session.print;
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   240
	local section = data:match("^help (%w+)");
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   241
	if not section then
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   242
		print [[Commands are divided into multiple sections. For help on a particular section, ]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   243
		print [[type: help SECTION (for example, 'help c2s'). Sections are: ]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   244
		print [[]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   245
		print [[c2s - Commands to manage local client-to-server sessions]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   246
		print [[s2s - Commands to manage sessions between this server and others]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   247
		print [[module - Commands to load/reload/unload modules/plugins]]
3452
2d1a5d8893c2 mod_console: Add host:* commands to help (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents: 3407
diff changeset
   248
		print [[host - Commands to activate, deactivate and list virtual hosts]]
4974
1574f18b0ca4 mod_admin_telnet: Add info about user management commands to the help
Kim Alvefur <zash@zash.se>
parents: 4973
diff changeset
   249
		print [[user - Commands to create and delete users, and change their passwords]]
1616
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   250
		print [[server - Uptime, version, shutting down, etc.]]
5270
20e14961f630 mod_admin_telnet: Add info about port commands to help
Kim Alvefur <zash@zash.se>
parents: 5227
diff changeset
   251
		print [[port - Commands to manage ports the server is listening on]]
5567
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
   252
		print [[dns - Commands to manage and inspect the internal DNS resolver]]
10091
36d3709603d1 mod_admin_telnet: Add xmpp:ping to help
Kim Alvefur <zash@zash.se>
parents: 10090
diff changeset
   253
		print [[xmpp - Commands for sending XMPP stanzas]]
2009
3f9cce29c57d mod_console: Added help text for config:reload().
Waqas Hussain <waqas20@gmail.com>
parents: 2007
diff changeset
   254
		print [[config - Reloading the configuration, etc.]]
1616
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   255
		print [[console - Help regarding the console itself]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   256
	elseif section == "c2s" then
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   257
		print [[c2s:show(jid) - Show all client sessions with the specified JID (or all if no JID given)]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   258
		print [[c2s:show_insecure() - Show all unencrypted client connections]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   259
		print [[c2s:show_secure() - Show all encrypted client connections]]
6174
513ea94761b2 mod_admin_telnet: Add c2s:show_tls(), behaves like s2s:show_tls()
Kim Alvefur <zash@zash.se>
parents: 6173
diff changeset
   260
		print [[c2s:show_tls() - Show TLS cipher info for encrypted sessions]]
10090
4ade3674baf0 mod_admin_telnet: Add c2s:count() to help
Kim Alvefur <zash@zash.se>
parents: 10089
diff changeset
   261
		print [[c2s:count() - Count sessions without listing them]]
1616
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   262
		print [[c2s:close(jid) - Close all sessions for the specified JID]]
9978
c30933aa0242 mod_admin_telnet: Adds c2s:closeall() (Fixes #1315)
João Duarte <jvsDuarte08@gmail.com>
parents: 9872
diff changeset
   263
		print [[c2s:closeall() - Close all active c2s connections ]]
1616
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   264
	elseif section == "s2s" then
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   265
		print [[s2s:show(domain) - Show all s2s connections for the given domain (or all if no domain given)]]
6172
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   266
		print [[s2s:show_tls(domain) - Show TLS cipher info for encrypted sessions]]
1616
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   267
		print [[s2s:close(from, to) - Close a connection from one domain to another]]
4978
0b9e86302de4 mod_admin_telnet: add s2s:closeall command and relative help entry.
Marco Cirillo <maranda@lightwitch.org>
parents: 4913
diff changeset
   268
		print [[s2s:closeall(host) - Close all the incoming/outgoing s2s sessions to specified host]]
1616
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   269
	elseif section == "module" then
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   270
		print [[module:load(module, host) - Load the specified module on the specified host (or all hosts if none given)]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   271
		print [[module:reload(module, host) - The same, but unloads and loads the module (saving state if the module supports it)]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   272
		print [[module:unload(module, host) - The same, but just unloads the module from memory]]
1907
1dd4443e7d93 mod_console: Add module:list() to help
Matthew Wild <mwild1@gmail.com>
parents: 1906
diff changeset
   273
		print [[module:list(host) - List the modules loaded on the specified host]]
3452
2d1a5d8893c2 mod_console: Add host:* commands to help (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents: 3407
diff changeset
   274
	elseif section == "host" then
2d1a5d8893c2 mod_console: Add host:* commands to help (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents: 3407
diff changeset
   275
		print [[host:activate(hostname) - Activates the specified host]]
2d1a5d8893c2 mod_console: Add host:* commands to help (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents: 3407
diff changeset
   276
		print [[host:deactivate(hostname) - Disconnects all clients on this host and deactivates]]
2d1a5d8893c2 mod_console: Add host:* commands to help (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents: 3407
diff changeset
   277
		print [[host:list() - List the currently-activated hosts]]
4974
1574f18b0ca4 mod_admin_telnet: Add info about user management commands to the help
Kim Alvefur <zash@zash.se>
parents: 4973
diff changeset
   278
	elseif section == "user" then
1574f18b0ca4 mod_admin_telnet: Add info about user management commands to the help
Kim Alvefur <zash@zash.se>
parents: 4973
diff changeset
   279
		print [[user:create(jid, password) - Create the specified user account]]
1574f18b0ca4 mod_admin_telnet: Add info about user management commands to the help
Kim Alvefur <zash@zash.se>
parents: 4973
diff changeset
   280
		print [[user:password(jid, password) - Set the password for the specified user account]]
5128
834ab74585ec mod_admin_telnet: Fix user:*, correct names, docs, do validation
Kim Alvefur <zash@zash.se>
parents: 5030
diff changeset
   281
		print [[user:delete(jid) - Permanently remove the specified user account]]
5168
46fc0eff10b4 mod_admin_telnet: user:list(): Allow filtering the set of users
Kim Alvefur <zash@zash.se>
parents: 5167
diff changeset
   282
		print [[user:list(hostname, pattern) - List users on the specified host, optionally filtering with a pattern]]
1616
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   283
	elseif section == "server" then
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   284
		print [[server:version() - Show the server's version number]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   285
		print [[server:uptime() - Show how long the server has been running]]
5672
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   286
		print [[server:memory() - Show details about the server's memory usage]]
2870
471c3acffb2a mod_console: Uncomment the help for server:shutdown() - thanks darkrain
Matthew Wild <mwild1@gmail.com>
parents: 2087
diff changeset
   287
		print [[server:shutdown(reason) - Shut down the server, with an optional reason to be broadcast to all connections]]
5270
20e14961f630 mod_admin_telnet: Add info about port commands to help
Kim Alvefur <zash@zash.se>
parents: 5227
diff changeset
   288
	elseif section == "port" then
20e14961f630 mod_admin_telnet: Add info about port commands to help
Kim Alvefur <zash@zash.se>
parents: 5227
diff changeset
   289
		print [[port:list() - Lists all network ports prosody currently listens on]]
20e14961f630 mod_admin_telnet: Add info about port commands to help
Kim Alvefur <zash@zash.se>
parents: 5227
diff changeset
   290
		print [[port:close(port, interface) - Close a port]]
5567
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
   291
	elseif section == "dns" then
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
   292
		print [[dns:lookup(name, type, class) - Do a DNS lookup]]
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
   293
		print [[dns:addnameserver(nameserver) - Add a nameserver to the list]]
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
   294
		print [[dns:setnameserver(nameserver) - Replace the list of name servers with the supplied one]]
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
   295
		print [[dns:purge() - Clear the DNS cache]]
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
   296
		print [[dns:cache() - Show cached records]]
10091
36d3709603d1 mod_admin_telnet: Add xmpp:ping to help
Kim Alvefur <zash@zash.se>
parents: 10090
diff changeset
   297
	elseif section == "xmpp" then
36d3709603d1 mod_admin_telnet: Add xmpp:ping to help
Kim Alvefur <zash@zash.se>
parents: 10090
diff changeset
   298
		print [[xmpp:ping(localhost, remotehost) -- Sends a ping to a remote XMPP server and reports the response]]
2009
3f9cce29c57d mod_console: Added help text for config:reload().
Waqas Hussain <waqas20@gmail.com>
parents: 2007
diff changeset
   299
	elseif section == "config" then
3f9cce29c57d mod_console: Added help text for config:reload().
Waqas Hussain <waqas20@gmail.com>
parents: 2007
diff changeset
   300
		print [[config:reload() - Reload the server configuration. Modules may need to be reloaded for changes to take effect.]]
10521
6e1163fa2cd2 mod_admin_telnet: Include config:get() in help text
Kim Alvefur <zash@zash.se>
parents: 10514
diff changeset
   301
		print [[config:get([host,] option) - Show the value of a config option.]]
1616
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   302
	elseif section == "console" then
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   303
		print [[Hey! Welcome to Prosody's admin console.]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   304
		print [[First thing, if you're ever wondering how to get out, simply type 'quit'.]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   305
		print [[Secondly, note that we don't support the full telnet protocol yet (it's coming)]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   306
		print [[so you may have trouble using the arrow keys, etc. depending on your system.]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   307
		print [[]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   308
		print [[For now we offer a couple of handy shortcuts:]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   309
		print [[!! - Repeat the last command]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   310
		print [[!old!new! - repeat the last command, but with 'old' replaced by 'new']]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   311
		print [[]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   312
		print [[For those well-versed in Prosody's internals, or taking instruction from those who are,]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   313
		print [[you can prefix a command with > to escape the console sandbox, and access everything in]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   314
		print [[the running server. Great fun, but be careful not to break anything :)]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   315
	end
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   316
	print [[]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   317
end
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   318
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   319
-- Session environment --
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   320
-- Anything in def_env will be accessible within the session as a global variable
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   321
6990
06696882d972 mod_admin_telnet: Add http:list() command to get info about current HTTP endpoints on the server
Matthew Wild <mwild1@gmail.com>
parents: 6930
diff changeset
   322
--luacheck: ignore 212/self
06696882d972 mod_admin_telnet: Add http:list() command to get info about current HTTP endpoints on the server
Matthew Wild <mwild1@gmail.com>
parents: 6930
diff changeset
   323
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   324
def_env.server = {};
1558
e15917530285 mod_console: Add config:reload() command
Matthew Wild <mwild1@gmail.com>
parents: 1556
diff changeset
   325
1556
8154aa1fbe6c mod_console: Rename server:reload() to server:insane_reload() (basically no-one should use it except me...)
Matthew Wild <mwild1@gmail.com>
parents: 1523
diff changeset
   326
function def_env.server:insane_reload()
1316
28ae044f1aaf mod_console: Some "improvements" to the useless server:reload() command :)
Matthew Wild <mwild1@gmail.com>
parents: 1315
diff changeset
   327
	prosody.unlock_globals();
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   328
	dofile "prosody"
1316
28ae044f1aaf mod_console: Some "improvements" to the useless server:reload() command :)
Matthew Wild <mwild1@gmail.com>
parents: 1315
diff changeset
   329
	prosody = _G.prosody;
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   330
	return true, "Server reloaded";
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   331
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   332
1496
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   333
function def_env.server:version()
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   334
	return true, tostring(prosody.version or "unknown");
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   335
end
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   336
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   337
function def_env.server:uptime()
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   338
	local t = os.time()-prosody.start_time;
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   339
	local seconds = t%60;
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   340
	t = (t - seconds)/60;
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   341
	local minutes = t%60;
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   342
	t = (t - minutes)/60;
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   343
	local hours = t%24;
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   344
	t = (t - hours)/24;
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   345
	local days = t;
3540
bc139431830b Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents: 3452
diff changeset
   346
	return true, string.format("This server has been running for %d day%s, %d hour%s and %d minute%s (since %s)",
bc139431830b Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents: 3452
diff changeset
   347
		days, (days ~= 1 and "s") or "", hours, (hours ~= 1 and "s") or "",
1496
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   348
		minutes, (minutes ~= 1 and "s") or "", os.date("%c", prosody.start_time));
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   349
end
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   350
1559
831649bb1922 mod_console: Add server:shutdown() command
Matthew Wild <mwild1@gmail.com>
parents: 1558
diff changeset
   351
function def_env.server:shutdown(reason)
831649bb1922 mod_console: Add server:shutdown() command
Matthew Wild <mwild1@gmail.com>
parents: 1558
diff changeset
   352
	prosody.shutdown(reason);
831649bb1922 mod_console: Add server:shutdown() command
Matthew Wild <mwild1@gmail.com>
parents: 1558
diff changeset
   353
	return true, "Shutdown initiated";
831649bb1922 mod_console: Add server:shutdown() command
Matthew Wild <mwild1@gmail.com>
parents: 1558
diff changeset
   354
end
831649bb1922 mod_console: Add server:shutdown() command
Matthew Wild <mwild1@gmail.com>
parents: 1558
diff changeset
   355
5672
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   356
local function human(kb)
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   357
	local unit = "K";
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   358
	if kb > 1024 then
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   359
		kb, unit = kb/1024, "M";
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   360
	end
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   361
	return ("%0.2f%sB"):format(kb, unit);
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   362
end
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   363
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   364
function def_env.server:memory()
6506
8437058c4226 mod_admin_telnet: Soft-reqire util.pposix for server:memory()
Kim Alvefur <zash@zash.se>
parents: 6382
diff changeset
   365
	if not has_pposix or not pposix.meminfo then
8129
60f6f7ddd2ce mod_admin_telnet: Output human-friendly memory usage when meminfo is unavailable (thanks nbastin)
Kim Alvefur <zash@zash.se>
parents: 7980
diff changeset
   366
		return true, "Lua is using "..human(collectgarbage("count"));
5672
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   367
	end
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   368
	local mem, lua_mem = pposix.meminfo(), collectgarbage("count");
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   369
	local print = self.session.print;
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   370
	print("Process: "..human((mem.allocated+mem.allocated_mmap)/1024));
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   371
	print("   Used: "..human(mem.used/1024).." ("..human(lua_mem).." by Lua)");
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   372
	print("   Free: "..human(mem.unused/1024).." ("..human(mem.returnable/1024).." returnable)");
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   373
	return true, "OK";
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   374
end
0c68cea74d5d mod_admin_telnet: Add server:memory() command to view details of Prosody's memory usage
Matthew Wild <mwild1@gmail.com>
parents: 5665
diff changeset
   375
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   376
def_env.module = {};
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   377
10511
4d3549e64489 mod_admin_telnet: Refactor internal function for listing hosts
Kim Alvefur <zash@zash.se>
parents: 10510
diff changeset
   378
local function get_hosts_set(hosts)
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   379
	if type(hosts) == "table" then
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   380
		if hosts[1] then
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   381
			return set.new(hosts);
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   382
		elseif hosts._items then
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   383
			return hosts;
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   384
		end
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   385
	elseif type(hosts) == "string" then
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   386
		return set.new { hosts };
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   387
	elseif hosts == nil then
10511
4d3549e64489 mod_admin_telnet: Refactor internal function for listing hosts
Kim Alvefur <zash@zash.se>
parents: 10510
diff changeset
   388
		return set.new(array.collect(keys(prosody.hosts)));
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   389
	end
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   390
end
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   391
10511
4d3549e64489 mod_admin_telnet: Refactor internal function for listing hosts
Kim Alvefur <zash@zash.se>
parents: 10510
diff changeset
   392
-- Hosts with a module or all virtualhosts if no module given
4d3549e64489 mod_admin_telnet: Refactor internal function for listing hosts
Kim Alvefur <zash@zash.se>
parents: 10510
diff changeset
   393
-- matching modules_enabled in the global section
4d3549e64489 mod_admin_telnet: Refactor internal function for listing hosts
Kim Alvefur <zash@zash.se>
parents: 10510
diff changeset
   394
local function get_hosts_with_module(hosts, module)
4d3549e64489 mod_admin_telnet: Refactor internal function for listing hosts
Kim Alvefur <zash@zash.se>
parents: 10510
diff changeset
   395
	local hosts_set = get_hosts_set(hosts)
10661
197ba9539390 mod_admin_telnet: Reflow hosts filter for readability
Kim Alvefur <zash@zash.se>
parents: 10648
diff changeset
   396
	/ function (host)
10662
52c6dfa04dba mod_admin_telnet: Fix host selection filter, fixes loading on components
Kim Alvefur <zash@zash.se>
parents: 10661
diff changeset
   397
			if module then
52c6dfa04dba mod_admin_telnet: Fix host selection filter, fixes loading on components
Kim Alvefur <zash@zash.se>
parents: 10661
diff changeset
   398
				-- Module given, filter in hosts with this module loaded
52c6dfa04dba mod_admin_telnet: Fix host selection filter, fixes loading on components
Kim Alvefur <zash@zash.se>
parents: 10661
diff changeset
   399
				if modulemanager.is_loaded(host, module) then
52c6dfa04dba mod_admin_telnet: Fix host selection filter, fixes loading on components
Kim Alvefur <zash@zash.se>
parents: 10661
diff changeset
   400
					return host;
52c6dfa04dba mod_admin_telnet: Fix host selection filter, fixes loading on components
Kim Alvefur <zash@zash.se>
parents: 10661
diff changeset
   401
				else
52c6dfa04dba mod_admin_telnet: Fix host selection filter, fixes loading on components
Kim Alvefur <zash@zash.se>
parents: 10661
diff changeset
   402
					return nil;
52c6dfa04dba mod_admin_telnet: Fix host selection filter, fixes loading on components
Kim Alvefur <zash@zash.se>
parents: 10661
diff changeset
   403
				end
52c6dfa04dba mod_admin_telnet: Fix host selection filter, fixes loading on components
Kim Alvefur <zash@zash.se>
parents: 10661
diff changeset
   404
			end
52c6dfa04dba mod_admin_telnet: Fix host selection filter, fixes loading on components
Kim Alvefur <zash@zash.se>
parents: 10661
diff changeset
   405
			if not hosts then
52c6dfa04dba mod_admin_telnet: Fix host selection filter, fixes loading on components
Kim Alvefur <zash@zash.se>
parents: 10661
diff changeset
   406
				-- No hosts given, filter in VirtualHosts
52c6dfa04dba mod_admin_telnet: Fix host selection filter, fixes loading on components
Kim Alvefur <zash@zash.se>
parents: 10661
diff changeset
   407
				if prosody.hosts[host].type == "local" then
52c6dfa04dba mod_admin_telnet: Fix host selection filter, fixes loading on components
Kim Alvefur <zash@zash.se>
parents: 10661
diff changeset
   408
					return host;
52c6dfa04dba mod_admin_telnet: Fix host selection filter, fixes loading on components
Kim Alvefur <zash@zash.se>
parents: 10661
diff changeset
   409
				else
52c6dfa04dba mod_admin_telnet: Fix host selection filter, fixes loading on components
Kim Alvefur <zash@zash.se>
parents: 10661
diff changeset
   410
					return nil
52c6dfa04dba mod_admin_telnet: Fix host selection filter, fixes loading on components
Kim Alvefur <zash@zash.se>
parents: 10661
diff changeset
   411
				end
10661
197ba9539390 mod_admin_telnet: Reflow hosts filter for readability
Kim Alvefur <zash@zash.se>
parents: 10648
diff changeset
   412
			end;
10662
52c6dfa04dba mod_admin_telnet: Fix host selection filter, fixes loading on components
Kim Alvefur <zash@zash.se>
parents: 10661
diff changeset
   413
			-- No module given, but hosts are, don't filter at all
52c6dfa04dba mod_admin_telnet: Fix host selection filter, fixes loading on components
Kim Alvefur <zash@zash.se>
parents: 10661
diff changeset
   414
			return host;
10661
197ba9539390 mod_admin_telnet: Reflow hosts filter for readability
Kim Alvefur <zash@zash.se>
parents: 10648
diff changeset
   415
		end;
10511
4d3549e64489 mod_admin_telnet: Refactor internal function for listing hosts
Kim Alvefur <zash@zash.se>
parents: 10510
diff changeset
   416
	if module and modulemanager.get_module("*", module) then
4d3549e64489 mod_admin_telnet: Refactor internal function for listing hosts
Kim Alvefur <zash@zash.se>
parents: 10510
diff changeset
   417
		hosts_set:add("*");
4d3549e64489 mod_admin_telnet: Refactor internal function for listing hosts
Kim Alvefur <zash@zash.se>
parents: 10510
diff changeset
   418
	end
4d3549e64489 mod_admin_telnet: Refactor internal function for listing hosts
Kim Alvefur <zash@zash.se>
parents: 10510
diff changeset
   419
	return hosts_set;
4d3549e64489 mod_admin_telnet: Refactor internal function for listing hosts
Kim Alvefur <zash@zash.se>
parents: 10510
diff changeset
   420
end
4d3549e64489 mod_admin_telnet: Refactor internal function for listing hosts
Kim Alvefur <zash@zash.se>
parents: 10510
diff changeset
   421
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   422
function def_env.module:load(name, hosts, config)
10511
4d3549e64489 mod_admin_telnet: Refactor internal function for listing hosts
Kim Alvefur <zash@zash.se>
parents: 10510
diff changeset
   423
	hosts = get_hosts_with_module(hosts);
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   424
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   425
	-- Load the module for each host
9407
f40b0cd41a87 mod_admin_telnet: Remove or rename various unused arguments and variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9406
diff changeset
   426
	local ok, err, count, mod = true, nil, 0;
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   427
	for host in hosts do
6784
05cd80ec107c mod_admin_telnet: Remove now broken importing of modulemanager from various commands, use upvalue defined at top of file (thanks daurnimator)
Kim Alvefur <zash@zash.se>
parents: 6583
diff changeset
   428
		if (not modulemanager.is_loaded(host, name)) then
05cd80ec107c mod_admin_telnet: Remove now broken importing of modulemanager from various commands, use upvalue defined at top of file (thanks daurnimator)
Kim Alvefur <zash@zash.se>
parents: 6583
diff changeset
   429
			mod, err = modulemanager.load(host, name, config);
4647
57a4f863e48f mod_admin_telnet: module:load(): Fix 'global-module-already-loaded' errors when successfully loading a global module (fixes #228)
Matthew Wild <mwild1@gmail.com>
parents: 4646
diff changeset
   430
			if not mod then
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   431
				ok = false;
4647
57a4f863e48f mod_admin_telnet: module:load(): Fix 'global-module-already-loaded' errors when successfully loading a global module (fixes #228)
Matthew Wild <mwild1@gmail.com>
parents: 4646
diff changeset
   432
				if err == "global-module-already-loaded" then
57a4f863e48f mod_admin_telnet: module:load(): Fix 'global-module-already-loaded' errors when successfully loading a global module (fixes #228)
Matthew Wild <mwild1@gmail.com>
parents: 4646
diff changeset
   433
					if count > 0 then
57a4f863e48f mod_admin_telnet: module:load(): Fix 'global-module-already-loaded' errors when successfully loading a global module (fixes #228)
Matthew Wild <mwild1@gmail.com>
parents: 4646
diff changeset
   434
						ok, err, count = true, nil, 1;
57a4f863e48f mod_admin_telnet: module:load(): Fix 'global-module-already-loaded' errors when successfully loading a global module (fixes #228)
Matthew Wild <mwild1@gmail.com>
parents: 4646
diff changeset
   435
					end
57a4f863e48f mod_admin_telnet: module:load(): Fix 'global-module-already-loaded' errors when successfully loading a global module (fixes #228)
Matthew Wild <mwild1@gmail.com>
parents: 4646
diff changeset
   436
					break;
57a4f863e48f mod_admin_telnet: module:load(): Fix 'global-module-already-loaded' errors when successfully loading a global module (fixes #228)
Matthew Wild <mwild1@gmail.com>
parents: 4646
diff changeset
   437
				end
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   438
				self.session.print(err or "Unknown error loading module");
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   439
			else
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   440
				count = count + 1;
4647
57a4f863e48f mod_admin_telnet: module:load(): Fix 'global-module-already-loaded' errors when successfully loading a global module (fixes #228)
Matthew Wild <mwild1@gmail.com>
parents: 4646
diff changeset
   441
				self.session.print("Loaded for "..mod.module.host);
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   442
			end
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   443
		end
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   444
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   445
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   446
	return ok, (ok and "Module loaded onto "..count.." host"..(count ~= 1 and "s" or "")) or ("Last error: "..tostring(err));
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   447
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   448
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   449
function def_env.module:unload(name, hosts)
10511
4d3549e64489 mod_admin_telnet: Refactor internal function for listing hosts
Kim Alvefur <zash@zash.se>
parents: 10510
diff changeset
   450
	hosts = get_hosts_with_module(hosts, name);
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   451
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   452
	-- Unload the module for each host
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   453
	local ok, err, count = true, nil, 0;
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   454
	for host in hosts do
6784
05cd80ec107c mod_admin_telnet: Remove now broken importing of modulemanager from various commands, use upvalue defined at top of file (thanks daurnimator)
Kim Alvefur <zash@zash.se>
parents: 6583
diff changeset
   455
		if modulemanager.is_loaded(host, name) then
05cd80ec107c mod_admin_telnet: Remove now broken importing of modulemanager from various commands, use upvalue defined at top of file (thanks daurnimator)
Kim Alvefur <zash@zash.se>
parents: 6583
diff changeset
   456
			ok, err = modulemanager.unload(host, name);
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   457
			if not ok then
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   458
				ok = false;
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   459
				self.session.print(err or "Unknown error unloading module");
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   460
			else
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   461
				count = count + 1;
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   462
				self.session.print("Unloaded from "..host);
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   463
			end
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   464
		end
712
56410c0cd846 mod_console: Added module:reload
Waqas Hussain <waqas20@gmail.com>
parents: 669
diff changeset
   465
	end
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   466
	return ok, (ok and "Module unloaded from "..count.." host"..(count ~= 1 and "s" or "")) or ("Last error: "..tostring(err));
712
56410c0cd846 mod_console: Added module:reload
Waqas Hussain <waqas20@gmail.com>
parents: 669
diff changeset
   467
end
56410c0cd846 mod_console: Added module:reload
Waqas Hussain <waqas20@gmail.com>
parents: 669
diff changeset
   468
9335
048389a9bbd4 mod_admin_telnet: Split out sort function for clarity
Matthew Wild <mwild1@gmail.com>
parents: 9333
diff changeset
   469
local function _sort_hosts(a, b)
048389a9bbd4 mod_admin_telnet: Split out sort function for clarity
Matthew Wild <mwild1@gmail.com>
parents: 9333
diff changeset
   470
	if a == "*" then return true
048389a9bbd4 mod_admin_telnet: Split out sort function for clarity
Matthew Wild <mwild1@gmail.com>
parents: 9333
diff changeset
   471
	elseif b == "*" then return false
10510
af214e2739f5 mod_admin_telnet: Merge hostname comparison functions
Kim Alvefur <zash@zash.se>
parents: 10509
diff changeset
   472
	else return a:gsub("[^.]+", string.reverse):reverse() < b:gsub("[^.]+", string.reverse):reverse(); end
9335
048389a9bbd4 mod_admin_telnet: Split out sort function for clarity
Matthew Wild <mwild1@gmail.com>
parents: 9333
diff changeset
   473
end
048389a9bbd4 mod_admin_telnet: Split out sort function for clarity
Matthew Wild <mwild1@gmail.com>
parents: 9333
diff changeset
   474
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   475
function def_env.module:reload(name, hosts)
10511
4d3549e64489 mod_admin_telnet: Refactor internal function for listing hosts
Kim Alvefur <zash@zash.se>
parents: 10510
diff changeset
   476
	hosts = array.collect(get_hosts_with_module(hosts, name)):sort(_sort_hosts)
4645
4539e99be743 mod_admin_telnet: module:reload(): If module is loaded on *, reload it there first (ensuring shared module code is reloaded before per-host children of that module)
Matthew Wild <mwild1@gmail.com>
parents: 4644
diff changeset
   477
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   478
	-- Reload the module for each host
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   479
	local ok, err, count = true, nil, 0;
4645
4539e99be743 mod_admin_telnet: module:reload(): If module is loaded on *, reload it there first (ensuring shared module code is reloaded before per-host children of that module)
Matthew Wild <mwild1@gmail.com>
parents: 4644
diff changeset
   480
	for _, host in ipairs(hosts) do
6784
05cd80ec107c mod_admin_telnet: Remove now broken importing of modulemanager from various commands, use upvalue defined at top of file (thanks daurnimator)
Kim Alvefur <zash@zash.se>
parents: 6583
diff changeset
   481
		if modulemanager.is_loaded(host, name) then
05cd80ec107c mod_admin_telnet: Remove now broken importing of modulemanager from various commands, use upvalue defined at top of file (thanks daurnimator)
Kim Alvefur <zash@zash.se>
parents: 6583
diff changeset
   482
			ok, err = modulemanager.reload(host, name);
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   483
			if not ok then
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   484
				ok = false;
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   485
				self.session.print(err or "Unknown error reloading module");
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   486
			else
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   487
				count = count + 1;
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   488
				if ok == nil then
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   489
					ok = true;
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   490
				end
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   491
				self.session.print("Reloaded on "..host);
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   492
			end
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   493
		end
712
56410c0cd846 mod_console: Added module:reload
Waqas Hussain <waqas20@gmail.com>
parents: 669
diff changeset
   494
	end
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   495
	return ok, (ok and "Module reloaded on "..count.." host"..(count ~= 1 and "s" or "")) or ("Last error: "..tostring(err));
712
56410c0cd846 mod_console: Added module:reload
Waqas Hussain <waqas20@gmail.com>
parents: 669
diff changeset
   496
end
56410c0cd846 mod_console: Added module:reload
Waqas Hussain <waqas20@gmail.com>
parents: 669
diff changeset
   497
1906
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   498
function def_env.module:list(hosts)
10512
edd323b30de1 mod_admin_telnet: Sort hosts in module:list
Kim Alvefur <zash@zash.se>
parents: 10511
diff changeset
   499
	hosts = array.collect(set.new({ not hosts and "*" or nil }) + get_hosts_set(hosts)):sort(_sort_hosts);
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   500
1906
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   501
	local print = self.session.print;
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   502
	for _, host in ipairs(hosts) do
4646
e0bd8587f2fb mod_admin_telnet: module:list(): List global modules (part-fixes #228)
Matthew Wild <mwild1@gmail.com>
parents: 4645
diff changeset
   503
		print((host == "*" and "Global" or host)..":");
e0bd8587f2fb mod_admin_telnet: module:list(): List global modules (part-fixes #228)
Matthew Wild <mwild1@gmail.com>
parents: 4645
diff changeset
   504
		local modules = array.collect(keys(modulemanager.get_modules(host) or {})):sort();
1906
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   505
		if #modules == 0 then
2010
1a4f14ea39b6 mod_console: Fixed traceback occuring on using module:list on unknown hosts.
Waqas Hussain <waqas20@gmail.com>
parents: 2009
diff changeset
   506
			if prosody.hosts[host] then
1a4f14ea39b6 mod_console: Fixed traceback occuring on using module:list on unknown hosts.
Waqas Hussain <waqas20@gmail.com>
parents: 2009
diff changeset
   507
				print("    No modules loaded");
1a4f14ea39b6 mod_console: Fixed traceback occuring on using module:list on unknown hosts.
Waqas Hussain <waqas20@gmail.com>
parents: 2009
diff changeset
   508
			else
1a4f14ea39b6 mod_console: Fixed traceback occuring on using module:list on unknown hosts.
Waqas Hussain <waqas20@gmail.com>
parents: 2009
diff changeset
   509
				print("    Host not found");
1a4f14ea39b6 mod_console: Fixed traceback occuring on using module:list on unknown hosts.
Waqas Hussain <waqas20@gmail.com>
parents: 2009
diff changeset
   510
			end
1906
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   511
		else
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   512
			for _, name in ipairs(modules) do
9872
0361e3379dd1 mod_admin_telnet: Show module status in module:list()
Matthew Wild <mwild1@gmail.com>
parents: 9790
diff changeset
   513
				local status, status_text = modulemanager.get_module(host, name).module:get_status();
0361e3379dd1 mod_admin_telnet: Show module status in module:list()
Matthew Wild <mwild1@gmail.com>
parents: 9790
diff changeset
   514
				local status_summary = "";
0361e3379dd1 mod_admin_telnet: Show module status in module:list()
Matthew Wild <mwild1@gmail.com>
parents: 9790
diff changeset
   515
				if status == "warn" or status == "error" then
0361e3379dd1 mod_admin_telnet: Show module status in module:list()
Matthew Wild <mwild1@gmail.com>
parents: 9790
diff changeset
   516
					status_summary = (" (%s: %s)"):format(status, status_text);
0361e3379dd1 mod_admin_telnet: Show module status in module:list()
Matthew Wild <mwild1@gmail.com>
parents: 9790
diff changeset
   517
				end
0361e3379dd1 mod_admin_telnet: Show module status in module:list()
Matthew Wild <mwild1@gmail.com>
parents: 9790
diff changeset
   518
				print(("    %s%s"):format(name, status_summary));
1906
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   519
			end
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   520
		end
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   521
	end
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   522
end
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   523
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   524
def_env.config = {};
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   525
function def_env.config:load(filename, format)
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   526
	local config_load = require "core.configmanager".load;
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   527
	local ok, err = config_load(filename, format);
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   528
	if not ok then
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   529
		return false, err or "Unknown error loading config";
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   530
	end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   531
	return true, "Config loaded";
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   532
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   533
9757
3a14815f5430 mod_admin_telnet: Remove the long gone 'section' argument in the undocumented config:get command
Kim Alvefur <zash@zash.se>
parents: 9752
diff changeset
   534
function def_env.config:get(host, key)
9758
cbbc6fefd07d mod_admin_telnet: config:get: Assume the global section if only one argument is given
Kim Alvefur <zash@zash.se>
parents: 9757
diff changeset
   535
	if key == nil then
cbbc6fefd07d mod_admin_telnet: config:get: Assume the global section if only one argument is given
Kim Alvefur <zash@zash.se>
parents: 9757
diff changeset
   536
		host, key = "*", host;
cbbc6fefd07d mod_admin_telnet: config:get: Assume the global section if only one argument is given
Kim Alvefur <zash@zash.se>
parents: 9757
diff changeset
   537
	end
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   538
	local config_get = require "core.configmanager".get
10791
459efb1afbfe mod_admin_telnet: Pretty-print values returned from commands
Kim Alvefur <zash@zash.se>
parents: 10705
diff changeset
   539
	return true, serialize_config(config_get(host, key));
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   540
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   541
1558
e15917530285 mod_console: Add config:reload() command
Matthew Wild <mwild1@gmail.com>
parents: 1556
diff changeset
   542
function def_env.config:reload()
e15917530285 mod_console: Add config:reload() command
Matthew Wild <mwild1@gmail.com>
parents: 1556
diff changeset
   543
	local ok, err = prosody.reload_config();
e15917530285 mod_console: Add config:reload() command
Matthew Wild <mwild1@gmail.com>
parents: 1556
diff changeset
   544
	return ok, (ok and "Config reloaded (you may need to reload modules to take effect)") or tostring(err);
e15917530285 mod_console: Add config:reload() command
Matthew Wild <mwild1@gmail.com>
parents: 1556
diff changeset
   545
end
e15917530285 mod_console: Add config:reload() command
Matthew Wild <mwild1@gmail.com>
parents: 1556
diff changeset
   546
6173
1600438c0c14 mod_admin_telnet: Move generation of log tag for s2s:show() (adds it to c2s:show() too)
Kim Alvefur <zash@zash.se>
parents: 6172
diff changeset
   547
local function common_info(session, line)
1600438c0c14 mod_admin_telnet: Move generation of log tag for s2s:show() (adds it to c2s:show() too)
Kim Alvefur <zash@zash.se>
parents: 6172
diff changeset
   548
	if session.id then
1600438c0c14 mod_admin_telnet: Move generation of log tag for s2s:show() (adds it to c2s:show() too)
Kim Alvefur <zash@zash.se>
parents: 6172
diff changeset
   549
		line[#line+1] = "["..session.id.."]"
1600438c0c14 mod_admin_telnet: Move generation of log tag for s2s:show() (adds it to c2s:show() too)
Kim Alvefur <zash@zash.se>
parents: 6172
diff changeset
   550
	else
1600438c0c14 mod_admin_telnet: Move generation of log tag for s2s:show() (adds it to c2s:show() too)
Kim Alvefur <zash@zash.se>
parents: 6172
diff changeset
   551
		line[#line+1] = "["..session.type..(tostring(session):match("%x*$")).."]"
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   552
	end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   553
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   554
5586
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   555
local function session_flags(session, line)
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   556
	line = line or {};
6173
1600438c0c14 mod_admin_telnet: Move generation of log tag for s2s:show() (adds it to c2s:show() too)
Kim Alvefur <zash@zash.se>
parents: 6172
diff changeset
   557
	common_info(session, line);
6171
c69fca37f338 mod_admin_telnet: Move extraction of c2s presence info into session_flags()
Kim Alvefur <zash@zash.se>
parents: 6170
diff changeset
   558
	if session.type == "c2s" then
c69fca37f338 mod_admin_telnet: Move extraction of c2s presence info into session_flags()
Kim Alvefur <zash@zash.se>
parents: 6170
diff changeset
   559
		local status, priority = "unavailable", tostring(session.priority or "-");
c69fca37f338 mod_admin_telnet: Move extraction of c2s presence info into session_flags()
Kim Alvefur <zash@zash.se>
parents: 6170
diff changeset
   560
		if session.presence then
c69fca37f338 mod_admin_telnet: Move extraction of c2s presence info into session_flags()
Kim Alvefur <zash@zash.se>
parents: 6170
diff changeset
   561
			status = session.presence:get_child_text("show") or "available";
c69fca37f338 mod_admin_telnet: Move extraction of c2s presence info into session_flags()
Kim Alvefur <zash@zash.se>
parents: 6170
diff changeset
   562
		end
c69fca37f338 mod_admin_telnet: Move extraction of c2s presence info into session_flags()
Kim Alvefur <zash@zash.se>
parents: 6170
diff changeset
   563
		line[#line+1] = status.."("..priority..")";
c69fca37f338 mod_admin_telnet: Move extraction of c2s presence info into session_flags()
Kim Alvefur <zash@zash.se>
parents: 6170
diff changeset
   564
	end
5586
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   565
	if session.cert_identity_status == "valid" then
6170
1dff425ffe84 mod_admin_telnet: Split (secure) into (authenticated) + (secure)
Kim Alvefur <zash@zash.se>
parents: 6169
diff changeset
   566
		line[#line+1] = "(authenticated)";
1dff425ffe84 mod_admin_telnet: Split (secure) into (authenticated) + (secure)
Kim Alvefur <zash@zash.se>
parents: 6169
diff changeset
   567
	end
10387
496248e48a1d mod_admin_telnet: Show s2s authentication method (probably) used
Kim Alvefur <zash@zash.se>
parents: 10314
diff changeset
   568
	if session.dialback_key then
496248e48a1d mod_admin_telnet: Show s2s authentication method (probably) used
Kim Alvefur <zash@zash.se>
parents: 10314
diff changeset
   569
		line[#line+1] = "(dialback)";
496248e48a1d mod_admin_telnet: Show s2s authentication method (probably) used
Kim Alvefur <zash@zash.se>
parents: 10314
diff changeset
   570
	end
496248e48a1d mod_admin_telnet: Show s2s authentication method (probably) used
Kim Alvefur <zash@zash.se>
parents: 10314
diff changeset
   571
	if session.external_auth then
496248e48a1d mod_admin_telnet: Show s2s authentication method (probably) used
Kim Alvefur <zash@zash.se>
parents: 10314
diff changeset
   572
		line[#line+1] = "(SASL)";
496248e48a1d mod_admin_telnet: Show s2s authentication method (probably) used
Kim Alvefur <zash@zash.se>
parents: 10314
diff changeset
   573
	end
6170
1dff425ffe84 mod_admin_telnet: Split (secure) into (authenticated) + (secure)
Kim Alvefur <zash@zash.se>
parents: 6169
diff changeset
   574
	if session.secure then
5586
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   575
		line[#line+1] = "(encrypted)";
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   576
	end
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   577
	if session.compressed then
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   578
		line[#line+1] = "(compressed)";
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   579
	end
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   580
	if session.smacks then
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   581
		line[#line+1] = "(sm)";
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   582
	end
5662
685d46ec352b mod_admin_telnet: Simplify IPv6 detection, fixes rare traceback
Kim Alvefur <zash@zash.se>
parents: 5645
diff changeset
   583
	if session.ip and session.ip:match(":") then
5586
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   584
		line[#line+1] = "(IPv6)";
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   585
	end
6930
566e1cfcb814 mod_admin_telnet: c2s:show(): Add flag to indicate remote sessions
Matthew Wild <mwild1@gmail.com>
parents: 6841
diff changeset
   586
	if session.remote then
566e1cfcb814 mod_admin_telnet: c2s:show(): Add flag to indicate remote sessions
Matthew Wild <mwild1@gmail.com>
parents: 6841
diff changeset
   587
		line[#line+1] = "(remote)";
566e1cfcb814 mod_admin_telnet: c2s:show(): Add flag to indicate remote sessions
Matthew Wild <mwild1@gmail.com>
parents: 6841
diff changeset
   588
	end
10256
aa3f98853816 mod_admin_telnet: Identify native bidi sessions
Kim Alvefur <zash@zash.se>
parents: 10243
diff changeset
   589
	if session.incoming and session.outgoing then
aa3f98853816 mod_admin_telnet: Identify native bidi sessions
Kim Alvefur <zash@zash.se>
parents: 10243
diff changeset
   590
		line[#line+1] = "(bidi)";
aa3f98853816 mod_admin_telnet: Identify native bidi sessions
Kim Alvefur <zash@zash.se>
parents: 10243
diff changeset
   591
	elseif session.is_bidi or session.bidi_session then
9715
39dc037875e1 admin_telnet: show when bidi is used on s2s
Maxime “pep” Buquet <pep@bouah.net>
parents: 9695
diff changeset
   592
		line[#line+1] = "(bidi)";
39dc037875e1 admin_telnet: show when bidi is used on s2s
Maxime “pep” Buquet <pep@bouah.net>
parents: 9695
diff changeset
   593
	end
9992
cdf0b63a0d61 mod_admin_telnet: added "(bosh)" and "(websocket)" connection flags (#998)
Arc Riley <arcriley@gmail.com>
parents: 9991
diff changeset
   594
	if session.bosh_version then
cdf0b63a0d61 mod_admin_telnet: added "(bosh)" and "(websocket)" connection flags (#998)
Arc Riley <arcriley@gmail.com>
parents: 9991
diff changeset
   595
		line[#line+1] = "(bosh)";
cdf0b63a0d61 mod_admin_telnet: added "(bosh)" and "(websocket)" connection flags (#998)
Arc Riley <arcriley@gmail.com>
parents: 9991
diff changeset
   596
	end
cdf0b63a0d61 mod_admin_telnet: added "(bosh)" and "(websocket)" connection flags (#998)
Arc Riley <arcriley@gmail.com>
parents: 9991
diff changeset
   597
	if session.websocket_request then
cdf0b63a0d61 mod_admin_telnet: added "(bosh)" and "(websocket)" connection flags (#998)
Arc Riley <arcriley@gmail.com>
parents: 9991
diff changeset
   598
		line[#line+1] = "(websocket)";
cdf0b63a0d61 mod_admin_telnet: added "(bosh)" and "(websocket)" connection flags (#998)
Arc Riley <arcriley@gmail.com>
parents: 9991
diff changeset
   599
	end
5586
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   600
	return table.concat(line, " ");
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   601
end
7e1264bf7af8 mod_admin_telnet: List session flags (encryption, compression etc) the same way for c2s as s2s
Kim Alvefur <zash@zash.se>
parents: 5579
diff changeset
   602
6172
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   603
local function tls_info(session, line)
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   604
	line = line or {};
6173
1600438c0c14 mod_admin_telnet: Move generation of log tag for s2s:show() (adds it to c2s:show() too)
Kim Alvefur <zash@zash.se>
parents: 6172
diff changeset
   605
	common_info(session, line);
6172
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   606
	if session.secure then
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   607
		local sock = session.conn and session.conn.socket and session.conn:socket();
10703
fd77b6cec38d mod_admin_telnet: Handle unavailable cipher info (fixes #1510)
Kim Alvefur <zash@zash.se>
parents: 10622
diff changeset
   608
		if sock then
fd77b6cec38d mod_admin_telnet: Handle unavailable cipher info (fixes #1510)
Kim Alvefur <zash@zash.se>
parents: 10622
diff changeset
   609
			local info = sock.info and sock:info();
fd77b6cec38d mod_admin_telnet: Handle unavailable cipher info (fixes #1510)
Kim Alvefur <zash@zash.se>
parents: 10622
diff changeset
   610
			if info then
fd77b6cec38d mod_admin_telnet: Handle unavailable cipher info (fixes #1510)
Kim Alvefur <zash@zash.se>
parents: 10622
diff changeset
   611
				line[#line+1] = ("(%s with %s)"):format(info.protocol, info.cipher);
fd77b6cec38d mod_admin_telnet: Handle unavailable cipher info (fixes #1510)
Kim Alvefur <zash@zash.se>
parents: 10622
diff changeset
   612
			else
fd77b6cec38d mod_admin_telnet: Handle unavailable cipher info (fixes #1510)
Kim Alvefur <zash@zash.se>
parents: 10622
diff changeset
   613
				-- TLS session might not be ready yet
fd77b6cec38d mod_admin_telnet: Handle unavailable cipher info (fixes #1510)
Kim Alvefur <zash@zash.se>
parents: 10622
diff changeset
   614
				line[#line+1] = "(cipher info unavailable)";
fd77b6cec38d mod_admin_telnet: Handle unavailable cipher info (fixes #1510)
Kim Alvefur <zash@zash.se>
parents: 10622
diff changeset
   615
			end
10648
6c4ab1b87588 mod_admin_telnet: Avoid indexing missing socket (thanks tmolitor)
Kim Alvefur <zash@zash.se>
parents: 10624
diff changeset
   616
			if sock.getsniname then
6c4ab1b87588 mod_admin_telnet: Avoid indexing missing socket (thanks tmolitor)
Kim Alvefur <zash@zash.se>
parents: 10624
diff changeset
   617
				local name = sock:getsniname();
6c4ab1b87588 mod_admin_telnet: Avoid indexing missing socket (thanks tmolitor)
Kim Alvefur <zash@zash.se>
parents: 10624
diff changeset
   618
				if name then
6c4ab1b87588 mod_admin_telnet: Avoid indexing missing socket (thanks tmolitor)
Kim Alvefur <zash@zash.se>
parents: 10624
diff changeset
   619
					line[#line+1] = ("(SNI:%q)"):format(name);
6c4ab1b87588 mod_admin_telnet: Avoid indexing missing socket (thanks tmolitor)
Kim Alvefur <zash@zash.se>
parents: 10624
diff changeset
   620
				end
6c4ab1b87588 mod_admin_telnet: Avoid indexing missing socket (thanks tmolitor)
Kim Alvefur <zash@zash.se>
parents: 10624
diff changeset
   621
			end
6c4ab1b87588 mod_admin_telnet: Avoid indexing missing socket (thanks tmolitor)
Kim Alvefur <zash@zash.se>
parents: 10624
diff changeset
   622
			if sock.getalpn then
6c4ab1b87588 mod_admin_telnet: Avoid indexing missing socket (thanks tmolitor)
Kim Alvefur <zash@zash.se>
parents: 10624
diff changeset
   623
				local proto = sock:getalpn();
6c4ab1b87588 mod_admin_telnet: Avoid indexing missing socket (thanks tmolitor)
Kim Alvefur <zash@zash.se>
parents: 10624
diff changeset
   624
				if proto then
6c4ab1b87588 mod_admin_telnet: Avoid indexing missing socket (thanks tmolitor)
Kim Alvefur <zash@zash.se>
parents: 10624
diff changeset
   625
					line[#line+1] = ("(ALPN:%q)"):format(proto);
6c4ab1b87588 mod_admin_telnet: Avoid indexing missing socket (thanks tmolitor)
Kim Alvefur <zash@zash.se>
parents: 10624
diff changeset
   626
				end
6c4ab1b87588 mod_admin_telnet: Avoid indexing missing socket (thanks tmolitor)
Kim Alvefur <zash@zash.se>
parents: 10624
diff changeset
   627
			end
6172
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   628
		end
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   629
	else
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   630
		line[#line+1] = "(insecure)";
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   631
	end
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   632
	return table.concat(line, " ");
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   633
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   634
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   635
def_env.c2s = {};
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   636
7071
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   637
local function get_jid(session)
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   638
	if session.username then
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   639
		return session.full_jid or jid_join(session.username, session.host, session.resource);
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   640
	end
7072
eae5d2f1311d mod_admin_telnet: Show unauthenticated clients identified by local/remote IP and port
Kim Alvefur <zash@zash.se>
parents: 7071
diff changeset
   641
eae5d2f1311d mod_admin_telnet: Show unauthenticated clients identified by local/remote IP and port
Kim Alvefur <zash@zash.se>
parents: 7071
diff changeset
   642
	local conn = session.conn;
eae5d2f1311d mod_admin_telnet: Show unauthenticated clients identified by local/remote IP and port
Kim Alvefur <zash@zash.se>
parents: 7071
diff changeset
   643
	local ip = session.ip or "?";
eae5d2f1311d mod_admin_telnet: Show unauthenticated clients identified by local/remote IP and port
Kim Alvefur <zash@zash.se>
parents: 7071
diff changeset
   644
	local clientport = conn and conn:clientport() or "?";
eae5d2f1311d mod_admin_telnet: Show unauthenticated clients identified by local/remote IP and port
Kim Alvefur <zash@zash.se>
parents: 7071
diff changeset
   645
	local serverip = conn and conn.server and conn:server():ip() or "?";
eae5d2f1311d mod_admin_telnet: Show unauthenticated clients identified by local/remote IP and port
Kim Alvefur <zash@zash.se>
parents: 7071
diff changeset
   646
	local serverport = conn and conn:serverport() or "?"
eae5d2f1311d mod_admin_telnet: Show unauthenticated clients identified by local/remote IP and port
Kim Alvefur <zash@zash.se>
parents: 7071
diff changeset
   647
	return jid_join("["..ip.."]:"..clientport, session.host or "["..serverip.."]:"..serverport);
7071
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   648
end
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   649
10088
e4043e3928f2 mod_admin_telnet: Factor out function for collecting all c2s sessions for easier reuse
Kim Alvefur <zash@zash.se>
parents: 10087
diff changeset
   650
local function get_c2s()
10087
f30d505e755b mod_admin_telnet: Include both c2s connections and sessions in c2s:show()
Kim Alvefur <zash@zash.se>
parents: 10072
diff changeset
   651
	local c2s = array.collect(values(prosody.full_sessions));
f30d505e755b mod_admin_telnet: Include both c2s connections and sessions in c2s:show()
Kim Alvefur <zash@zash.se>
parents: 10072
diff changeset
   652
	c2s:append(array.collect(values(module:shared"/*/c2s/sessions")));
10048
4fd27023224a mod_admin_telnet: Collect array from Bosh connections when appending to connection list
Michel Le Bihan <michel@lebihan.pl>
parents: 9993
diff changeset
   653
	c2s:append(array.collect(values(module:shared"/*/bosh/sessions")));
10087
f30d505e755b mod_admin_telnet: Include both c2s connections and sessions in c2s:show()
Kim Alvefur <zash@zash.se>
parents: 10072
diff changeset
   654
	c2s:unique();
10088
e4043e3928f2 mod_admin_telnet: Factor out function for collecting all c2s sessions for easier reuse
Kim Alvefur <zash@zash.se>
parents: 10087
diff changeset
   655
	return c2s;
e4043e3928f2 mod_admin_telnet: Factor out function for collecting all c2s sessions for easier reuse
Kim Alvefur <zash@zash.se>
parents: 10087
diff changeset
   656
end
e4043e3928f2 mod_admin_telnet: Factor out function for collecting all c2s sessions for easier reuse
Kim Alvefur <zash@zash.se>
parents: 10087
diff changeset
   657
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   658
local function show_c2s(callback)
10088
e4043e3928f2 mod_admin_telnet: Factor out function for collecting all c2s sessions for easier reuse
Kim Alvefur <zash@zash.se>
parents: 10087
diff changeset
   659
	get_c2s():sort(function(a, b)
7071
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   660
		if a.host == b.host then
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   661
			if a.username == b.username then
7093
7aa37d70944b mod_admin_telnet: Fix sorting of JIDs in c2s:show() family of functions (thanks lookshe and Zash)
Matthew Wild <mwild1@gmail.com>
parents: 7073
diff changeset
   662
				return (a.resource or "") > (b.resource or "");
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   663
			end
7093
7aa37d70944b mod_admin_telnet: Fix sorting of JIDs in c2s:show() family of functions (thanks lookshe and Zash)
Matthew Wild <mwild1@gmail.com>
parents: 7073
diff changeset
   664
			return (a.username or "") > (b.username or "");
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   665
		end
10513
0aa0fd1adbb0 mod_admin_telnet: Use existing host comparison when comparing JIDs
Kim Alvefur <zash@zash.se>
parents: 10512
diff changeset
   666
		return _sort_hosts(a.host or "", b.host or "");
7071
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   667
	end):map(function (session)
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   668
		callback(get_jid(session), session)
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   669
	end);
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   670
end
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   671
9407
f40b0cd41a87 mod_admin_telnet: Remove or rename various unused arguments and variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9406
diff changeset
   672
function def_env.c2s:count()
10089
bf51a08a94a7 mod_admin_telnet: Make c2s:count() consistent with c2s:show()
Kim Alvefur <zash@zash.se>
parents: 10088
diff changeset
   673
	local c2s = get_c2s();
bf51a08a94a7 mod_admin_telnet: Make c2s:count() consistent with c2s:show()
Kim Alvefur <zash@zash.se>
parents: 10088
diff changeset
   674
	return true, "Total: "..  #c2s .." clients";
4779
9f2639b3d9b1 mod_admin_telnet: Add c2s:count() which shows number of connected users.
Kim Alvefur <zash@zash.se>
parents: 4684
diff changeset
   675
end
9f2639b3d9b1 mod_admin_telnet: Add c2s:count() which shows number of connected users.
Kim Alvefur <zash@zash.se>
parents: 4684
diff changeset
   676
6174
513ea94761b2 mod_admin_telnet: Add c2s:show_tls(), behaves like s2s:show_tls()
Kim Alvefur <zash@zash.se>
parents: 6173
diff changeset
   677
function def_env.c2s:show(match_jid, annotate)
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   678
	local print, count = self.session.print, 0;
6174
513ea94761b2 mod_admin_telnet: Add c2s:show_tls(), behaves like s2s:show_tls()
Kim Alvefur <zash@zash.se>
parents: 6173
diff changeset
   679
	annotate = annotate or session_flags;
7071
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   680
	local curr_host = false;
1798
4c8f3fa9d926 mod_console: Show status and priority of clients
Matthew Wild <mwild1@gmail.com>
parents: 1616
diff changeset
   681
	show_c2s(function (jid, session)
1763
9e4ff3b66ed1 mod_console: c2s:show(): Group listed clients by host
Matthew Wild <mwild1@gmail.com>
parents: 1623
diff changeset
   682
		if curr_host ~= session.host then
9e4ff3b66ed1 mod_console: c2s:show(): Group listed clients by host
Matthew Wild <mwild1@gmail.com>
parents: 1623
diff changeset
   683
			curr_host = session.host;
7071
0c494bca43cb mod_admin_telnet: c2s:show() etc, list all sessions including unauthenticated or not with no stream opened
Kim Alvefur <zash@zash.se>
parents: 7070
diff changeset
   684
			print(curr_host or "(not connected to any host yet)");
1763
9e4ff3b66ed1 mod_console: c2s:show(): Group listed clients by host
Matthew Wild <mwild1@gmail.com>
parents: 1623
diff changeset
   685
		end
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   686
		if (not match_jid) or jid:match(match_jid) then
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   687
			count = count + 1;
6174
513ea94761b2 mod_admin_telnet: Add c2s:show_tls(), behaves like s2s:show_tls()
Kim Alvefur <zash@zash.se>
parents: 6173
diff changeset
   688
			print(annotate(session, { "  ", jid }));
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   689
		end
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   690
	end);
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   691
	return true, "Total: "..count.." clients";
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   692
end
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   693
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   694
function def_env.c2s:show_insecure(match_jid)
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   695
	local print, count = self.session.print, 0;
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   696
	show_c2s(function (jid, session)
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   697
		if ((not match_jid) or jid:match(match_jid)) and not session.secure then
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   698
			count = count + 1;
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   699
			print(jid);
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   700
		end
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   701
	end);
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   702
	return true, "Total: "..count.." insecure client connections";
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   703
end
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   704
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   705
function def_env.c2s:show_secure(match_jid)
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   706
	local print, count = self.session.print, 0;
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   707
	show_c2s(function (jid, session)
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   708
		if ((not match_jid) or jid:match(match_jid)) and session.secure then
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   709
			count = count + 1;
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   710
			print(jid);
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   711
		end
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   712
	end);
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   713
	return true, "Total: "..count.." secure client connections";
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   714
end
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   715
6174
513ea94761b2 mod_admin_telnet: Add c2s:show_tls(), behaves like s2s:show_tls()
Kim Alvefur <zash@zash.se>
parents: 6173
diff changeset
   716
function def_env.c2s:show_tls(match_jid)
513ea94761b2 mod_admin_telnet: Add c2s:show_tls(), behaves like s2s:show_tls()
Kim Alvefur <zash@zash.se>
parents: 6173
diff changeset
   717
	return self:show(match_jid, tls_info);
513ea94761b2 mod_admin_telnet: Add c2s:show_tls(), behaves like s2s:show_tls()
Kim Alvefur <zash@zash.se>
parents: 6173
diff changeset
   718
end
513ea94761b2 mod_admin_telnet: Add c2s:show_tls(), behaves like s2s:show_tls()
Kim Alvefur <zash@zash.se>
parents: 6173
diff changeset
   719
10098
6b1e89868328 mod_admin_telnet: Allow specifying a reason when closing sessions (#1400)
Kim Alvefur <zash@zash.se>
parents: 10091
diff changeset
   720
local function build_reason(text, condition)
6b1e89868328 mod_admin_telnet: Allow specifying a reason when closing sessions (#1400)
Kim Alvefur <zash@zash.se>
parents: 10091
diff changeset
   721
	if text or condition then
6b1e89868328 mod_admin_telnet: Allow specifying a reason when closing sessions (#1400)
Kim Alvefur <zash@zash.se>
parents: 10091
diff changeset
   722
		return {
6b1e89868328 mod_admin_telnet: Allow specifying a reason when closing sessions (#1400)
Kim Alvefur <zash@zash.se>
parents: 10091
diff changeset
   723
			text = text,
6b1e89868328 mod_admin_telnet: Allow specifying a reason when closing sessions (#1400)
Kim Alvefur <zash@zash.se>
parents: 10091
diff changeset
   724
			condition = condition or "undefined-condition",
6b1e89868328 mod_admin_telnet: Allow specifying a reason when closing sessions (#1400)
Kim Alvefur <zash@zash.se>
parents: 10091
diff changeset
   725
		};
6b1e89868328 mod_admin_telnet: Allow specifying a reason when closing sessions (#1400)
Kim Alvefur <zash@zash.se>
parents: 10091
diff changeset
   726
	end
6b1e89868328 mod_admin_telnet: Allow specifying a reason when closing sessions (#1400)
Kim Alvefur <zash@zash.se>
parents: 10091
diff changeset
   727
end
6b1e89868328 mod_admin_telnet: Allow specifying a reason when closing sessions (#1400)
Kim Alvefur <zash@zash.se>
parents: 10091
diff changeset
   728
6b1e89868328 mod_admin_telnet: Allow specifying a reason when closing sessions (#1400)
Kim Alvefur <zash@zash.se>
parents: 10091
diff changeset
   729
function def_env.c2s:close(match_jid, text, condition)
5028
10a69a7e4545 mod_admin_telnet: Remove unused variable
Matthew Wild <mwild1@gmail.com>
parents: 5027
diff changeset
   730
	local count = 0;
1491
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   731
	show_c2s(function (jid, session)
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   732
		if jid == match_jid or jid_bare(jid) == match_jid then
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   733
			count = count + 1;
10098
6b1e89868328 mod_admin_telnet: Allow specifying a reason when closing sessions (#1400)
Kim Alvefur <zash@zash.se>
parents: 10091
diff changeset
   734
			session:close(build_reason(text, condition));
1491
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   735
		end
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   736
	end);
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   737
	return true, "Total: "..count.." sessions closed";
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   738
end
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   739
10098
6b1e89868328 mod_admin_telnet: Allow specifying a reason when closing sessions (#1400)
Kim Alvefur <zash@zash.se>
parents: 10091
diff changeset
   740
function def_env.c2s:closeall(text, condition)
9978
c30933aa0242 mod_admin_telnet: Adds c2s:closeall() (Fixes #1315)
João Duarte <jvsDuarte08@gmail.com>
parents: 9872
diff changeset
   741
	local count = 0;
c30933aa0242 mod_admin_telnet: Adds c2s:closeall() (Fixes #1315)
João Duarte <jvsDuarte08@gmail.com>
parents: 9872
diff changeset
   742
	--luacheck: ignore 212/jid
c30933aa0242 mod_admin_telnet: Adds c2s:closeall() (Fixes #1315)
João Duarte <jvsDuarte08@gmail.com>
parents: 9872
diff changeset
   743
	show_c2s(function (jid, session)
c30933aa0242 mod_admin_telnet: Adds c2s:closeall() (Fixes #1315)
João Duarte <jvsDuarte08@gmail.com>
parents: 9872
diff changeset
   744
		count = count + 1;
10098
6b1e89868328 mod_admin_telnet: Allow specifying a reason when closing sessions (#1400)
Kim Alvefur <zash@zash.se>
parents: 10091
diff changeset
   745
		session:close(build_reason(text, condition));
9978
c30933aa0242 mod_admin_telnet: Adds c2s:closeall() (Fixes #1315)
João Duarte <jvsDuarte08@gmail.com>
parents: 9872
diff changeset
   746
	end);
c30933aa0242 mod_admin_telnet: Adds c2s:closeall() (Fixes #1315)
João Duarte <jvsDuarte08@gmail.com>
parents: 9872
diff changeset
   747
	return true, "Total: "..count.." sessions closed";
c30933aa0242 mod_admin_telnet: Adds c2s:closeall() (Fixes #1315)
João Duarte <jvsDuarte08@gmail.com>
parents: 9872
diff changeset
   748
end
c30933aa0242 mod_admin_telnet: Adds c2s:closeall() (Fixes #1315)
João Duarte <jvsDuarte08@gmail.com>
parents: 9872
diff changeset
   749
4514
ae48e0abc233 mod_admin_telnet: Commond and flexible way to show stream properties.
Kim Alvefur <zash@zash.se>
parents: 4328
diff changeset
   750
1085
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   751
def_env.s2s = {};
6172
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   752
function def_env.s2s:show(match_jid, annotate)
1085
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   753
	local print = self.session.print;
6172
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   754
	annotate = annotate or session_flags;
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   755
1322
33d103b0283f mod_console: Show total incoming/outgoing s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1317
diff changeset
   756
	local count_in, count_out = 0,0;
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   757
	local s2s_list = { };
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   758
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   759
	local s2s_sessions = module:shared"/*/s2s/sessions";
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   760
	for _, session in pairs(s2s_sessions) do
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   761
		local remotehost, localhost, direction;
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   762
		if session.direction == "outgoing" then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   763
			direction = "->";
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   764
			count_out = count_out + 1;
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   765
			remotehost, localhost = session.to_host or "?", session.from_host or "?";
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   766
		else
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   767
			direction = "<-";
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   768
			count_in = count_in + 1;
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   769
			remotehost, localhost = session.from_host or "?", session.to_host or "?";
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   770
		end
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   771
		local sess_lines = { l = localhost, r = remotehost,
6173
1600438c0c14 mod_admin_telnet: Move generation of log tag for s2s:show() (adds it to c2s:show() too)
Kim Alvefur <zash@zash.se>
parents: 6172
diff changeset
   772
			annotate(session, { "", direction, remotehost or "?" })};
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   773
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   774
		if (not match_jid) or remotehost:match(match_jid) or localhost:match(match_jid) then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   775
			table.insert(s2s_list, sess_lines);
9407
f40b0cd41a87 mod_admin_telnet: Remove or rename various unused arguments and variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9406
diff changeset
   776
			-- luacheck: ignore 421/print
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   777
			local print = function (s) table.insert(sess_lines, "        "..s); end
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   778
			if session.sendq then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   779
				print("There are "..#session.sendq.." queued outgoing stanzas for this connection");
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   780
			end
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   781
			if session.type == "s2sout_unauthed" then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   782
				if session.connecting then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   783
					print("Connection not yet established");
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   784
					if not session.srv_hosts then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   785
						if not session.conn then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   786
							print("We do not yet have a DNS answer for this host's SRV records");
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   787
						else
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   788
							print("This host has no SRV records, using A record instead");
1085
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   789
						end
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   790
					elseif session.srv_choice then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   791
						print("We are on SRV record "..session.srv_choice.." of "..#session.srv_hosts);
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   792
						local srv_choice = session.srv_hosts[session.srv_choice];
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   793
						print("Using "..(srv_choice.target or ".")..":"..(srv_choice.port or 5269));
1085
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   794
					end
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   795
				elseif session.notopen then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   796
					print("The <stream> has not yet been opened");
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   797
				elseif not session.dialback_key then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   798
					print("Dialback has not been initiated yet");
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   799
				elseif session.dialback_key then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   800
					print("Dialback has been requested, but no result received");
1085
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   801
				end
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   802
			end
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   803
			if session.type == "s2sin_unauthed" then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   804
				print("Connection not yet authenticated");
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   805
			elseif session.type == "s2sin" then
1085
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   806
				for name in pairs(session.hosts) do
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   807
					if name ~= session.from_host then
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   808
						print("also hosts "..tostring(name));
1085
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   809
					end
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   810
				end
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   811
			end
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   812
		end
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   813
	end
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   814
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   815
	-- Sort by local host, then remote host
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   816
	table.sort(s2s_list, function(a,b)
10514
fe0884ddb4f8 mod_admin_telnet: Use common sort function in s2s:show
Kim Alvefur <zash@zash.se>
parents: 10513
diff changeset
   817
		if a.l == b.l then return _sort_hosts(a.r, b.r); end
fe0884ddb4f8 mod_admin_telnet: Use common sort function in s2s:show
Kim Alvefur <zash@zash.se>
parents: 10513
diff changeset
   818
		return _sort_hosts(a.l, b.l);
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   819
	end);
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   820
	local lasthost;
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   821
	for _, sess_lines in ipairs(s2s_list) do
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   822
		if sess_lines.l ~= lasthost then print(sess_lines.l); lasthost=sess_lines.l end
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   823
		for _, line in ipairs(sess_lines) do print(line); end
1085
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   824
	end
1322
33d103b0283f mod_console: Show total incoming/outgoing s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1317
diff changeset
   825
	return true, "Total: "..count_out.." outgoing, "..count_in.." incoming connections";
1085
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   826
end
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   827
6172
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   828
function def_env.s2s:show_tls(match_jid)
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   829
	return self:show(match_jid, tls_info);
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   830
end
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   831
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   832
local function print_subject(print, subject)
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   833
	for _, entry in ipairs(subject) do
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   834
		print(
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   835
			("    %s: %q"):format(
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   836
				entry.name or entry.oid,
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   837
				entry.value:gsub("[\r\n%z%c]", " ")
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   838
			)
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   839
		);
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   840
	end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   841
end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   842
4328
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   843
-- As much as it pains me to use the 0-based depths that OpenSSL does,
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   844
-- I think there's going to be more confusion among operators if we
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   845
-- break from that.
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   846
local function print_errors(print, errors)
5769
f6ea5b3739c9 mod_admin_telnet, mod_s2s: Fix reporting of certificate chain validation details
Kim Alvefur <zash@zash.se>
parents: 5672
diff changeset
   847
	for depth, t in pairs(errors) do
4328
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   848
		print(
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   849
			("    %d: %s"):format(
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   850
				depth-1,
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   851
				table.concat(t, "\n|        ")
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   852
			)
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   853
		);
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   854
	end
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   855
end
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   856
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   857
function def_env.s2s:showcert(domain)
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   858
	local print = self.session.print;
5706
896094da72e4 mod_admin_telnet: Refactor s2s:showcert()
Kim Alvefur <zash@zash.se>
parents: 5674
diff changeset
   859
	local s2s_sessions = module:shared"/*/s2s/sessions";
896094da72e4 mod_admin_telnet: Refactor s2s:showcert()
Kim Alvefur <zash@zash.se>
parents: 5674
diff changeset
   860
	local domain_sessions = set.new(array.collect(values(s2s_sessions)))
896094da72e4 mod_admin_telnet: Refactor s2s:showcert()
Kim Alvefur <zash@zash.se>
parents: 5674
diff changeset
   861
		/function(session) return (session.to_host == domain or session.from_host == domain) and session or nil; end;
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   862
	local cert_set = {};
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   863
	for session in domain_sessions do
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   864
		local conn = session.conn;
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   865
		conn = conn and conn:socket();
4328
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   866
		if not conn.getpeerchain then
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   867
			if conn.dohandshake then
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   868
				error("This version of LuaSec does not support certificate viewing");
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   869
			end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   870
		else
5596
73fea1a87afd mod_admin_telnet: Don't rely on getpeerchain returning an empty list
Kim Alvefur <zash@zash.se>
parents: 5567
diff changeset
   871
			local cert = conn:getpeercertificate();
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   872
			if cert then
5596
73fea1a87afd mod_admin_telnet: Don't rely on getpeerchain returning an empty list
Kim Alvefur <zash@zash.se>
parents: 5567
diff changeset
   873
				local certs = conn:getpeerchain();
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   874
				local digest = cert:digest("sha1");
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   875
				if not cert_set[digest] then
4328
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   876
					local chain_valid, chain_errors = conn:getpeerverification();
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   877
					cert_set[digest] = {
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   878
						{
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   879
						  from = session.from_host,
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   880
						  to = session.to_host,
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   881
						  direction = session.direction
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   882
						};
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   883
						chain_valid = chain_valid;
4328
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   884
						chain_errors = chain_errors;
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   885
						certs = certs;
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   886
					};
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   887
				else
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   888
					table.insert(cert_set[digest], {
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   889
						from = session.from_host,
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   890
						to = session.to_host,
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   891
						direction = session.direction
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   892
					});
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   893
				end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   894
			end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   895
		end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   896
	end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   897
	local domain_certs = array.collect(values(cert_set));
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   898
	-- Phew. We now have a array of unique certificates presented by domain.
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   899
	local n_certs = #domain_certs;
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   900
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   901
	if n_certs == 0 then
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   902
		return "No certificates found for "..domain;
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   903
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   904
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   905
	local function _capitalize_and_colon(byte)
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   906
		return string.upper(byte)..":";
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   907
	end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   908
	local function pretty_fingerprint(hash)
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   909
		return hash:gsub("..", _capitalize_and_colon):sub(1, -2);
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   910
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   911
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   912
	for cert_info in values(domain_certs) do
4328
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   913
		local certs = cert_info.certs;
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   914
		local cert = certs[1];
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   915
		print("---")
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   916
		print("Fingerprint (SHA1): "..pretty_fingerprint(cert:digest("sha1")));
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   917
		print("");
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   918
		local n_streams = #cert_info;
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   919
		print("Currently used on "..n_streams.." stream"..(n_streams==1 and "" or "s")..":");
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   920
		for _, stream in ipairs(cert_info) do
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   921
			if stream.direction == "incoming" then
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   922
				print("    "..stream.to.." <- "..stream.from);
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   923
			else
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   924
				print("    "..stream.from.." -> "..stream.to);
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   925
			end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   926
		end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   927
		print("");
4328
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   928
		local chain_valid, errors = cert_info.chain_valid, cert_info.chain_errors;
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   929
		local valid_identity = cert_verify_identity(domain, "xmpp-server", cert);
4328
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   930
		if chain_valid then
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   931
			print("Trusted certificate: Yes");
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   932
		else
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   933
			print("Trusted certificate: No");
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   934
			print_errors(print, errors);
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   935
		end
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   936
		print("");
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   937
		print("Issuer: ");
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   938
		print_subject(print, cert:issuer());
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   939
		print("");
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   940
		print("Valid for "..domain..": "..(valid_identity and "Yes" or "No"));
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   941
		print("Subject:");
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   942
		print_subject(print, cert:subject());
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   943
	end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   944
	print("---");
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   945
	return ("Showing "..n_certs.." certificate"
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   946
		..(n_certs==1 and "" or "s")
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   947
		.." presented by "..domain..".");
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   948
end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   949
10098
6b1e89868328 mod_admin_telnet: Allow specifying a reason when closing sessions (#1400)
Kim Alvefur <zash@zash.se>
parents: 10091
diff changeset
   950
function def_env.s2s:close(from, to, text, condition)
1340
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   951
	local print, count = self.session.print, 0;
5708
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   952
	local s2s_sessions = module:shared"/*/s2s/sessions";
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   953
5708
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   954
	local match_id;
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   955
	if from and not to then
9407
f40b0cd41a87 mod_admin_telnet: Remove or rename various unused arguments and variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9406
diff changeset
   956
		match_id, from = from, nil;
5708
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   957
	elseif not to then
1340
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   958
		return false, "Syntax: s2s:close('from', 'to') - Closes all s2s sessions from 'from' to 'to'";
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   959
	elseif from == to then
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   960
		return false, "Both from and to are the same... you can't do that :)";
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   961
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   962
5708
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   963
	for _, session in pairs(s2s_sessions) do
10099
a3c66d0294e1 mod_admin_telnet: Use already generated session id
Kim Alvefur <zash@zash.se>
parents: 10098
diff changeset
   964
		local id = session.id or (session.type..tostring(session):match("[a-f0-9]+$"));
5708
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   965
		if (match_id and match_id == id)
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   966
		or (session.from_host == from and session.to_host == to) then
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   967
			print(("Closing connection from %s to %s [%s]"):format(session.from_host, session.to_host, id));
10098
6b1e89868328 mod_admin_telnet: Allow specifying a reason when closing sessions (#1400)
Kim Alvefur <zash@zash.se>
parents: 10091
diff changeset
   968
			(session.close or s2smanager.destroy_session)(session, build_reason(text, condition));
5708
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   969
			count = count + 1 ;
1340
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   970
		end
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   971
	end
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   972
	return true, "Closed "..count.." s2s session"..((count == 1 and "") or "s");
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   973
end
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   974
10098
6b1e89868328 mod_admin_telnet: Allow specifying a reason when closing sessions (#1400)
Kim Alvefur <zash@zash.se>
parents: 10091
diff changeset
   975
function def_env.s2s:closeall(host, text, condition)
6841
229e95aecf41 mod_admin_telnet: Fix indentation
Kim Alvefur <zash@zash.se>
parents: 6784
diff changeset
   976
	local count = 0;
5708
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   977
	local s2s_sessions = module:shared"/*/s2s/sessions";
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   978
	for _,session in pairs(s2s_sessions) do
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   979
		if not host or session.from_host == host or session.to_host == host then
10098
6b1e89868328 mod_admin_telnet: Allow specifying a reason when closing sessions (#1400)
Kim Alvefur <zash@zash.se>
parents: 10091
diff changeset
   980
			session:close(build_reason(text, condition));
6841
229e95aecf41 mod_admin_telnet: Fix indentation
Kim Alvefur <zash@zash.se>
parents: 6784
diff changeset
   981
			count = count + 1;
4978
0b9e86302de4 mod_admin_telnet: add s2s:closeall command and relative help entry.
Marco Cirillo <maranda@lightwitch.org>
parents: 4913
diff changeset
   982
		end
6841
229e95aecf41 mod_admin_telnet: Fix indentation
Kim Alvefur <zash@zash.se>
parents: 6784
diff changeset
   983
	end
4978
0b9e86302de4 mod_admin_telnet: add s2s:closeall command and relative help entry.
Marco Cirillo <maranda@lightwitch.org>
parents: 4913
diff changeset
   984
	if count == 0 then return false, "No sessions to close.";
0b9e86302de4 mod_admin_telnet: add s2s:closeall command and relative help entry.
Marco Cirillo <maranda@lightwitch.org>
parents: 4913
diff changeset
   985
	else return true, "Closed "..count.." s2s session"..((count == 1 and "") or "s"); end
0b9e86302de4 mod_admin_telnet: add s2s:closeall command and relative help entry.
Marco Cirillo <maranda@lightwitch.org>
parents: 4913
diff changeset
   986
end
0b9e86302de4 mod_admin_telnet: add s2s:closeall command and relative help entry.
Marco Cirillo <maranda@lightwitch.org>
parents: 4913
diff changeset
   987
1977
325a49f8edab mod_console: Add commands host:activate(host, config) and host:deactivate(host, reason) to add/remove hosts at runtime
Matthew Wild <mwild1@gmail.com>
parents: 1927
diff changeset
   988
def_env.host = {}; def_env.hosts = def_env.host;
3840
abcbce5e4240 mod_console: Removed redundant code for host:activate() and host:deactivate(), now that hostmanager has error checking.
Waqas Hussain <waqas20@gmail.com>
parents: 3614
diff changeset
   989
1977
325a49f8edab mod_console: Add commands host:activate(host, config) and host:deactivate(host, reason) to add/remove hosts at runtime
Matthew Wild <mwild1@gmail.com>
parents: 1927
diff changeset
   990
function def_env.host:activate(hostname, config)
3840
abcbce5e4240 mod_console: Removed redundant code for host:activate() and host:deactivate(), now that hostmanager has error checking.
Waqas Hussain <waqas20@gmail.com>
parents: 3614
diff changeset
   991
	return hostmanager.activate(hostname, config);
1977
325a49f8edab mod_console: Add commands host:activate(host, config) and host:deactivate(host, reason) to add/remove hosts at runtime
Matthew Wild <mwild1@gmail.com>
parents: 1927
diff changeset
   992
end
325a49f8edab mod_console: Add commands host:activate(host, config) and host:deactivate(host, reason) to add/remove hosts at runtime
Matthew Wild <mwild1@gmail.com>
parents: 1927
diff changeset
   993
function def_env.host:deactivate(hostname, reason)
3840
abcbce5e4240 mod_console: Removed redundant code for host:activate() and host:deactivate(), now that hostmanager has error checking.
Waqas Hussain <waqas20@gmail.com>
parents: 3614
diff changeset
   994
	return hostmanager.deactivate(hostname, reason);
1977
325a49f8edab mod_console: Add commands host:activate(host, config) and host:deactivate(host, reason) to add/remove hosts at runtime
Matthew Wild <mwild1@gmail.com>
parents: 1927
diff changeset
   995
end
325a49f8edab mod_console: Add commands host:activate(host, config) and host:deactivate(host, reason) to add/remove hosts at runtime
Matthew Wild <mwild1@gmail.com>
parents: 1927
diff changeset
   996
2007
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
   997
function def_env.host:list()
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
   998
	local print = self.session.print;
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
   999
	local i = 0;
6175
50ddaec11f2a mod_admin_telnet: Show which hosts are components and what type of component in host:list()
Kim Alvefur <zash@zash.se>
parents: 6174
diff changeset
  1000
	local type;
10510
af214e2739f5 mod_admin_telnet: Merge hostname comparison functions
Kim Alvefur <zash@zash.se>
parents: 10509
diff changeset
  1001
	for host, host_session in iterators.sorted_pairs(prosody.hosts, _sort_hosts) do
2007
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
  1002
		i = i + 1;
9333
36badabc85ce mod_admin_telnet: Make use of util.iterators.sorted_pairs()
Matthew Wild <mwild1@gmail.com>
parents: 9012
diff changeset
  1003
		type = host_session.type;
6175
50ddaec11f2a mod_admin_telnet: Show which hosts are components and what type of component in host:list()
Kim Alvefur <zash@zash.se>
parents: 6174
diff changeset
  1004
		if type == "local" then
50ddaec11f2a mod_admin_telnet: Show which hosts are components and what type of component in host:list()
Kim Alvefur <zash@zash.se>
parents: 6174
diff changeset
  1005
			print(host);
50ddaec11f2a mod_admin_telnet: Show which hosts are components and what type of component in host:list()
Kim Alvefur <zash@zash.se>
parents: 6174
diff changeset
  1006
		else
50ddaec11f2a mod_admin_telnet: Show which hosts are components and what type of component in host:list()
Kim Alvefur <zash@zash.se>
parents: 6174
diff changeset
  1007
			type = module:context(host):get_option_string("component_module", type);
50ddaec11f2a mod_admin_telnet: Show which hosts are components and what type of component in host:list()
Kim Alvefur <zash@zash.se>
parents: 6174
diff changeset
  1008
			if type ~= "component" then
50ddaec11f2a mod_admin_telnet: Show which hosts are components and what type of component in host:list()
Kim Alvefur <zash@zash.se>
parents: 6174
diff changeset
  1009
				type = type .. " component";
50ddaec11f2a mod_admin_telnet: Show which hosts are components and what type of component in host:list()
Kim Alvefur <zash@zash.se>
parents: 6174
diff changeset
  1010
			end
50ddaec11f2a mod_admin_telnet: Show which hosts are components and what type of component in host:list()
Kim Alvefur <zash@zash.se>
parents: 6174
diff changeset
  1011
			print(("%s (%s)"):format(host, type));
50ddaec11f2a mod_admin_telnet: Show which hosts are components and what type of component in host:list()
Kim Alvefur <zash@zash.se>
parents: 6174
diff changeset
  1012
		end
2007
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
  1013
	end
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
  1014
	return true, i.." hosts";
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
  1015
end
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
  1016
4674
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1017
def_env.port = {};
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1018
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1019
function def_env.port:list()
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1020
	local print = self.session.print;
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1021
	local services = portmanager.get_active_services().data;
9333
36badabc85ce mod_admin_telnet: Make use of util.iterators.sorted_pairs()
Matthew Wild <mwild1@gmail.com>
parents: 9012
diff changeset
  1022
	local n_services, n_ports = 0, 0;
9394
4001eb3f465a mod_admin_telnet: Fix local reference to util.iterator
Kim Alvefur <zash@zash.se>
parents: 9335
diff changeset
  1023
	for service, interfaces in iterators.sorted_pairs(services) do
9333
36badabc85ce mod_admin_telnet: Make use of util.iterators.sorted_pairs()
Matthew Wild <mwild1@gmail.com>
parents: 9012
diff changeset
  1024
		n_services = n_services + 1;
4674
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1025
		local ports_list = {};
9333
36badabc85ce mod_admin_telnet: Make use of util.iterators.sorted_pairs()
Matthew Wild <mwild1@gmail.com>
parents: 9012
diff changeset
  1026
		for interface, ports in pairs(interfaces) do
4674
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1027
			for port in pairs(ports) do
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1028
				table.insert(ports_list, "["..interface.."]:"..port);
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1029
			end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1030
		end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1031
		n_ports = n_ports + #ports_list;
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1032
		print(service..": "..table.concat(ports_list, ", "));
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1033
	end
9333
36badabc85ce mod_admin_telnet: Make use of util.iterators.sorted_pairs()
Matthew Wild <mwild1@gmail.com>
parents: 9012
diff changeset
  1034
	return true, n_services.." services listening on "..n_ports.." ports";
4674
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1035
end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1036
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1037
function def_env.port:close(close_port, close_interface)
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1038
	close_port = assert(tonumber(close_port), "Invalid port number");
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1039
	local n_closed = 0;
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1040
	local services = portmanager.get_active_services().data;
9407
f40b0cd41a87 mod_admin_telnet: Remove or rename various unused arguments and variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9406
diff changeset
  1041
	for service, interfaces in pairs(services) do -- luacheck: ignore 213
4674
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1042
		for interface, ports in pairs(interfaces) do
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1043
			if not close_interface or close_interface == interface then
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1044
				if ports[close_port] then
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1045
					self.session.print("Closing ["..interface.."]:"..close_port.."...");
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1046
					local ok, err = portmanager.close(interface, close_port)
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1047
					if not ok then
5029
7bcd79631492 mod_admin_telnet: Fix usage of incorrect variable
Matthew Wild <mwild1@gmail.com>
parents: 5028
diff changeset
  1048
						self.session.print("Failed to close "..interface.." "..close_port..": "..err);
4674
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1049
					else
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1050
						n_closed = n_closed + 1;
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1051
					end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1052
				end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1053
			end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1054
		end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1055
	end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1056
	return true, "Closed "..n_closed.." ports";
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1057
end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1058
4807
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
  1059
def_env.muc = {};
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
  1060
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
  1061
local console_room_mt = {
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
  1062
	__index = function (self, k) return self.room[k]; end;
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
  1063
	__tostring = function (self)
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
  1064
		return "MUC room <"..self.room.jid..">";
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
  1065
	end;
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
  1066
};
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
  1067
5520
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
  1068
local function check_muc(jid)
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
  1069
	local room_name, host = jid_split(jid);
9408
86e3e37f25ff mod_admin_telnet: Use prosody.hosts to be more explicit and avoid name clash with 'hosts' arguments [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9407
diff changeset
  1070
	if not prosody.hosts[host] then
4807
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
  1071
		return nil, "No such host: "..host;
9408
86e3e37f25ff mod_admin_telnet: Use prosody.hosts to be more explicit and avoid name clash with 'hosts' arguments [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9407
diff changeset
  1072
	elseif not prosody.hosts[host].modules.muc then
4807
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
  1073
		return nil, "Host '"..host.."' is not a MUC service";
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
  1074
	end
5520
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
  1075
	return room_name, host;
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
  1076
end
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
  1077
8879
9e72e63819dc console: Allow passing a config when creating a room
Kim Alvefur <zash@zash.se>
parents: 8594
diff changeset
  1078
function def_env.muc:create(room_jid, config)
7474
3631d259bb85 mod_admin_telnet: rename variable to make it defined (room -> room_name)
Anton Shestakov <av6@dwimlabs.net>
parents: 7093
diff changeset
  1079
	local room_name, host = check_muc(room_jid);
6064
c4a3222165c4 mod_admin_telnet: muc:*: Fix nil index error when a room JID is passed with a non-existent host
Matthew Wild <mwild1@gmail.com>
parents: 6016
diff changeset
  1080
	if not room_name then
c4a3222165c4 mod_admin_telnet: muc:*: Fix nil index error when a room JID is passed with a non-existent host
Matthew Wild <mwild1@gmail.com>
parents: 6016
diff changeset
  1081
		return room_name, host;
c4a3222165c4 mod_admin_telnet: muc:*: Fix nil index error when a room JID is passed with a non-existent host
Matthew Wild <mwild1@gmail.com>
parents: 6016
diff changeset
  1082
	end
7474
3631d259bb85 mod_admin_telnet: rename variable to make it defined (room -> room_name)
Anton Shestakov <av6@dwimlabs.net>
parents: 7093
diff changeset
  1083
	if not room_name then return nil, host end
8879
9e72e63819dc console: Allow passing a config when creating a room
Kim Alvefur <zash@zash.se>
parents: 8594
diff changeset
  1084
	if config ~= nil and type(config) ~= "table" then return nil, "Config must be a table"; end
9408
86e3e37f25ff mod_admin_telnet: Use prosody.hosts to be more explicit and avoid name clash with 'hosts' arguments [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9407
diff changeset
  1085
	if prosody.hosts[host].modules.muc.get_room_from_jid(room_jid) then return nil, "Room exists already" end
86e3e37f25ff mod_admin_telnet: Use prosody.hosts to be more explicit and avoid name clash with 'hosts' arguments [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9407
diff changeset
  1086
	return prosody.hosts[host].modules.muc.create_room(room_jid, config);
5520
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
  1087
end
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
  1088
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
  1089
function def_env.muc:room(room_jid)
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
  1090
	local room_name, host = check_muc(room_jid);
6064
c4a3222165c4 mod_admin_telnet: muc:*: Fix nil index error when a room JID is passed with a non-existent host
Matthew Wild <mwild1@gmail.com>
parents: 6016
diff changeset
  1091
	if not room_name then
c4a3222165c4 mod_admin_telnet: muc:*: Fix nil index error when a room JID is passed with a non-existent host
Matthew Wild <mwild1@gmail.com>
parents: 6016
diff changeset
  1092
		return room_name, host;
c4a3222165c4 mod_admin_telnet: muc:*: Fix nil index error when a room JID is passed with a non-existent host
Matthew Wild <mwild1@gmail.com>
parents: 6016
diff changeset
  1093
	end
9408
86e3e37f25ff mod_admin_telnet: Use prosody.hosts to be more explicit and avoid name clash with 'hosts' arguments [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9407
diff changeset
  1094
	local room_obj = prosody.hosts[host].modules.muc.get_room_from_jid(room_jid);
4807
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
  1095
	if not room_obj then
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
  1096
		return nil, "No such room: "..room_jid;
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
  1097
	end
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
  1098
	return setmetatable({ room = room_obj }, console_room_mt);
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
  1099
end
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
  1100
6260
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
  1101
function def_env.muc:list(host)
9408
86e3e37f25ff mod_admin_telnet: Use prosody.hosts to be more explicit and avoid name clash with 'hosts' arguments [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9407
diff changeset
  1102
	local host_session = prosody.hosts[host];
6260
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
  1103
	if not host_session or not host_session.modules.muc then
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
  1104
		return nil, "Please supply the address of a local MUC component";
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
  1105
	end
6536
5da544e97bea mod_admin_telnet: Use the session-specific print function
Kim Alvefur <zash@zash.se>
parents: 6506
diff changeset
  1106
	local print = self.session.print;
6260
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
  1107
	local c = 0;
6270
ee2d5b2a263d mod_admin_telnet: Update muc:room(jid) and muc:list(host) to use the new MUC API
Waqas Hussain <waqas20@gmail.com>
parents: 6260
diff changeset
  1108
	for room in host_session.modules.muc.each_room() do
ee2d5b2a263d mod_admin_telnet: Update muc:room(jid) and muc:list(host) to use the new MUC API
Waqas Hussain <waqas20@gmail.com>
parents: 6260
diff changeset
  1109
		print(room.jid);
6260
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
  1110
		c = c + 1;
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
  1111
	end
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
  1112
	return true, c.." rooms";
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
  1113
end
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
  1114
5006
af7e563cf453 mod_admin_telnet: Add missing import of usermanager
Kim Alvefur <zash@zash.se>
parents: 5005
diff changeset
  1115
local um = require"core.usermanager";
af7e563cf453 mod_admin_telnet: Add missing import of usermanager
Kim Alvefur <zash@zash.se>
parents: 5005
diff changeset
  1116
4973
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1117
def_env.user = {};
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1118
function def_env.user:create(jid, password)
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1119
	local username, host = jid_split(jid);
9408
86e3e37f25ff mod_admin_telnet: Use prosody.hosts to be more explicit and avoid name clash with 'hosts' arguments [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9407
diff changeset
  1120
	if not prosody.hosts[host] then
5598
3bb8aefd8ce0 mod_admin_telnet: Verify that the host exists in user commands (Thanks SkyBlue)
Kim Alvefur <zash@zash.se>
parents: 5596
diff changeset
  1121
		return nil, "No such host: "..host;
3bb8aefd8ce0 mod_admin_telnet: Verify that the host exists in user commands (Thanks SkyBlue)
Kim Alvefur <zash@zash.se>
parents: 5596
diff changeset
  1122
	elseif um.user_exists(username, host) then
5128
834ab74585ec mod_admin_telnet: Fix user:*, correct names, docs, do validation
Kim Alvefur <zash@zash.se>
parents: 5030
diff changeset
  1123
		return nil, "User exists";
834ab74585ec mod_admin_telnet: Fix user:*, correct names, docs, do validation
Kim Alvefur <zash@zash.se>
parents: 5030
diff changeset
  1124
	end
4973
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1125
	local ok, err = um.create_user(username, password, host);
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1126
	if ok then
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1127
		return true, "User created";
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1128
	else
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1129
		return nil, "Could not create user: "..err;
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1130
	end
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1131
end
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1132
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1133
function def_env.user:delete(jid)
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1134
	local username, host = jid_split(jid);
9408
86e3e37f25ff mod_admin_telnet: Use prosody.hosts to be more explicit and avoid name clash with 'hosts' arguments [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9407
diff changeset
  1135
	if not prosody.hosts[host] then
5598
3bb8aefd8ce0 mod_admin_telnet: Verify that the host exists in user commands (Thanks SkyBlue)
Kim Alvefur <zash@zash.se>
parents: 5596
diff changeset
  1136
		return nil, "No such host: "..host;
5643
e612e1887e39 mod_admin_telnet: Fix inverted boolean logic
Kim Alvefur <zash@zash.se>
parents: 5630
diff changeset
  1137
	elseif not um.user_exists(username, host) then
5128
834ab74585ec mod_admin_telnet: Fix user:*, correct names, docs, do validation
Kim Alvefur <zash@zash.se>
parents: 5030
diff changeset
  1138
		return nil, "No such user";
834ab74585ec mod_admin_telnet: Fix user:*, correct names, docs, do validation
Kim Alvefur <zash@zash.se>
parents: 5030
diff changeset
  1139
	end
4973
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1140
	local ok, err = um.delete_user(username, host);
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1141
	if ok then
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1142
		return true, "User deleted";
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1143
	else
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1144
		return nil, "Could not delete user: "..err;
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1145
	end
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1146
end
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1147
5128
834ab74585ec mod_admin_telnet: Fix user:*, correct names, docs, do validation
Kim Alvefur <zash@zash.se>
parents: 5030
diff changeset
  1148
function def_env.user:password(jid, password)
4973
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1149
	local username, host = jid_split(jid);
9408
86e3e37f25ff mod_admin_telnet: Use prosody.hosts to be more explicit and avoid name clash with 'hosts' arguments [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9407
diff changeset
  1150
	if not prosody.hosts[host] then
5598
3bb8aefd8ce0 mod_admin_telnet: Verify that the host exists in user commands (Thanks SkyBlue)
Kim Alvefur <zash@zash.se>
parents: 5596
diff changeset
  1151
		return nil, "No such host: "..host;
5665
da1881e1b35b mod_admin_telnet: Fix another wrong boolean expression
Kim Alvefur <zash@zash.se>
parents: 5643
diff changeset
  1152
	elseif not um.user_exists(username, host) then
5128
834ab74585ec mod_admin_telnet: Fix user:*, correct names, docs, do validation
Kim Alvefur <zash@zash.se>
parents: 5030
diff changeset
  1153
		return nil, "No such user";
834ab74585ec mod_admin_telnet: Fix user:*, correct names, docs, do validation
Kim Alvefur <zash@zash.se>
parents: 5030
diff changeset
  1154
	end
8195
4354f556c5db core.usermanager, various modules: Disconnect other resources on password change (thanks waqas) (fixes #512)
Kim Alvefur <zash@zash.se>
parents: 8129
diff changeset
  1155
	local ok, err = um.set_password(username, password, host, nil);
4973
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1156
	if ok then
5128
834ab74585ec mod_admin_telnet: Fix user:*, correct names, docs, do validation
Kim Alvefur <zash@zash.se>
parents: 5030
diff changeset
  1157
		return true, "User password changed";
4973
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1158
	else
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1159
		return nil, "Could not change password for user: "..err;
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1160
	end
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1161
end
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1162
5168
46fc0eff10b4 mod_admin_telnet: user:list(): Allow filtering the set of users
Kim Alvefur <zash@zash.se>
parents: 5167
diff changeset
  1163
function def_env.user:list(host, pat)
5158
c363e7e77f79 mod_admin_telnet: Add support for listing users
Kim Alvefur <zash@zash.se>
parents: 5133
diff changeset
  1164
	if not host then
c363e7e77f79 mod_admin_telnet: Add support for listing users
Kim Alvefur <zash@zash.se>
parents: 5133
diff changeset
  1165
		return nil, "No host given";
9408
86e3e37f25ff mod_admin_telnet: Use prosody.hosts to be more explicit and avoid name clash with 'hosts' arguments [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9407
diff changeset
  1166
	elseif not prosody.hosts[host] then
5167
ecd9e300ec94 mod_admin_telnet: user:list() check that the given host exists
Kim Alvefur <zash@zash.se>
parents: 5159
diff changeset
  1167
		return nil, "No such host";
5158
c363e7e77f79 mod_admin_telnet: Add support for listing users
Kim Alvefur <zash@zash.se>
parents: 5133
diff changeset
  1168
	end
c363e7e77f79 mod_admin_telnet: Add support for listing users
Kim Alvefur <zash@zash.se>
parents: 5133
diff changeset
  1169
	local print = self.session.print;
5227
97f395938028 mod_admin_telnet: Improve wording when listing users
Kim Alvefur <zash@zash.se>
parents: 5186
diff changeset
  1170
	local total, matches = 0, 0;
5158
c363e7e77f79 mod_admin_telnet: Add support for listing users
Kim Alvefur <zash@zash.se>
parents: 5133
diff changeset
  1171
	for user in um.users(host) do
5168
46fc0eff10b4 mod_admin_telnet: user:list(): Allow filtering the set of users
Kim Alvefur <zash@zash.se>
parents: 5167
diff changeset
  1172
		if not pat or user:match(pat) then
46fc0eff10b4 mod_admin_telnet: user:list(): Allow filtering the set of users
Kim Alvefur <zash@zash.se>
parents: 5167
diff changeset
  1173
			print(user.."@"..host);
5227
97f395938028 mod_admin_telnet: Improve wording when listing users
Kim Alvefur <zash@zash.se>
parents: 5186
diff changeset
  1174
			matches = matches + 1;
5168
46fc0eff10b4 mod_admin_telnet: user:list(): Allow filtering the set of users
Kim Alvefur <zash@zash.se>
parents: 5167
diff changeset
  1175
		end
5227
97f395938028 mod_admin_telnet: Improve wording when listing users
Kim Alvefur <zash@zash.se>
parents: 5186
diff changeset
  1176
		total = total + 1;
5158
c363e7e77f79 mod_admin_telnet: Add support for listing users
Kim Alvefur <zash@zash.se>
parents: 5133
diff changeset
  1177
	end
5227
97f395938028 mod_admin_telnet: Improve wording when listing users
Kim Alvefur <zash@zash.se>
parents: 5186
diff changeset
  1178
	return true, "Showing "..(pat and (matches.." of ") or "all " )..total.." users";
5158
c363e7e77f79 mod_admin_telnet: Add support for listing users
Kim Alvefur <zash@zash.se>
parents: 5133
diff changeset
  1179
end
c363e7e77f79 mod_admin_telnet: Add support for listing users
Kim Alvefur <zash@zash.se>
parents: 5133
diff changeset
  1180
5011
83b4d3727b4f mod_admin_telnet: Add xmpp:ping(from, to), useful for initiating s2s connections
Kim Alvefur <zash@zash.se>
parents: 5007
diff changeset
  1181
def_env.xmpp = {};
83b4d3727b4f mod_admin_telnet: Add xmpp:ping(from, to), useful for initiating s2s connections
Kim Alvefur <zash@zash.se>
parents: 5007
diff changeset
  1182
83b4d3727b4f mod_admin_telnet: Add xmpp:ping(from, to), useful for initiating s2s connections
Kim Alvefur <zash@zash.se>
parents: 5007
diff changeset
  1183
local st = require "util.stanza";
9740
a5ae3f4e1a40 mod_admin_telnet: Make xmpp:ping command wait and report the reply
Kim Alvefur <zash@zash.se>
parents: 9739
diff changeset
  1184
local new_id = require "util.id".medium;
a5ae3f4e1a40 mod_admin_telnet: Make xmpp:ping command wait and report the reply
Kim Alvefur <zash@zash.se>
parents: 9739
diff changeset
  1185
function def_env.xmpp:ping(localhost, remotehost, timeout)
9745
d46c376dfe2c mod_admin_telnet: Validate hostnames in xmpp:ping command
Kim Alvefur <zash@zash.se>
parents: 9740
diff changeset
  1186
	localhost = select(2, jid_split(localhost));
d46c376dfe2c mod_admin_telnet: Validate hostnames in xmpp:ping command
Kim Alvefur <zash@zash.se>
parents: 9740
diff changeset
  1187
	remotehost = select(2, jid_split(remotehost));
d46c376dfe2c mod_admin_telnet: Validate hostnames in xmpp:ping command
Kim Alvefur <zash@zash.se>
parents: 9740
diff changeset
  1188
	if not localhost then
d46c376dfe2c mod_admin_telnet: Validate hostnames in xmpp:ping command
Kim Alvefur <zash@zash.se>
parents: 9740
diff changeset
  1189
		return nil, "Invalid sender hostname";
d46c376dfe2c mod_admin_telnet: Validate hostnames in xmpp:ping command
Kim Alvefur <zash@zash.se>
parents: 9740
diff changeset
  1190
	elseif not prosody.hosts[localhost] then
d46c376dfe2c mod_admin_telnet: Validate hostnames in xmpp:ping command
Kim Alvefur <zash@zash.se>
parents: 9740
diff changeset
  1191
		return nil, "No such local host";
d46c376dfe2c mod_admin_telnet: Validate hostnames in xmpp:ping command
Kim Alvefur <zash@zash.se>
parents: 9740
diff changeset
  1192
	end
d46c376dfe2c mod_admin_telnet: Validate hostnames in xmpp:ping command
Kim Alvefur <zash@zash.se>
parents: 9740
diff changeset
  1193
	if not remotehost then
d46c376dfe2c mod_admin_telnet: Validate hostnames in xmpp:ping command
Kim Alvefur <zash@zash.se>
parents: 9740
diff changeset
  1194
		return nil, "Invalid destination hostname";
d46c376dfe2c mod_admin_telnet: Validate hostnames in xmpp:ping command
Kim Alvefur <zash@zash.se>
parents: 9740
diff changeset
  1195
	elseif prosody.hosts[remotehost] then
d46c376dfe2c mod_admin_telnet: Validate hostnames in xmpp:ping command
Kim Alvefur <zash@zash.se>
parents: 9740
diff changeset
  1196
		return nil, "Both hosts are local";
5011
83b4d3727b4f mod_admin_telnet: Add xmpp:ping(from, to), useful for initiating s2s connections
Kim Alvefur <zash@zash.se>
parents: 5007
diff changeset
  1197
	end
9740
a5ae3f4e1a40 mod_admin_telnet: Make xmpp:ping command wait and report the reply
Kim Alvefur <zash@zash.se>
parents: 9739
diff changeset
  1198
	local iq = st.iq{ from=localhost, to=remotehost, type="get", id=new_id()}
a5ae3f4e1a40 mod_admin_telnet: Make xmpp:ping command wait and report the reply
Kim Alvefur <zash@zash.se>
parents: 9739
diff changeset
  1199
			:tag("ping", {xmlns="urn:xmpp:ping"});
10314
b03065cd033a mod_admin_telnet: xmpp:ping: Log ping time
Kim Alvefur <zash@zash.se>
parents: 10296
diff changeset
  1200
	local time_start = time.now();
10296
8fb546e40756 mod_admin_telnet: Use new compact function for waiting on promises
Kim Alvefur <zash@zash.se>
parents: 10256
diff changeset
  1201
	local ret, err = async.wait(module:context(localhost):send_iq(iq, nil, timeout));
9740
a5ae3f4e1a40 mod_admin_telnet: Make xmpp:ping command wait and report the reply
Kim Alvefur <zash@zash.se>
parents: 9739
diff changeset
  1202
	if ret then
10314
b03065cd033a mod_admin_telnet: xmpp:ping: Log ping time
Kim Alvefur <zash@zash.se>
parents: 10296
diff changeset
  1203
		return true, ("pong from %s in %gs"):format(ret.stanza.attr.from, time.now() - time_start);
5011
83b4d3727b4f mod_admin_telnet: Add xmpp:ping(from, to), useful for initiating s2s connections
Kim Alvefur <zash@zash.se>
parents: 5007
diff changeset
  1204
	else
9740
a5ae3f4e1a40 mod_admin_telnet: Make xmpp:ping command wait and report the reply
Kim Alvefur <zash@zash.se>
parents: 9739
diff changeset
  1205
		return false, tostring(err);
5011
83b4d3727b4f mod_admin_telnet: Add xmpp:ping(from, to), useful for initiating s2s connections
Kim Alvefur <zash@zash.se>
parents: 5007
diff changeset
  1206
	end
83b4d3727b4f mod_admin_telnet: Add xmpp:ping(from, to), useful for initiating s2s connections
Kim Alvefur <zash@zash.se>
parents: 5007
diff changeset
  1207
end
83b4d3727b4f mod_admin_telnet: Add xmpp:ping(from, to), useful for initiating s2s connections
Kim Alvefur <zash@zash.se>
parents: 5007
diff changeset
  1208
5567
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1209
def_env.dns = {};
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1210
local adns = require"net.adns";
10622
232841373711 mod_admin_telnet: Create a DNS resolver per console session (fixes #1492)
Kim Alvefur <zash@zash.se>
parents: 9457
diff changeset
  1211
232841373711 mod_admin_telnet: Create a DNS resolver per console session (fixes #1492)
Kim Alvefur <zash@zash.se>
parents: 9457
diff changeset
  1212
local function get_resolver(session)
232841373711 mod_admin_telnet: Create a DNS resolver per console session (fixes #1492)
Kim Alvefur <zash@zash.se>
parents: 9457
diff changeset
  1213
	local resolver = session.dns_resolver;
232841373711 mod_admin_telnet: Create a DNS resolver per console session (fixes #1492)
Kim Alvefur <zash@zash.se>
parents: 9457
diff changeset
  1214
	if not resolver then
232841373711 mod_admin_telnet: Create a DNS resolver per console session (fixes #1492)
Kim Alvefur <zash@zash.se>
parents: 9457
diff changeset
  1215
		resolver = adns.resolver();
232841373711 mod_admin_telnet: Create a DNS resolver per console session (fixes #1492)
Kim Alvefur <zash@zash.se>
parents: 9457
diff changeset
  1216
		session.dns_resolver = resolver;
232841373711 mod_admin_telnet: Create a DNS resolver per console session (fixes #1492)
Kim Alvefur <zash@zash.se>
parents: 9457
diff changeset
  1217
	end
232841373711 mod_admin_telnet: Create a DNS resolver per console session (fixes #1492)
Kim Alvefur <zash@zash.se>
parents: 9457
diff changeset
  1218
	return resolver;
232841373711 mod_admin_telnet: Create a DNS resolver per console session (fixes #1492)
Kim Alvefur <zash@zash.se>
parents: 9457
diff changeset
  1219
end
5567
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1220
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1221
function def_env.dns:lookup(name, typ, class)
10622
232841373711 mod_admin_telnet: Create a DNS resolver per console session (fixes #1492)
Kim Alvefur <zash@zash.se>
parents: 9457
diff changeset
  1222
	local resolver = get_resolver(self.session);
10624
09d98cd38fe2 mod_admin_telnet: Use promise based DNS resolving
Kim Alvefur <zash@zash.se>
parents: 10623
diff changeset
  1223
	local ret, err = async.wait(resolver:lookup_promise(name, typ, class));
09d98cd38fe2 mod_admin_telnet: Use promise based DNS resolving
Kim Alvefur <zash@zash.se>
parents: 10623
diff changeset
  1224
	if ret then
09d98cd38fe2 mod_admin_telnet: Use promise based DNS resolving
Kim Alvefur <zash@zash.se>
parents: 10623
diff changeset
  1225
		return true, ret;
09d98cd38fe2 mod_admin_telnet: Use promise based DNS resolving
Kim Alvefur <zash@zash.se>
parents: 10623
diff changeset
  1226
	elseif err then
09d98cd38fe2 mod_admin_telnet: Use promise based DNS resolving
Kim Alvefur <zash@zash.se>
parents: 10623
diff changeset
  1227
		return false, err;
5567
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1228
	end
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1229
end
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1230
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1231
function def_env.dns:addnameserver(...)
10622
232841373711 mod_admin_telnet: Create a DNS resolver per console session (fixes #1492)
Kim Alvefur <zash@zash.se>
parents: 9457
diff changeset
  1232
	local resolver = get_resolver(self.session);
232841373711 mod_admin_telnet: Create a DNS resolver per console session (fixes #1492)
Kim Alvefur <zash@zash.se>
parents: 9457
diff changeset
  1233
	resolver._resolver:addnameserver(...)
5567
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1234
	return true
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1235
end
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1236
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1237
function def_env.dns:setnameserver(...)
10622
232841373711 mod_admin_telnet: Create a DNS resolver per console session (fixes #1492)
Kim Alvefur <zash@zash.se>
parents: 9457
diff changeset
  1238
	local resolver = get_resolver(self.session);
232841373711 mod_admin_telnet: Create a DNS resolver per console session (fixes #1492)
Kim Alvefur <zash@zash.se>
parents: 9457
diff changeset
  1239
	resolver._resolver:setnameserver(...)
5567
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1240
	return true
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1241
end
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1242
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1243
function def_env.dns:purge()
10622
232841373711 mod_admin_telnet: Create a DNS resolver per console session (fixes #1492)
Kim Alvefur <zash@zash.se>
parents: 9457
diff changeset
  1244
	local resolver = get_resolver(self.session);
232841373711 mod_admin_telnet: Create a DNS resolver per console session (fixes #1492)
Kim Alvefur <zash@zash.se>
parents: 9457
diff changeset
  1245
	resolver._resolver:purge()
5567
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1246
	return true
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1247
end
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1248
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1249
function def_env.dns:cache()
10622
232841373711 mod_admin_telnet: Create a DNS resolver per console session (fixes #1492)
Kim Alvefur <zash@zash.se>
parents: 9457
diff changeset
  1250
	local resolver = get_resolver(self.session);
232841373711 mod_admin_telnet: Create a DNS resolver per console session (fixes #1492)
Kim Alvefur <zash@zash.se>
parents: 9457
diff changeset
  1251
	return true, "Cache:\n"..tostring(resolver._resolver.cache)
5567
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1252
end
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1253
7032
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1254
def_env.http = {};
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1255
10667
fd651ba2317f mod_admin_telnet: Allow passing list of hosts to http:list()
Kim Alvefur <zash@zash.se>
parents: 10662
diff changeset
  1256
function def_env.http:list(hosts)
7032
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1257
	local print = self.session.print;
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1258
10667
fd651ba2317f mod_admin_telnet: Allow passing list of hosts to http:list()
Kim Alvefur <zash@zash.se>
parents: 10662
diff changeset
  1259
	for host in get_hosts_set(hosts) do
7032
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1260
		local http_apps = modulemanager.get_items("http-provider", host);
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1261
		if #http_apps > 0 then
7980
01d6298de991 plugins/various: Use type-specific config API
Kim Alvefur <zash@zash.se>
parents: 7914
diff changeset
  1262
			local http_host = module:context(host):get_option_string("http_host");
7032
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1263
			print("HTTP endpoints on "..host..(http_host and (" (using "..http_host.."):") or ":"));
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1264
			for _, provider in ipairs(http_apps) do
8592
4e475ef4b569 mod_admin_telnet: Include the default path property in URL calculation (fixes #1099)
Kim Alvefur <zash@zash.se>
parents: 7032
diff changeset
  1265
				local url = module:context(host):http_url(provider.name, provider.default_path);
7032
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1266
				print("", url);
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1267
			end
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1268
			print("");
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1269
		end
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1270
	end
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1271
7980
01d6298de991 plugins/various: Use type-specific config API
Kim Alvefur <zash@zash.se>
parents: 7914
diff changeset
  1272
	local default_host = module:get_option_string("http_default_host");
7032
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1273
	if not default_host then
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1274
		print("HTTP requests to unknown hosts will return 404 Not Found");
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1275
	else
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1276
		print("HTTP requests to unknown hosts will be handled by "..default_host);
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1277
	end
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1278
	return true;
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1279
end
b2d160baa957 mod_admin_telnet: Backport 06696882d972 from 0.10 (this command greatly helps with debugging HTTP issues)
Matthew Wild <mwild1@gmail.com>
parents: 6581
diff changeset
  1280
8924
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1281
def_env.debug = {};
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1282
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1283
function def_env.debug:logevents(host)
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1284
	helpers.log_host_events(host);
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1285
	return true;
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1286
end
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1287
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1288
function def_env.debug:events(host, event)
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1289
	local events_obj;
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1290
	if host and host ~= "*" then
9457
6780049be177 mod_admin_telnet: Allow viewing HTTP event listeners via debug:events('http')
Matthew Wild <mwild1@gmail.com>
parents: 9414
diff changeset
  1291
		if host == "http" then
6780049be177 mod_admin_telnet: Allow viewing HTTP event listeners via debug:events('http')
Matthew Wild <mwild1@gmail.com>
parents: 9414
diff changeset
  1292
			events_obj = require "net.http.server"._events;
6780049be177 mod_admin_telnet: Allow viewing HTTP event listeners via debug:events('http')
Matthew Wild <mwild1@gmail.com>
parents: 9414
diff changeset
  1293
		elseif not prosody.hosts[host] then
8924
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1294
			return false, "Unknown host: "..host;
9457
6780049be177 mod_admin_telnet: Allow viewing HTTP event listeners via debug:events('http')
Matthew Wild <mwild1@gmail.com>
parents: 9414
diff changeset
  1295
		else
6780049be177 mod_admin_telnet: Allow viewing HTTP event listeners via debug:events('http')
Matthew Wild <mwild1@gmail.com>
parents: 9414
diff changeset
  1296
			events_obj = prosody.hosts[host].events;
8924
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1297
		end
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1298
	else
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1299
		events_obj = prosody.events;
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1300
	end
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1301
	return true, helpers.show_events(events_obj, event);
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1302
end
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1303
9407
f40b0cd41a87 mod_admin_telnet: Remove or rename various unused arguments and variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9406
diff changeset
  1304
function def_env.debug:timers()
9012
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1305
	local print = self.session.print;
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1306
	local add_task = require"util.timer".add_task;
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1307
	local h, params = add_task.h, add_task.params;
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1308
	if h then
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1309
		print("-- util.timer");
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1310
		for i, id in ipairs(h.ids) do
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1311
			if not params[id] then
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1312
				print(os.date("%F %T", h.priorities[i]), h.items[id]);
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1313
			elseif not params[id].callback then
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1314
				print(os.date("%F %T", h.priorities[i]), h.items[id], unpack(params[id]));
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1315
			else
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1316
				print(os.date("%F %T", h.priorities[i]), params[id].callback, unpack(params[id]));
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1317
			end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1318
		end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1319
	end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1320
	if server.event_base then
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1321
		local count = 0;
9407
f40b0cd41a87 mod_admin_telnet: Remove or rename various unused arguments and variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9406
diff changeset
  1322
		for _, v in pairs(debug.getregistry()) do
9012
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1323
			if type(v) == "function" and v.callback and v.callback == add_task._on_timer then
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1324
				count = count + 1;
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1325
			end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1326
		end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1327
		print(count .. " libevent callbacks");
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1328
	end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1329
	if h then
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1330
		local next_time = h:peek();
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1331
		if next_time then
10493
fabe50ea39f2 mod_admin_telnet: Avoid using LuaSocket for timestamps
Kim Alvefur <zash@zash.se>
parents: 10474
diff changeset
  1332
			return true, os.date("Next event at %F %T (in %%.6fs)", next_time):format(next_time - time.now());
9012
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1333
		end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1334
	end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1335
	return true;
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1336
end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1337
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1338
-- COMPAT: debug:timers() was timer:info() for some time in trunk
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1339
def_env.timer = { info = def_env.debug.timers };
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1340
7914
e528d848a185 mod_admin_telnet: Print a message to open sessions when shutting down, including the reason
Kim Alvefur <zash@zash.se>
parents: 7725
diff changeset
  1341
module:hook("server-stopping", function(event)
9407
f40b0cd41a87 mod_admin_telnet: Remove or rename various unused arguments and variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9406
diff changeset
  1342
	for _, session in pairs(sessions) do
7914
e528d848a185 mod_admin_telnet: Print a message to open sessions when shutting down, including the reason
Kim Alvefur <zash@zash.se>
parents: 7725
diff changeset
  1343
		session.print("Shutting down: "..(event.reason or "unknown reason"));
e528d848a185 mod_admin_telnet: Print a message to open sessions when shutting down, including the reason
Kim Alvefur <zash@zash.se>
parents: 7725
diff changeset
  1344
	end
e528d848a185 mod_admin_telnet: Print a message to open sessions when shutting down, including the reason
Kim Alvefur <zash@zash.se>
parents: 7725
diff changeset
  1345
end);
e528d848a185 mod_admin_telnet: Print a message to open sessions when shutting down, including the reason
Kim Alvefur <zash@zash.se>
parents: 7725
diff changeset
  1346
8967
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1347
def_env.stats = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1348
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1349
local function format_stat(type, value, ref_value)
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1350
	ref_value = ref_value or value;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1351
	--do return tostring(value) end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1352
	if type == "duration" then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1353
		if ref_value < 0.001 then
9790
00f7af0be849 mod_admin_telnet: sttas:show: Use format option that allows float numbers
Kim Alvefur <zash@zash.se>
parents: 9760
diff changeset
  1354
			return ("%g µs"):format(value*1000000);
8967
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1355
		elseif ref_value < 0.9 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1356
			return ("%0.2f ms"):format(value*1000);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1357
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1358
		return ("%0.2f"):format(value);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1359
	elseif type == "size" then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1360
		if ref_value > 1048576 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1361
			return ("%d MB"):format(value/1048576);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1362
		elseif ref_value > 1024 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1363
			return ("%d KB"):format(value/1024);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1364
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1365
		return ("%d bytes"):format(value);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1366
	elseif type == "rate" then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1367
		if ref_value < 0.9 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1368
			return ("%0.2f/min"):format(value*60);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1369
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1370
		return ("%0.2f/sec"):format(value);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1371
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1372
	return tostring(value);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1373
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1374
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1375
local stats_methods = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1376
function stats_methods:bounds(_lower, _upper)
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1377
	for _, stat_info in ipairs(self) do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1378
		local data = stat_info[4];
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1379
		if data then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1380
			local lower = _lower or data.min;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1381
			local upper = _upper or data.max;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1382
			local new_data = {
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1383
				min = lower;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1384
				max = upper;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1385
				samples = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1386
				sample_count = 0;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1387
				count = data.count;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1388
				units = data.units;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1389
			};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1390
			local sum = 0;
9407
f40b0cd41a87 mod_admin_telnet: Remove or rename various unused arguments and variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9406
diff changeset
  1391
			for _, v in ipairs(data.samples) do
8967
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1392
				if v > upper then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1393
					break;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1394
				elseif v>=lower then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1395
					table.insert(new_data.samples, v);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1396
					sum = sum + v;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1397
				end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1398
			end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1399
			new_data.sample_count = #new_data.samples;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1400
			stat_info[4] = new_data;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1401
			stat_info[3] = sum/new_data.sample_count;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1402
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1403
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1404
	return self;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1405
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1406
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1407
function stats_methods:trim(lower, upper)
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1408
	upper = upper or (100-lower);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1409
	local statistics = require "util.statistics";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1410
	for _, stat_info in ipairs(self) do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1411
		-- Strip outliers
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1412
		local data = stat_info[4];
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1413
		if data then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1414
			local new_data = {
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1415
				min = statistics.get_percentile(data, lower);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1416
				max = statistics.get_percentile(data, upper);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1417
				samples = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1418
				sample_count = 0;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1419
				count = data.count;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1420
				units = data.units;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1421
			};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1422
			local sum = 0;
9407
f40b0cd41a87 mod_admin_telnet: Remove or rename various unused arguments and variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9406
diff changeset
  1423
			for _, v in ipairs(data.samples) do
8967
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1424
				if v > new_data.max then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1425
					break;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1426
				elseif v>=new_data.min then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1427
					table.insert(new_data.samples, v);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1428
					sum = sum + v;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1429
				end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1430
			end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1431
			new_data.sample_count = #new_data.samples;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1432
			stat_info[4] = new_data;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1433
			stat_info[3] = sum/new_data.sample_count;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1434
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1435
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1436
	return self;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1437
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1438
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1439
function stats_methods:max(upper)
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1440
	return self:bounds(nil, upper);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1441
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1442
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1443
function stats_methods:min(lower)
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1444
	return self:bounds(lower, nil);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1445
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1446
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1447
function stats_methods:summary()
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1448
	local statistics = require "util.statistics";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1449
	for _, stat_info in ipairs(self) do
9411
b4a82b726495 mod_admin_telnet: Remove unused variable [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9409
diff changeset
  1450
		local type, value, data = stat_info[2], stat_info[3], stat_info[4];
8967
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1451
		if data and data.samples then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1452
			table.insert(stat_info.output, string.format("Count: %d (%d captured)",
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1453
				data.count,
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1454
				data.sample_count
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1455
			));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1456
			table.insert(stat_info.output, string.format("Min: %s  Mean: %s  Max: %s",
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1457
				format_stat(type, data.min),
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1458
				format_stat(type, value),
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1459
				format_stat(type, data.max)
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1460
			));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1461
			table.insert(stat_info.output, string.format("Q1: %s  Median: %s  Q3: %s",
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1462
				format_stat(type, statistics.get_percentile(data, 25)),
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1463
				format_stat(type, statistics.get_percentile(data, 50)),
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1464
				format_stat(type, statistics.get_percentile(data, 75))
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1465
			));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1466
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1467
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1468
	return self;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1469
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1470
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1471
function stats_methods:cfgraph()
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1472
	for _, stat_info in ipairs(self) do
10548
0bd408d93f9a mod_admin_telnet: Silence luacheck warnings
Kim Alvefur <zash@zash.se>
parents: 10521
diff changeset
  1473
		local name, type, value, data = unpack(stat_info, 1, 4); -- luacheck: ignore 211
8967
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1474
		local function print(s)
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1475
			table.insert(stat_info.output, s);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1476
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1477
9414
62c876e333e4 mod_admin_telnet: Guard against missing table field
Kim Alvefur <zash@zash.se>
parents: 9413
diff changeset
  1478
		if data and data.sample_count and data.sample_count > 0 then
8967
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1479
			local raw_histogram = require "util.statistics".get_histogram(data);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1480
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1481
			local graph_width, graph_height = 50, 10;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1482
			local eighth_chars = "   ▁▂▃▄▅▆▇█";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1483
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1484
			local range = data.max - data.min;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1485
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1486
			if range > 0 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1487
				local x_scaling = #raw_histogram/graph_width;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1488
				local histogram = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1489
				for i = 1, graph_width do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1490
					histogram[i] = math.max(raw_histogram[i*x_scaling-1] or 0, raw_histogram[i*x_scaling] or 0);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1491
				end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1492
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1493
				print("");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1494
				print(("_"):rep(52)..format_stat(type, data.max));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1495
				for row = graph_height, 1, -1 do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1496
					local row_chars = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1497
					local min_eighths, max_eighths = 8, 0;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1498
					for i = 1, #histogram do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1499
						local char_eighths = math.ceil(math.max(math.min((graph_height/(data.max/histogram[i]))-(row-1), 1), 0)*8);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1500
						if char_eighths < min_eighths then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1501
							min_eighths = char_eighths;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1502
						end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1503
						if char_eighths > max_eighths then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1504
							max_eighths = char_eighths;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1505
						end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1506
						if char_eighths == 0 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1507
							row_chars[i] = "-";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1508
						else
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1509
							local char = eighth_chars:sub(char_eighths*3+1, char_eighths*3+3);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1510
							row_chars[i] = char;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1511
						end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1512
					end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1513
					print(table.concat(row_chars).."|-"..format_stat(type, data.max/(graph_height/(row-0.5))));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1514
				end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1515
				print(("\\    "):rep(11));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1516
				local x_labels = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1517
				for i = 1, 11 do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1518
					local s = ("%-4s"):format((i-1)*10);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1519
					if #s > 4 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1520
						s = s:sub(1, 3).."…";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1521
					end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1522
					x_labels[i] = s;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1523
				end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1524
				print(" "..table.concat(x_labels, " "));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1525
				local units = "%";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1526
				local margin = math.floor((graph_width-#units)/2);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1527
				print((" "):rep(margin)..units);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1528
			else
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1529
				print("[range too small to graph]");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1530
			end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1531
			print("");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1532
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1533
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1534
	return self;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1535
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1536
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1537
function stats_methods:histogram()
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1538
	for _, stat_info in ipairs(self) do
10548
0bd408d93f9a mod_admin_telnet: Silence luacheck warnings
Kim Alvefur <zash@zash.se>
parents: 10521
diff changeset
  1539
		local name, type, value, data = unpack(stat_info, 1, 4); -- luacheck: ignore 211
8967
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1540
		local function print(s)
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1541
			table.insert(stat_info.output, s);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1542
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1543
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1544
		if not data then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1545
			print("[no data]");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1546
			return self;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1547
		elseif not data.sample_count then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1548
			print("[not a sampled metric type]");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1549
			return self;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1550
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1551
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1552
		local graph_width, graph_height = 50, 10;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1553
		local eighth_chars = "   ▁▂▃▄▅▆▇█";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1554
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1555
		local range = data.max - data.min;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1556
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1557
		if range > 0 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1558
			local n_buckets = graph_width;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1559
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1560
			local histogram = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1561
			for i = 1, n_buckets do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1562
				histogram[i] = 0;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1563
			end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1564
			local max_bin_samples = 0;
9407
f40b0cd41a87 mod_admin_telnet: Remove or rename various unused arguments and variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9406
diff changeset
  1565
			for _, d in ipairs(data.samples) do
8967
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1566
				local bucket = math.floor(1+(n_buckets-1)/(range/(d-data.min)));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1567
				histogram[bucket] = histogram[bucket] + 1;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1568
				if histogram[bucket] > max_bin_samples then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1569
					max_bin_samples = histogram[bucket];
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1570
				end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1571
			end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1572
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1573
			print("");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1574
			print(("_"):rep(52)..max_bin_samples);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1575
			for row = graph_height, 1, -1 do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1576
				local row_chars = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1577
				local min_eighths, max_eighths = 8, 0;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1578
				for i = 1, #histogram do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1579
					local char_eighths = math.ceil(math.max(math.min((graph_height/(max_bin_samples/histogram[i]))-(row-1), 1), 0)*8);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1580
					if char_eighths < min_eighths then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1581
						min_eighths = char_eighths;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1582
					end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1583
					if char_eighths > max_eighths then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1584
						max_eighths = char_eighths;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1585
					end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1586
					if char_eighths == 0 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1587
						row_chars[i] = "-";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1588
					else
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1589
						local char = eighth_chars:sub(char_eighths*3+1, char_eighths*3+3);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1590
						row_chars[i] = char;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1591
					end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1592
				end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1593
				print(table.concat(row_chars).."|-"..math.ceil((max_bin_samples/graph_height)*(row-0.5)));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1594
			end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1595
			print(("\\    "):rep(11));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1596
			local x_labels = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1597
			for i = 1, 11 do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1598
				local s = ("%-4s"):format(format_stat(type, data.min+range*i/11, data.min):match("^%S+"));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1599
				if #s > 4 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1600
					s = s:sub(1, 3).."…";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1601
				end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1602
				x_labels[i] = s;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1603
			end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1604
			print(" "..table.concat(x_labels, " "));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1605
			local units = format_stat(type, data.min):match("%s+(.+)$") or data.units or "";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1606
			local margin = math.floor((graph_width-#units)/2);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1607
			print((" "):rep(margin)..units);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1608
		else
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1609
			print("[range too small to graph]");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1610
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1611
		print("");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1612
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1613
	return self;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1614
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1615
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1616
local function stats_tostring(stats)
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1617
	local print = stats.session.print;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1618
	for _, stat_info in ipairs(stats) do
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1619
		if #stat_info.output > 0 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1620
			print("\n#"..stat_info[1]);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1621
			print("");
9407
f40b0cd41a87 mod_admin_telnet: Remove or rename various unused arguments and variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9406
diff changeset
  1622
			for _, v in ipairs(stat_info.output) do
8967
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1623
				print(v);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1624
			end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1625
			print("");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1626
		else
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1627
			print(("%-50s %s"):format(stat_info[1], format_stat(stat_info[2], stat_info[3])));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1628
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1629
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1630
	return #stats.." statistics displayed";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1631
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1632
9413
7355b2d0067c mod_admin_telnet: Create metatable only once
Kim Alvefur <zash@zash.se>
parents: 9412
diff changeset
  1633
local stats_mt = {__index = stats_methods, __tostring = stats_tostring }
8967
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1634
local function new_stats_context(self)
9413
7355b2d0067c mod_admin_telnet: Create metatable only once
Kim Alvefur <zash@zash.se>
parents: 9412
diff changeset
  1635
	return setmetatable({ session = self.session, stats = true }, stats_mt);
8967
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1636
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1637
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1638
function def_env.stats:show(filter)
10548
0bd408d93f9a mod_admin_telnet: Silence luacheck warnings
Kim Alvefur <zash@zash.se>
parents: 10521
diff changeset
  1639
	-- luacheck: ignore 211/changed
8967
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1640
	local stats, changed, extra = require "core.statsmanager".get_stats();
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1641
	local available, displayed = 0, 0;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1642
	local displayed_stats = new_stats_context(self);
9760
38f7bde4cfe0 mod_admin_telnet: Sort stats by name
Kim Alvefur <zash@zash.se>
parents: 9759
diff changeset
  1643
	for name, value in iterators.sorted_pairs(stats) do
8967
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1644
		available = available + 1;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1645
		if not filter or name:match(filter) then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1646
			displayed = displayed + 1;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1647
			local type = name:match(":(%a+)$");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1648
			table.insert(displayed_stats, {
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1649
				name, type, value, extra[name];
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1650
				output = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1651
			});
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1652
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1653
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1654
	return displayed_stats;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1655
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1656
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1657
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1658
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1659
-------------
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1660
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1661
function printbanner(session)
7070
4c0ec9bd5168 mod_admin_telnet: Remove compat warning about 'console_banner' as a function
Kim Alvefur <zash@zash.se>
parents: 7034
diff changeset
  1662
	local option = module:get_option_string("console_banner", "full");
4c0ec9bd5168 mod_admin_telnet: Remove compat warning about 'console_banner' as a function
Kim Alvefur <zash@zash.se>
parents: 7034
diff changeset
  1663
	if option == "full" or option == "graphic" then
5026
c86a14414922 mod_admin_telnet: Fix broken indentation
Matthew Wild <mwild1@gmail.com>
parents: 5025
diff changeset
  1664
		session.print [[
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
  1665
                   ____                \   /     _
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
  1666
                    |  _ \ _ __ ___  ___  _-_   __| |_   _
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1667
                    | |_) | '__/ _ \/ __|/ _ \ / _` | | | |
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1668
                    |  __/| | | (_) \__ \ |_| | (_| | |_| |
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1669
                    |_|   |_|  \___/|___/\___/ \__,_|\__, |
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
  1670
                    A study in simplicity            |___/
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1671
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1672
]]
5026
c86a14414922 mod_admin_telnet: Fix broken indentation
Matthew Wild <mwild1@gmail.com>
parents: 5025
diff changeset
  1673
	end
7070
4c0ec9bd5168 mod_admin_telnet: Remove compat warning about 'console_banner' as a function
Kim Alvefur <zash@zash.se>
parents: 7034
diff changeset
  1674
	if option == "short" or option == "full" then
5026
c86a14414922 mod_admin_telnet: Fix broken indentation
Matthew Wild <mwild1@gmail.com>
parents: 5025
diff changeset
  1675
	session.print("Welcome to the Prosody administration console. For a list of commands, type: help");
c86a14414922 mod_admin_telnet: Fix broken indentation
Matthew Wild <mwild1@gmail.com>
parents: 5025
diff changeset
  1676
	session.print("You may find more help on using this console in our online documentation at ");
7362
a5a080c12c96 Update every link to the documentation to use HTTPS
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 7094
diff changeset
  1677
	session.print("https://prosody.im/doc/console\n");
1483
efd19cdda6ca mod_console: Allow customisation/suppression of the banner
Matthew Wild <mwild1@gmail.com>
parents: 1433
diff changeset
  1678
	end
7070
4c0ec9bd5168 mod_admin_telnet: Remove compat warning about 'console_banner' as a function
Kim Alvefur <zash@zash.se>
parents: 7034
diff changeset
  1679
	if option ~= "short" and option ~= "full" and option ~= "graphic" then
4c0ec9bd5168 mod_admin_telnet: Remove compat warning about 'console_banner' as a function
Kim Alvefur <zash@zash.se>
parents: 7034
diff changeset
  1680
		session.print(option);
5026
c86a14414922 mod_admin_telnet: Fix broken indentation
Matthew Wild <mwild1@gmail.com>
parents: 5025
diff changeset
  1681
	end
1483
efd19cdda6ca mod_console: Allow customisation/suppression of the banner
Matthew Wild <mwild1@gmail.com>
parents: 1433
diff changeset
  1682
end
2087
5efd79871205 mod_console: Moved activation of the console port from the main file to mod_console.
Waqas Hussain <waqas20@gmail.com>
parents: 2054
diff changeset
  1683
5120
bcabea740c00 mod_{admin_telnet,c2s,component,http,net_multiplex,s2s}: Use module:provides() instead of module:add_item().
Waqas Hussain <waqas20@gmail.com>
parents: 5030
diff changeset
  1684
module:provides("net", {
4674
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
  1685
	name = "console";
4550
1c41e4a846a2 mod_admin_telnet: Port to portmanager
Matthew Wild <mwild1@gmail.com>
parents: 4540
diff changeset
  1686
	listener = console_listener;
1c41e4a846a2 mod_admin_telnet: Port to portmanager
Matthew Wild <mwild1@gmail.com>
parents: 4540
diff changeset
  1687
	default_port = 5582;
4571
32d532b95dc7 mod_admin_telnet: make service private.
Marco Cirillo <maranda@lightwitch.org>
parents: 4550
diff changeset
  1688
	private = true;
4550
1c41e4a846a2 mod_admin_telnet: Port to portmanager
Matthew Wild <mwild1@gmail.com>
parents: 4540
diff changeset
  1689
});