plugins/mod_admin_telnet.lua
author Arc Riley <arcriley@gmail.com>
Thu, 02 May 2019 17:28:49 -0700
changeset 9992 cdf0b63a0d61
parent 9991 521fb218098d
child 9993 026f9594f661
permissions -rw-r--r--
mod_admin_telnet: added "(bosh)" and "(websocket)" connection flags (#998)
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";
9759
fd4d516556aa mod_admin_telnet: Serialize config values (table: 0x123abc isn't useful)
Kim Alvefur <zash@zash.se>
parents: 9758
diff changeset
    35
local serialize = require "util.serialization".new({ fatal = false, unquoted = true});
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
    36
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
    37
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
    38
local def_env = module:shared("env");
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    39
local default_env_mt = { __index = def_env };
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    40
9406
4416c1a96400 mod_admin_telnet: Rename variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9394
diff changeset
    41
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
    42
	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
    43
	env.dofile = function(name)
5021
85b2689dbcfe Eliminate direct setfenv usage
Florian Zeitz <florob@babelmonkeys.de>
parents: 4913
diff changeset
    44
		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
    45
		if not f then return f, err; end
5021
85b2689dbcfe Eliminate direct setfenv usage
Florian Zeitz <florob@babelmonkeys.de>
parents: 4913
diff changeset
    46
		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
    47
	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
    48
	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
    49
end
947d94e3619f mod_console: Redirect print() to console session when executing commands in global environment
Matthew Wild <mwild1@gmail.com>
parents: 1341
diff changeset
    50
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    51
console = {};
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    52
9739
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    53
local runner_callbacks = {};
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    54
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    55
function runner_callbacks:ready()
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    56
	self.data.conn:resume();
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    57
end
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    58
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    59
function runner_callbacks:waiting()
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    60
	self.data.conn:pause();
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    61
end
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    62
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    63
function runner_callbacks:error(err)
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    64
	module:log("error", "Traceback[telnet]: %s", err);
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    65
end
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    66
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    67
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    68
function console:new_session(conn)
2145
daeb6ebf304c mod_console: Update for new net.server API
Matthew Wild <mwild1@gmail.com>
parents: 2087
diff changeset
    69
	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
    70
	local session = { conn = conn;
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    71
			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
    72
			print = function (...)
33c81ee280e3 mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents: 3044
diff changeset
    73
				local t = {};
33c81ee280e3 mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents: 3044
diff changeset
    74
				for i=1,select("#", ...) do
33c81ee280e3 mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents: 3044
diff changeset
    75
					t[i] = tostring(select(i, ...));
33c81ee280e3 mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents: 3044
diff changeset
    76
				end
33c81ee280e3 mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents: 3044
diff changeset
    77
				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
    78
			end;
2253
a3537266a916 mod_console: Update for new server API, fixes traceback when closing console sessions
Matthew Wild <mwild1@gmail.com>
parents: 2145
diff changeset
    79
			disconnect = function () conn:close(); end;
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    80
			};
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    81
	session.env = setmetatable({}, default_env_mt);
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
    82
9739
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    83
	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
    84
		console:process_line(session, line);
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    85
		session.send(string.char(0));
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    86
	end, runner_callbacks, session);
2d8ca54ecbc6 mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents: 9738
diff changeset
    87
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    88
	-- Load up environment with helper objects
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    89
	for name, t in pairs(def_env) do
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    90
		if type(t) == "table" then
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    91
			session.env[name] = setmetatable({ session = session }, { __index = t });
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    92
		end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    93
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
    94
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    95
	return session;
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    96
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
    97
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
    98
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
    99
	local useglobalenv;
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   100
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
   101
	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
   102
		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
   103
		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
   104
	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
   105
		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
   106
		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
   107
	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
   108
		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
   109
		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
   110
			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
   111
			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
   112
		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
   113
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   114
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
   115
	session.env._ = line;
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   116
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
   117
	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
   118
	local env = (useglobalenv and redirect_output(_G, session)) or session.env or nil
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
	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
   120
	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
   121
		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
   122
		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
   123
			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
   124
			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
   125
			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
   126
			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
   127
			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
   128
		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
   129
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   130
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 ranok, taskok, message = pcall(chunk);
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   132
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
   133
	if not (ranok or message or useglobalenv) and commands[line:lower()] 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
   134
		commands[line:lower()](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
   135
		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
   136
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   137
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
   138
	if not ranok 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
   139
		session.print("Fatal error while running command, it did not complete");
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
		session.print("Error: "..taskok);
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
		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
   142
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   143
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
   144
	if not 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
   145
		session.print("Result: "..tostring(taskok));
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
   146
		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
   147
	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
   148
		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
   149
		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
   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
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   152
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
   153
	session.print("OK: "..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
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
   155
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   156
local sessions = {};
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   157
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
   158
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
   159
	-- 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
   160
	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
   161
	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
   162
	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
   163
	session.send(string.char(0));
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   164
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   165
2145
daeb6ebf304c mod_console: Update for new net.server API
Matthew Wild <mwild1@gmail.com>
parents: 2087
diff changeset
   166
function console_listener.onincoming(conn, data)
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   167
	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
   168
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
   169
	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
   170
	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
   171
		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
   172
	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
   173
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
   174
	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
   175
		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
   176
		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
   177
	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
   178
	session.partial_data = data:match("[^\n]+$");
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   179
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   180
6169
cb15eac75b50 mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents: 6067
diff changeset
   181
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
   182
	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
   183
	if session then
cb15eac75b50 mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents: 6067
diff changeset
   184
		session.send("\0");
cb15eac75b50 mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents: 6067
diff changeset
   185
		return true;
cb15eac75b50 mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents: 6067
diff changeset
   186
	end
cb15eac75b50 mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents: 6067
diff changeset
   187
end
cb15eac75b50 mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents: 6067
diff changeset
   188
9407
f40b0cd41a87 mod_admin_telnet: Remove or rename various unused arguments and variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9406
diff changeset
   189
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
   190
	local session = sessions[conn];
a43aea9b0bd1 mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents: 2010
diff changeset
   191
	if session then
a43aea9b0bd1 mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents: 2010
diff changeset
   192
		session.disconnect();
a43aea9b0bd1 mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents: 2010
diff changeset
   193
		sessions[conn] = nil;
a43aea9b0bd1 mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents: 2010
diff changeset
   194
	end
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   195
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   196
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
   197
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
   198
	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
   199
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
   200
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   201
-- Console commands --
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   202
-- These are simple commands, not valid standalone in Lua
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   203
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   204
function commands.bye(session)
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   205
	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
   206
	session.closed = true;
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   207
	session.disconnect();
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   208
end
1503
5970e06d9335 mod_console: Add quit and exit as aliases for 'bye' command
Matthew Wild <mwild1@gmail.com>
parents: 1502
diff changeset
   209
commands.quit, commands.exit = commands.bye, commands.bye;
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   210
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   211
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
   212
	if data:match("^!!") and session.env._ then
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   213
		session.print("!> "..session.env._);
2512
d04b0eeeb954 mod_console: Update !! shortcut for new connection API
Matthew Wild <mwild1@gmail.com>
parents: 2296
diff changeset
   214
		return console_listener.onincoming(session.conn, session.env._);
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   215
	end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   216
	local old, new = data:match("^!(.-[^\\])!(.-)!$");
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   217
	if old and new then
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   218
		local ok, res = pcall(string.gsub, session.env._, old, new);
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   219
		if not ok then
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   220
			session.print(res)
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   221
			return;
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   222
		end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   223
		session.print("!> "..res);
2512
d04b0eeeb954 mod_console: Update !! shortcut for new connection API
Matthew Wild <mwild1@gmail.com>
parents: 2296
diff changeset
   224
		return console_listener.onincoming(session.conn, res);
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   225
	end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   226
	session.print("Sorry, not sure what you want");
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   227
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   228
3452
2d1a5d8893c2 mod_console: Add host:* commands to help (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents: 3407
diff changeset
   229
1616
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   230
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
   231
	local print = session.print;
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   232
	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
   233
	if not section then
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   234
		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
   235
		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
   236
		print [[]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   237
		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
   238
		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
   239
		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
   240
		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
   241
		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
   242
		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
   243
		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
   244
		print [[dns - Commands to manage and inspect the internal DNS resolver]]
2009
3f9cce29c57d mod_console: Added help text for config:reload().
Waqas Hussain <waqas20@gmail.com>
parents: 2007
diff changeset
   245
		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
   246
		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
   247
	elseif section == "c2s" then
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   248
		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
   249
		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
   250
		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
   251
		print [[c2s:show_tls() - 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
   252
		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
   253
		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
   254
	elseif section == "s2s" then
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   255
		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
   256
		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
   257
		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
   258
		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
   259
	elseif section == "module" then
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   260
		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
   261
		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
   262
		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
   263
		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
   264
	elseif section == "host" then
2d1a5d8893c2 mod_console: Add host:* commands to help (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents: 3407
diff changeset
   265
		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
   266
		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
   267
		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
   268
	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
   269
		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
   270
		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
   271
		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
   272
		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
   273
	elseif section == "server" then
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   274
		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
   275
		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
   276
		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
   277
		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
   278
	elseif section == "port" then
20e14961f630 mod_admin_telnet: Add info about port commands to help
Kim Alvefur <zash@zash.se>
parents: 5227
diff changeset
   279
		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
   280
		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
   281
	elseif section == "dns" then
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
   282
		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
   283
		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
   284
		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
   285
		print [[dns:purge() - Clear the DNS cache]]
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
   286
		print [[dns:cache() - Show cached records]]
2009
3f9cce29c57d mod_console: Added help text for config:reload().
Waqas Hussain <waqas20@gmail.com>
parents: 2007
diff changeset
   287
	elseif section == "config" then
3f9cce29c57d mod_console: Added help text for config:reload().
Waqas Hussain <waqas20@gmail.com>
parents: 2007
diff changeset
   288
		print [[config:reload() - Reload the server configuration. Modules may need to be reloaded for changes to take effect.]]
1616
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   289
	elseif section == "console" then
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   290
		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
   291
		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
   292
		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
   293
		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
   294
		print [[]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   295
		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
   296
		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
   297
		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
   298
		print [[]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   299
		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
   300
		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
   301
		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
   302
	end
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   303
	print [[]]
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   304
end
80ea744f2643 mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents: 1575
diff changeset
   305
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   306
-- Session environment --
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   307
-- 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
   308
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
   309
--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
   310
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   311
def_env.server = {};
1558
e15917530285 mod_console: Add config:reload() command
Matthew Wild <mwild1@gmail.com>
parents: 1556
diff changeset
   312
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
   313
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
   314
	prosody.unlock_globals();
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   315
	dofile "prosody"
1316
28ae044f1aaf mod_console: Some "improvements" to the useless server:reload() command :)
Matthew Wild <mwild1@gmail.com>
parents: 1315
diff changeset
   316
	prosody = _G.prosody;
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   317
	return true, "Server reloaded";
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   318
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   319
1496
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   320
function def_env.server:version()
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   321
	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
   322
end
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   323
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   324
function def_env.server:uptime()
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   325
	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
   326
	local seconds = t%60;
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   327
	t = (t - seconds)/60;
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   328
	local minutes = t%60;
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   329
	t = (t - minutes)/60;
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   330
	local hours = t%24;
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   331
	t = (t - hours)/24;
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   332
	local days = t;
3540
bc139431830b Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents: 3452
diff changeset
   333
	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
   334
		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
   335
		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
   336
end
4fa337035f46 mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents: 1491
diff changeset
   337
1559
831649bb1922 mod_console: Add server:shutdown() command
Matthew Wild <mwild1@gmail.com>
parents: 1558
diff changeset
   338
function def_env.server:shutdown(reason)
831649bb1922 mod_console: Add server:shutdown() command
Matthew Wild <mwild1@gmail.com>
parents: 1558
diff changeset
   339
	prosody.shutdown(reason);
831649bb1922 mod_console: Add server:shutdown() command
Matthew Wild <mwild1@gmail.com>
parents: 1558
diff changeset
   340
	return true, "Shutdown initiated";
831649bb1922 mod_console: Add server:shutdown() command
Matthew Wild <mwild1@gmail.com>
parents: 1558
diff changeset
   341
end
831649bb1922 mod_console: Add server:shutdown() command
Matthew Wild <mwild1@gmail.com>
parents: 1558
diff changeset
   342
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
   343
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
   344
	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
   345
	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
   346
		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
   347
	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
   348
	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
   349
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
   350
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
   351
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
   352
	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
   353
		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
   354
	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
   355
	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
   356
	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
   357
	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
   358
	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
   359
	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
   360
	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
   361
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
   362
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   363
def_env.module = {};
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   364
1433
e7bd00e70973 mod_console: Reload/unload a module on a component host if it is loaded there
Matthew Wild <mwild1@gmail.com>
parents: 1342
diff changeset
   365
local function get_hosts_set(hosts, module)
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   366
	if type(hosts) == "table" then
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   367
		if hosts[1] then
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   368
			return set.new(hosts);
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   369
		elseif hosts._items then
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   370
			return hosts;
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   371
		end
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   372
	elseif type(hosts) == "string" then
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   373
		return set.new { hosts };
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   374
	elseif hosts == nil then
4644
fb067c8a8d2e mod_admin_telnet: get_host_set(): Include '*' in the set if no specific hosts are specified and the module is loaded there
Matthew Wild <mwild1@gmail.com>
parents: 4623
diff changeset
   375
		local hosts_set = set.new(array.collect(keys(prosody.hosts)))
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
   376
			/ function (host) return (prosody.hosts[host].type == "local" or module and modulemanager.is_loaded(host, module)) and host or nil; end;
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
   377
		if module and modulemanager.get_module("*", module) then
4644
fb067c8a8d2e mod_admin_telnet: get_host_set(): Include '*' in the set if no specific hosts are specified and the module is loaded there
Matthew Wild <mwild1@gmail.com>
parents: 4623
diff changeset
   378
			hosts_set:add("*");
fb067c8a8d2e mod_admin_telnet: get_host_set(): Include '*' in the set if no specific hosts are specified and the module is loaded there
Matthew Wild <mwild1@gmail.com>
parents: 4623
diff changeset
   379
		end
fb067c8a8d2e mod_admin_telnet: get_host_set(): Include '*' in the set if no specific hosts are specified and the module is loaded there
Matthew Wild <mwild1@gmail.com>
parents: 4623
diff changeset
   380
		return hosts_set;
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   381
	end
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   382
end
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   383
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   384
function def_env.module:load(name, hosts, config)
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   385
	hosts = get_hosts_set(hosts);
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   386
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   387
	-- 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
   388
	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
   389
	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
   390
		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
   391
			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
   392
			if not mod then
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   393
				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
   394
				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
   395
					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
   396
						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
   397
					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
   398
					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
   399
				end
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   400
				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
   401
			else
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   402
				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
   403
				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
   404
			end
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   405
		end
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   406
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   407
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   408
	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
   409
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   410
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   411
function def_env.module:unload(name, hosts)
1433
e7bd00e70973 mod_console: Reload/unload a module on a component host if it is loaded there
Matthew Wild <mwild1@gmail.com>
parents: 1342
diff changeset
   412
	hosts = get_hosts_set(hosts, name);
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   413
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   414
	-- 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
   415
	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
   416
	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
   417
		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
   418
			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
   419
			if not ok then
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   420
				ok = false;
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   421
				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
   422
			else
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   423
				count = count + 1;
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   424
				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
   425
			end
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   426
		end
712
56410c0cd846 mod_console: Added module:reload
Waqas Hussain <waqas20@gmail.com>
parents: 669
diff changeset
   427
	end
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   428
	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
   429
end
56410c0cd846 mod_console: Added module:reload
Waqas Hussain <waqas20@gmail.com>
parents: 669
diff changeset
   430
9335
048389a9bbd4 mod_admin_telnet: Split out sort function for clarity
Matthew Wild <mwild1@gmail.com>
parents: 9333
diff changeset
   431
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
   432
	if a == "*" then return true
048389a9bbd4 mod_admin_telnet: Split out sort function for clarity
Matthew Wild <mwild1@gmail.com>
parents: 9333
diff changeset
   433
	elseif b == "*" then return false
048389a9bbd4 mod_admin_telnet: Split out sort function for clarity
Matthew Wild <mwild1@gmail.com>
parents: 9333
diff changeset
   434
	else return a < b; end
048389a9bbd4 mod_admin_telnet: Split out sort function for clarity
Matthew Wild <mwild1@gmail.com>
parents: 9333
diff changeset
   435
end
048389a9bbd4 mod_admin_telnet: Split out sort function for clarity
Matthew Wild <mwild1@gmail.com>
parents: 9333
diff changeset
   436
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   437
function def_env.module:reload(name, hosts)
9335
048389a9bbd4 mod_admin_telnet: Split out sort function for clarity
Matthew Wild <mwild1@gmail.com>
parents: 9333
diff changeset
   438
	hosts = array.collect(get_hosts_set(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
   439
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   440
	-- 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
   441
	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
   442
	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
   443
		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
   444
			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
   445
			if not ok then
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   446
				ok = false;
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   447
				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
   448
			else
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   449
				count = count + 1;
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   450
				if ok == nil then
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   451
					ok = true;
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   452
				end
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   453
				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
   454
			end
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   455
		end
712
56410c0cd846 mod_console: Added module:reload
Waqas Hussain <waqas20@gmail.com>
parents: 669
diff changeset
   456
	end
1315
bfcd3f0a49df mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents: 1241
diff changeset
   457
	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
   458
end
56410c0cd846 mod_console: Added module:reload
Waqas Hussain <waqas20@gmail.com>
parents: 669
diff changeset
   459
1906
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   460
function def_env.module:list(hosts)
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   461
	if hosts == nil then
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   462
		hosts = array.collect(keys(prosody.hosts));
4646
e0bd8587f2fb mod_admin_telnet: module:list(): List global modules (part-fixes #228)
Matthew Wild <mwild1@gmail.com>
parents: 4645
diff changeset
   463
		table.insert(hosts, 1, "*");
1906
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   464
	end
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   465
	if type(hosts) == "string" then
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   466
		hosts = { hosts };
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   467
	end
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   468
	if type(hosts) ~= "table" then
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   469
		return false, "Please supply a host or a list of hosts you would like to see";
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   470
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   471
1906
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   472
	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
   473
	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
   474
		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
   475
		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
   476
		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
   477
			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
   478
				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
   479
			else
1a4f14ea39b6 mod_console: Fixed traceback occuring on using module:list on unknown hosts.
Waqas Hussain <waqas20@gmail.com>
parents: 2009
diff changeset
   480
				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
   481
			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
   482
		else
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   483
			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
   484
				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
   485
				local status_summary = "";
0361e3379dd1 mod_admin_telnet: Show module status in module:list()
Matthew Wild <mwild1@gmail.com>
parents: 9790
diff changeset
   486
				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
   487
					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
   488
				end
0361e3379dd1 mod_admin_telnet: Show module status in module:list()
Matthew Wild <mwild1@gmail.com>
parents: 9790
diff changeset
   489
				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
   490
			end
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   491
		end
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   492
	end
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   493
end
88c61368e669 mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents: 1821
diff changeset
   494
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   495
def_env.config = {};
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   496
function def_env.config:load(filename, format)
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   497
	local config_load = require "core.configmanager".load;
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   498
	local ok, err = config_load(filename, format);
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   499
	if not ok then
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   500
		return false, err or "Unknown error loading config";
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   501
	end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   502
	return true, "Config loaded";
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   503
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   504
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
   505
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
   506
	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
   507
		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
   508
	end
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   509
	local config_get = require "core.configmanager".get
9759
fd4d516556aa mod_admin_telnet: Serialize config values (table: 0x123abc isn't useful)
Kim Alvefur <zash@zash.se>
parents: 9758
diff changeset
   510
	return true, serialize(config_get(host, key));
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   511
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   512
1558
e15917530285 mod_console: Add config:reload() command
Matthew Wild <mwild1@gmail.com>
parents: 1556
diff changeset
   513
function def_env.config:reload()
e15917530285 mod_console: Add config:reload() command
Matthew Wild <mwild1@gmail.com>
parents: 1556
diff changeset
   514
	local ok, err = prosody.reload_config();
e15917530285 mod_console: Add config:reload() command
Matthew Wild <mwild1@gmail.com>
parents: 1556
diff changeset
   515
	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
   516
end
e15917530285 mod_console: Add config:reload() command
Matthew Wild <mwild1@gmail.com>
parents: 1556
diff changeset
   517
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
   518
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
   519
	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
   520
		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
   521
	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
   522
		line[#line+1] = "["..session.type..(tostring(session):match("%x*$")).."]"
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   523
	end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   524
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   525
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
   526
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
   527
	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
   528
	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
   529
	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
   530
		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
   531
		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
   532
			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
   533
		end
c69fca37f338 mod_admin_telnet: Move extraction of c2s presence info into session_flags()
Kim Alvefur <zash@zash.se>
parents: 6170
diff changeset
   534
		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
   535
	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
   536
	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
   537
		line[#line+1] = "(authenticated)";
1dff425ffe84 mod_admin_telnet: Split (secure) into (authenticated) + (secure)
Kim Alvefur <zash@zash.se>
parents: 6169
diff changeset
   538
	end
1dff425ffe84 mod_admin_telnet: Split (secure) into (authenticated) + (secure)
Kim Alvefur <zash@zash.se>
parents: 6169
diff changeset
   539
	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
   540
		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
   541
	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
   542
	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
   543
		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
   544
	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
   545
	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
   546
		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
   547
	end
5662
685d46ec352b mod_admin_telnet: Simplify IPv6 detection, fixes rare traceback
Kim Alvefur <zash@zash.se>
parents: 5645
diff changeset
   548
	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
   549
		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
   550
	end
6930
566e1cfcb814 mod_admin_telnet: c2s:show(): Add flag to indicate remote sessions
Matthew Wild <mwild1@gmail.com>
parents: 6841
diff changeset
   551
	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
   552
		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
   553
	end
9715
39dc037875e1 admin_telnet: show when bidi is used on s2s
Maxime “pep” Buquet <pep@bouah.net>
parents: 9695
diff changeset
   554
	if session.is_bidi then
39dc037875e1 admin_telnet: show when bidi is used on s2s
Maxime “pep” Buquet <pep@bouah.net>
parents: 9695
diff changeset
   555
		line[#line+1] = "(bidi)";
39dc037875e1 admin_telnet: show when bidi is used on s2s
Maxime “pep” Buquet <pep@bouah.net>
parents: 9695
diff changeset
   556
	end
9992
cdf0b63a0d61 mod_admin_telnet: added "(bosh)" and "(websocket)" connection flags (#998)
Arc Riley <arcriley@gmail.com>
parents: 9991
diff changeset
   557
	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
   558
		line[#line+1] = "(bosh)";
cdf0b63a0d61 mod_admin_telnet: added "(bosh)" and "(websocket)" connection flags (#998)
Arc Riley <arcriley@gmail.com>
parents: 9991
diff changeset
   559
	end
cdf0b63a0d61 mod_admin_telnet: added "(bosh)" and "(websocket)" connection flags (#998)
Arc Riley <arcriley@gmail.com>
parents: 9991
diff changeset
   560
	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
   561
		line[#line+1] = "(websocket)";
cdf0b63a0d61 mod_admin_telnet: added "(bosh)" and "(websocket)" connection flags (#998)
Arc Riley <arcriley@gmail.com>
parents: 9991
diff changeset
   562
	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
   563
	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
   564
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
   565
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
   566
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
   567
	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
   568
	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
   569
	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
   570
		local sock = session.conn and session.conn.socket and session.conn:socket();
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   571
		if sock and sock.info 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
   572
			local info = sock: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
   573
			line[#line+1] = ("(%s with %s)"):format(info.protocol, info.cipher);
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   574
		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
   575
			line[#line+1] = "(cipher info unavailable)";
0205b97bb355 mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections
Kim Alvefur <zash@zash.se>
parents: 6171
diff changeset
   576
		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
   577
	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
   578
		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
   579
	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
   580
	return table.concat(line, " ");
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   581
end
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
   582
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   583
def_env.c2s = {};
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   584
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
   585
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
   586
	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
   587
		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
   588
	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
   589
eae5d2f1311d mod_admin_telnet: Show unauthenticated clients identified by local/remote IP and port
Kim Alvefur <zash@zash.se>
parents: 7071
diff changeset
   590
	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
   591
	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
   592
	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
   593
	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
   594
	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
   595
	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
   596
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
   597
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   598
local function show_c2s(callback)
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
   599
	local c2s = array.collect(values(module:shared"/*/c2s/sessions"));
9991
521fb218098d mod_admin_telnet: include BOSH connections in c2s session commands (#998)
Arc Riley <arcriley@gmail.com>
parents: 9978
diff changeset
   600
	c2s:append(values(module:shared"/*/bosh/sessions"));
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
   601
	c2s:sort(function(a, b)
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
   602
		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
   603
			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
   604
				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
   605
			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
   606
			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
   607
		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
   608
		return (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
   609
	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
   610
		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
   611
	end);
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   612
end
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   613
9407
f40b0cd41a87 mod_admin_telnet: Remove or rename various unused arguments and variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9406
diff changeset
   614
function def_env.c2s:count()
7073
aab022cb8e29 mod_admin_telnet: c2s:count in less lines
Kim Alvefur <zash@zash.se>
parents: 7072
diff changeset
   615
	return true, "Total: "..  iterators.count(values(module:shared"/*/c2s/sessions")) .." clients";
4779
9f2639b3d9b1 mod_admin_telnet: Add c2s:count() which shows number of connected users.
Kim Alvefur <zash@zash.se>
parents: 4684
diff changeset
   616
end
9f2639b3d9b1 mod_admin_telnet: Add c2s:count() which shows number of connected users.
Kim Alvefur <zash@zash.se>
parents: 4684
diff changeset
   617
6174
513ea94761b2 mod_admin_telnet: Add c2s:show_tls(), behaves like s2s:show_tls()
Kim Alvefur <zash@zash.se>
parents: 6173
diff changeset
   618
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
   619
	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
   620
	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
   621
	local curr_host = false;
1798
4c8f3fa9d926 mod_console: Show status and priority of clients
Matthew Wild <mwild1@gmail.com>
parents: 1616
diff changeset
   622
	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
   623
		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
   624
			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
   625
			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
   626
		end
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   627
		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
   628
			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
   629
			print(annotate(session, { "  ", jid }));
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   630
		end
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   631
	end);
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   632
	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
   633
end
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   634
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   635
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
   636
	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
   637
	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
   638
		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
   639
			count = count + 1;
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   640
			print(jid);
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   641
		end
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   642
	end);
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   643
	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
   644
end
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   645
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   646
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
   647
	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
   648
	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
   649
		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
   650
			count = count + 1;
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   651
			print(jid);
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   652
		end
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   653
	end);
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   654
	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
   655
end
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   656
6174
513ea94761b2 mod_admin_telnet: Add c2s:show_tls(), behaves like s2s:show_tls()
Kim Alvefur <zash@zash.se>
parents: 6173
diff changeset
   657
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
   658
	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
   659
end
513ea94761b2 mod_admin_telnet: Add c2s:show_tls(), behaves like s2s:show_tls()
Kim Alvefur <zash@zash.se>
parents: 6173
diff changeset
   660
1491
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   661
function def_env.c2s:close(match_jid)
5028
10a69a7e4545 mod_admin_telnet: Remove unused variable
Matthew Wild <mwild1@gmail.com>
parents: 5027
diff changeset
   662
	local count = 0;
1491
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   663
	show_c2s(function (jid, session)
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   664
		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
   665
			count = count + 1;
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   666
			session:close();
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   667
		end
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   668
	end);
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   669
	return true, "Total: "..count.." sessions closed";
694a0a00e1a5 mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents: 1483
diff changeset
   670
end
1241
9c53fb182044 mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents: 1240
diff changeset
   671
9978
c30933aa0242 mod_admin_telnet: Adds c2s:closeall() (Fixes #1315)
João Duarte <jvsDuarte08@gmail.com>
parents: 9872
diff changeset
   672
function def_env.c2s:closeall()
c30933aa0242 mod_admin_telnet: Adds c2s:closeall() (Fixes #1315)
João Duarte <jvsDuarte08@gmail.com>
parents: 9872
diff changeset
   673
	local count = 0;
c30933aa0242 mod_admin_telnet: Adds c2s:closeall() (Fixes #1315)
João Duarte <jvsDuarte08@gmail.com>
parents: 9872
diff changeset
   674
	--luacheck: ignore 212/jid
c30933aa0242 mod_admin_telnet: Adds c2s:closeall() (Fixes #1315)
João Duarte <jvsDuarte08@gmail.com>
parents: 9872
diff changeset
   675
	show_c2s(function (jid, session)
c30933aa0242 mod_admin_telnet: Adds c2s:closeall() (Fixes #1315)
João Duarte <jvsDuarte08@gmail.com>
parents: 9872
diff changeset
   676
		count = count + 1;
c30933aa0242 mod_admin_telnet: Adds c2s:closeall() (Fixes #1315)
João Duarte <jvsDuarte08@gmail.com>
parents: 9872
diff changeset
   677
		session:close();
c30933aa0242 mod_admin_telnet: Adds c2s:closeall() (Fixes #1315)
João Duarte <jvsDuarte08@gmail.com>
parents: 9872
diff changeset
   678
	end);
c30933aa0242 mod_admin_telnet: Adds c2s:closeall() (Fixes #1315)
João Duarte <jvsDuarte08@gmail.com>
parents: 9872
diff changeset
   679
	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
   680
end
c30933aa0242 mod_admin_telnet: Adds c2s:closeall() (Fixes #1315)
João Duarte <jvsDuarte08@gmail.com>
parents: 9872
diff changeset
   681
4514
ae48e0abc233 mod_admin_telnet: Commond and flexible way to show stream properties.
Kim Alvefur <zash@zash.se>
parents: 4328
diff changeset
   682
1085
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   683
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
   684
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
   685
	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
   686
	annotate = annotate or session_flags;
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   687
1322
33d103b0283f mod_console: Show total incoming/outgoing s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1317
diff changeset
   688
	local count_in, count_out = 0,0;
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   689
	local s2s_list = { };
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   690
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   691
	local s2s_sessions = module:shared"/*/s2s/sessions";
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   692
	for _, session in pairs(s2s_sessions) do
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   693
		local remotehost, localhost, direction;
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   694
		if session.direction == "outgoing" then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   695
			direction = "->";
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   696
			count_out = count_out + 1;
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   697
			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
   698
		else
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   699
			direction = "<-";
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   700
			count_in = count_in + 1;
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   701
			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
   702
		end
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   703
		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
   704
			annotate(session, { "", direction, remotehost or "?" })};
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   705
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   706
		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
   707
			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
   708
			-- luacheck: ignore 421/print
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   709
			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
   710
			if session.sendq then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   711
				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
   712
			end
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   713
			if session.type == "s2sout_unauthed" then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   714
				if session.connecting then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   715
					print("Connection not yet established");
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   716
					if not session.srv_hosts then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   717
						if not session.conn then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   718
							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
   719
						else
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   720
							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
   721
						end
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   722
					elseif session.srv_choice then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   723
						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
   724
						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
   725
						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
   726
					end
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   727
				elseif session.notopen then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   728
					print("The <stream> has not yet been opened");
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   729
				elseif not session.dialback_key then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   730
					print("Dialback has not been initiated yet");
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   731
				elseif session.dialback_key then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   732
					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
   733
				end
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   734
			end
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   735
			if session.type == "s2sin_unauthed" then
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   736
				print("Connection not yet authenticated");
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   737
			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
   738
				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
   739
					if name ~= session.from_host then
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   740
						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
   741
					end
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   742
				end
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   743
			end
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   744
		end
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   745
	end
5710
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   746
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   747
	-- Sort by local host, then remote host
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   748
	table.sort(s2s_list, function(a,b)
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   749
		if a.l == b.l then return a.r < b.r; end
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   750
		return a.l < b.l;
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   751
	end);
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   752
	local lasthost;
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   753
	for _, sess_lines in ipairs(s2s_list) do
e66bbfdf588e mod_admin_telnet: Refactor s2s:show()
Kim Alvefur <zash@zash.se>
parents: 5709
diff changeset
   754
		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
   755
		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
   756
	end
1322
33d103b0283f mod_console: Show total incoming/outgoing s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1317
diff changeset
   757
	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
   758
end
1ac11fb753ca mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
   759
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
   760
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
   761
	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
   762
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
   763
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   764
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
   765
	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
   766
		print(
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   767
			("    %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
   768
				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
   769
				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
   770
			)
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   771
		);
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   772
	end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   773
end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   774
4328
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   775
-- 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
   776
-- 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
   777
-- break from that.
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   778
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
   779
	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
   780
		print(
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   781
			("    %d: %s"):format(
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   782
				depth-1,
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   783
				table.concat(t, "\n|        ")
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   784
			)
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   785
		);
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   786
	end
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   787
end
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   788
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   789
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
   790
	local print = self.session.print;
5706
896094da72e4 mod_admin_telnet: Refactor s2s:showcert()
Kim Alvefur <zash@zash.se>
parents: 5674
diff changeset
   791
	local s2s_sessions = module:shared"/*/s2s/sessions";
896094da72e4 mod_admin_telnet: Refactor s2s:showcert()
Kim Alvefur <zash@zash.se>
parents: 5674
diff changeset
   792
	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
   793
		/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
   794
	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
   795
	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
   796
		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
   797
		conn = conn and conn:socket();
4328
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   798
		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
   799
			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
   800
				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
   801
			end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   802
		else
5596
73fea1a87afd mod_admin_telnet: Don't rely on getpeerchain returning an empty list
Kim Alvefur <zash@zash.se>
parents: 5567
diff changeset
   803
			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
   804
			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
   805
				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
   806
				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
   807
				if not cert_set[digest] then
4328
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   808
					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
   809
					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
   810
						{
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   811
						  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
   812
						  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
   813
						  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
   814
						};
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   815
						chain_valid = chain_valid;
4328
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   816
						chain_errors = chain_errors;
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   817
						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
   818
					};
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   819
				else
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   820
					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
   821
						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
   822
						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
   823
						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
   824
					});
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   825
				end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   826
			end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   827
		end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   828
	end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   829
	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
   830
	-- 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
   831
	local n_certs = #domain_certs;
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   832
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   833
	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
   834
		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
   835
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   836
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   837
	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
   838
		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
   839
	end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   840
	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
   841
		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
   842
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   843
3669
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   844
	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
   845
		local certs = cert_info.certs;
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   846
		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
   847
		print("---")
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   848
		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
   849
		print("");
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   850
		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
   851
		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
   852
		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
   853
			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
   854
				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
   855
			else
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   856
				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
   857
			end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   858
		end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   859
		print("");
4328
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   860
		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
   861
		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
   862
		if chain_valid then
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   863
			print("Trusted certificate: Yes");
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   864
		else
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   865
			print("Trusted certificate: No");
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   866
			print_errors(print, errors);
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   867
		end
c71777a8b9c7 mod_admin_telnet: Update to newer luasec.
Paul Aurich <paul@darkrain42.org>
parents: 3899
diff changeset
   868
		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
   869
		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
   870
		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
   871
		print("");
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   872
		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
   873
		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
   874
		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
   875
	end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   876
	print("---");
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   877
	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
   878
		..(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
   879
		.." 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
   880
end
4b56cd1302d4 mod_console: Add s2s:showcert() command to show the certificate for a domain
Matthew Wild <mwild1@gmail.com>
parents: 3652
diff changeset
   881
1340
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   882
function def_env.s2s:close(from, to)
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   883
	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
   884
	local s2s_sessions = module:shared"/*/s2s/sessions";
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   885
5708
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   886
	local match_id;
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   887
	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
   888
		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
   889
	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
   890
		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
   891
	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
   892
		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
   893
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
   894
5708
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   895
	for _, session in pairs(s2s_sessions) do
5709
5557b4a4cb49 mod_admin_telnet: Generate session names the same way as in s2smanager
Kim Alvefur <zash@zash.se>
parents: 5708
diff changeset
   896
		local id = 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
   897
		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
   898
		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
   899
			print(("Closing connection from %s to %s [%s]"):format(session.from_host, session.to_host, id));
1821
05ed826da89b mod_console: s2s:close: Use session:close() if that exists, otherwise just destroy the session
Matthew Wild <mwild1@gmail.com>
parents: 1798
diff changeset
   900
			(session.close or s2smanager.destroy_session)(session);
5708
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   901
			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
   902
		end
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   903
	end
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   904
	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
   905
end
f707d0957155 mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents: 1322
diff changeset
   906
4978
0b9e86302de4 mod_admin_telnet: add s2s:closeall command and relative help entry.
Marco Cirillo <maranda@lightwitch.org>
parents: 4913
diff changeset
   907
function def_env.s2s:closeall(host)
6841
229e95aecf41 mod_admin_telnet: Fix indentation
Kim Alvefur <zash@zash.se>
parents: 6784
diff changeset
   908
	local count = 0;
5708
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   909
	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
   910
	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
   911
		if not host or session.from_host == host or session.to_host == host then
667cf4e45356 mod_admin_telnet: Refactor s2s:close and s2s:closeall
Kim Alvefur <zash@zash.se>
parents: 5706
diff changeset
   912
			session:close();
6841
229e95aecf41 mod_admin_telnet: Fix indentation
Kim Alvefur <zash@zash.se>
parents: 6784
diff changeset
   913
			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
   914
		end
6841
229e95aecf41 mod_admin_telnet: Fix indentation
Kim Alvefur <zash@zash.se>
parents: 6784
diff changeset
   915
	end
4978
0b9e86302de4 mod_admin_telnet: add s2s:closeall command and relative help entry.
Marco Cirillo <maranda@lightwitch.org>
parents: 4913
diff changeset
   916
	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
   917
	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
   918
end
0b9e86302de4 mod_admin_telnet: add s2s:closeall command and relative help entry.
Marco Cirillo <maranda@lightwitch.org>
parents: 4913
diff changeset
   919
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
   920
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
   921
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
   922
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
   923
	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
   924
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
   925
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
   926
	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
   927
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
   928
2007
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
   929
function def_env.host:list()
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
   930
	local print = self.session.print;
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
   931
	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
   932
	local type;
9394
4001eb3f465a mod_admin_telnet: Fix local reference to util.iterator
Kim Alvefur <zash@zash.se>
parents: 9335
diff changeset
   933
	for host, host_session in iterators.sorted_pairs(prosody.hosts) do
2007
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
   934
		i = i + 1;
9333
36badabc85ce mod_admin_telnet: Make use of util.iterators.sorted_pairs()
Matthew Wild <mwild1@gmail.com>
parents: 9012
diff changeset
   935
		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
   936
		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
   937
			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
   938
		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
   939
			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
   940
			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
   941
				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
   942
			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
   943
			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
   944
		end
2007
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
   945
	end
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
   946
	return true, i.." hosts";
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
   947
end
b89d61db74d1 mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents: 1977
diff changeset
   948
4674
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   949
def_env.port = {};
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   950
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   951
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
   952
	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
   953
	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
   954
	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
   955
	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
   956
		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
   957
		local ports_list = {};
9333
36badabc85ce mod_admin_telnet: Make use of util.iterators.sorted_pairs()
Matthew Wild <mwild1@gmail.com>
parents: 9012
diff changeset
   958
		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
   959
			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
   960
				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
   961
			end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   962
		end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   963
		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
   964
		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
   965
	end
9333
36badabc85ce mod_admin_telnet: Make use of util.iterators.sorted_pairs()
Matthew Wild <mwild1@gmail.com>
parents: 9012
diff changeset
   966
	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
   967
end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   968
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   969
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
   970
	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
   971
	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
   972
	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
   973
	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
   974
		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
   975
			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
   976
				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
   977
					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
   978
					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
   979
					if not ok then
5029
7bcd79631492 mod_admin_telnet: Fix usage of incorrect variable
Matthew Wild <mwild1@gmail.com>
parents: 5028
diff changeset
   980
						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
   981
					else
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   982
						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
   983
					end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   984
				end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   985
			end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   986
		end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   987
	end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   988
	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
   989
end
f44726a910a0 mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents: 4647
diff changeset
   990
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
   991
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
   992
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
   993
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
   994
	__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
   995
	__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
   996
		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
   997
	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
   998
};
2999f0fd1347 mod_admin_telnet: Add muc:room(jid) command to get the MUC room object
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
   999
5520
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
  1000
local function check_muc(jid)
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
  1001
	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
  1002
	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
  1003
		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
  1004
	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
  1005
		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
  1006
	end
5520
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
  1007
	return room_name, host;
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
  1008
end
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
  1009
8879
9e72e63819dc console: Allow passing a config when creating a room
Kim Alvefur <zash@zash.se>
parents: 8594
diff changeset
  1010
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
  1011
	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
  1012
	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
  1013
		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
  1014
	end
7474
3631d259bb85 mod_admin_telnet: rename variable to make it defined (room -> room_name)
Anton Shestakov <av6@dwimlabs.net>
parents: 7093
diff changeset
  1015
	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
  1016
	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
  1017
	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
  1018
	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
  1019
end
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
  1020
75230be5be58 mod_admin_telnet: Add muc:create(room) (thanks SkyBlue)
Matthew Wild <mwild1@gmail.com>
parents: 5278
diff changeset
  1021
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
  1022
	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
  1023
	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
  1024
		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
  1025
	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
  1026
	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
  1027
	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
  1028
		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
  1029
	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
  1030
	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
  1031
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
  1032
6260
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
  1033
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
  1034
	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
  1035
	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
  1036
		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
  1037
	end
6536
5da544e97bea mod_admin_telnet: Use the session-specific print function
Kim Alvefur <zash@zash.se>
parents: 6506
diff changeset
  1038
	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
  1039
	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
  1040
	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
  1041
		print(room.jid);
6260
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
  1042
		c = c + 1;
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
  1043
	end
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
  1044
	return true, c.." rooms";
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
  1045
end
6986ca575568 mod_admin_telnet: Add command to list MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 6176
diff changeset
  1046
5006
af7e563cf453 mod_admin_telnet: Add missing import of usermanager
Kim Alvefur <zash@zash.se>
parents: 5005
diff changeset
  1047
local um = require"core.usermanager";
af7e563cf453 mod_admin_telnet: Add missing import of usermanager
Kim Alvefur <zash@zash.se>
parents: 5005
diff changeset
  1048
4973
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1049
def_env.user = {};
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1050
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
  1051
	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
  1052
	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
  1053
		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
  1054
	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
  1055
		return nil, "User exists";
834ab74585ec mod_admin_telnet: Fix user:*, correct names, docs, do validation
Kim Alvefur <zash@zash.se>
parents: 5030
diff changeset
  1056
	end
4973
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1057
	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
  1058
	if ok then
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1059
		return true, "User created";
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1060
	else
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1061
		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
  1062
	end
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1063
end
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1064
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1065
function def_env.user:delete(jid)
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1066
	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
  1067
	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
  1068
		return nil, "No such host: "..host;
5643
e612e1887e39 mod_admin_telnet: Fix inverted boolean logic
Kim Alvefur <zash@zash.se>
parents: 5630
diff changeset
  1069
	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
  1070
		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
  1071
	end
4973
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1072
	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
  1073
	if ok then
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1074
		return true, "User deleted";
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1075
	else
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1076
		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
  1077
	end
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1078
end
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1079
5128
834ab74585ec mod_admin_telnet: Fix user:*, correct names, docs, do validation
Kim Alvefur <zash@zash.se>
parents: 5030
diff changeset
  1080
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
  1081
	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
  1082
	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
  1083
		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
  1084
	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
  1085
		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
  1086
	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
  1087
	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
  1088
	if ok then
5128
834ab74585ec mod_admin_telnet: Fix user:*, correct names, docs, do validation
Kim Alvefur <zash@zash.se>
parents: 5030
diff changeset
  1089
		return true, "User password changed";
4973
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1090
	else
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1091
		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
  1092
	end
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1093
end
3f7248ac1a3b mod_admin_telnet: Add some user management commands.
Kim Alvefur <zash@zash.se>
parents: 4913
diff changeset
  1094
5168
46fc0eff10b4 mod_admin_telnet: user:list(): Allow filtering the set of users
Kim Alvefur <zash@zash.se>
parents: 5167
diff changeset
  1095
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
  1096
	if not host then
c363e7e77f79 mod_admin_telnet: Add support for listing users
Kim Alvefur <zash@zash.se>
parents: 5133
diff changeset
  1097
		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
  1098
	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
  1099
		return nil, "No such host";
5158
c363e7e77f79 mod_admin_telnet: Add support for listing users
Kim Alvefur <zash@zash.se>
parents: 5133
diff changeset
  1100
	end
c363e7e77f79 mod_admin_telnet: Add support for listing users
Kim Alvefur <zash@zash.se>
parents: 5133
diff changeset
  1101
	local print = self.session.print;
5227
97f395938028 mod_admin_telnet: Improve wording when listing users
Kim Alvefur <zash@zash.se>
parents: 5186
diff changeset
  1102
	local total, matches = 0, 0;
5158
c363e7e77f79 mod_admin_telnet: Add support for listing users
Kim Alvefur <zash@zash.se>
parents: 5133
diff changeset
  1103
	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
  1104
		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
  1105
			print(user.."@"..host);
5227
97f395938028 mod_admin_telnet: Improve wording when listing users
Kim Alvefur <zash@zash.se>
parents: 5186
diff changeset
  1106
			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
  1107
		end
5227
97f395938028 mod_admin_telnet: Improve wording when listing users
Kim Alvefur <zash@zash.se>
parents: 5186
diff changeset
  1108
		total = total + 1;
5158
c363e7e77f79 mod_admin_telnet: Add support for listing users
Kim Alvefur <zash@zash.se>
parents: 5133
diff changeset
  1109
	end
5227
97f395938028 mod_admin_telnet: Improve wording when listing users
Kim Alvefur <zash@zash.se>
parents: 5186
diff changeset
  1110
	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
  1111
end
c363e7e77f79 mod_admin_telnet: Add support for listing users
Kim Alvefur <zash@zash.se>
parents: 5133
diff changeset
  1112
5011
83b4d3727b4f mod_admin_telnet: Add xmpp:ping(from, to), useful for initiating s2s connections
Kim Alvefur <zash@zash.se>
parents: 5007
diff changeset
  1113
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
  1114
83b4d3727b4f mod_admin_telnet: Add xmpp:ping(from, to), useful for initiating s2s connections
Kim Alvefur <zash@zash.se>
parents: 5007
diff changeset
  1115
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
  1116
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
  1117
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
  1118
	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
  1119
	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
  1120
	if not localhost then
d46c376dfe2c mod_admin_telnet: Validate hostnames in xmpp:ping command
Kim Alvefur <zash@zash.se>
parents: 9740
diff changeset
  1121
		return nil, "Invalid sender hostname";
d46c376dfe2c mod_admin_telnet: Validate hostnames in xmpp:ping command
Kim Alvefur <zash@zash.se>
parents: 9740
diff changeset
  1122
	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
  1123
		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
  1124
	end
d46c376dfe2c mod_admin_telnet: Validate hostnames in xmpp:ping command
Kim Alvefur <zash@zash.se>
parents: 9740
diff changeset
  1125
	if not remotehost then
d46c376dfe2c mod_admin_telnet: Validate hostnames in xmpp:ping command
Kim Alvefur <zash@zash.se>
parents: 9740
diff changeset
  1126
		return nil, "Invalid destination hostname";
d46c376dfe2c mod_admin_telnet: Validate hostnames in xmpp:ping command
Kim Alvefur <zash@zash.se>
parents: 9740
diff changeset
  1127
	elseif prosody.hosts[remotehost] then
d46c376dfe2c mod_admin_telnet: Validate hostnames in xmpp:ping command
Kim Alvefur <zash@zash.se>
parents: 9740
diff changeset
  1128
		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
  1129
	end
9740
a5ae3f4e1a40 mod_admin_telnet: Make xmpp:ping command wait and report the reply
Kim Alvefur <zash@zash.se>
parents: 9739
diff changeset
  1130
	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
  1131
			:tag("ping", {xmlns="urn:xmpp:ping"});
a5ae3f4e1a40 mod_admin_telnet: Make xmpp:ping command wait and report the reply
Kim Alvefur <zash@zash.se>
parents: 9739
diff changeset
  1132
	local ret, err;
a5ae3f4e1a40 mod_admin_telnet: Make xmpp:ping command wait and report the reply
Kim Alvefur <zash@zash.se>
parents: 9739
diff changeset
  1133
	local wait, done = async.waiter();
a5ae3f4e1a40 mod_admin_telnet: Make xmpp:ping command wait and report the reply
Kim Alvefur <zash@zash.se>
parents: 9739
diff changeset
  1134
	module:context(localhost):send_iq(iq, nil, timeout)
a5ae3f4e1a40 mod_admin_telnet: Make xmpp:ping command wait and report the reply
Kim Alvefur <zash@zash.se>
parents: 9739
diff changeset
  1135
		:next(function (ret_) ret = ret_; end,
a5ae3f4e1a40 mod_admin_telnet: Make xmpp:ping command wait and report the reply
Kim Alvefur <zash@zash.se>
parents: 9739
diff changeset
  1136
			function (err_) err = err_; end)
a5ae3f4e1a40 mod_admin_telnet: Make xmpp:ping command wait and report the reply
Kim Alvefur <zash@zash.se>
parents: 9739
diff changeset
  1137
		:finally(done);
a5ae3f4e1a40 mod_admin_telnet: Make xmpp:ping command wait and report the reply
Kim Alvefur <zash@zash.se>
parents: 9739
diff changeset
  1138
	wait();
a5ae3f4e1a40 mod_admin_telnet: Make xmpp:ping command wait and report the reply
Kim Alvefur <zash@zash.se>
parents: 9739
diff changeset
  1139
	if ret then
a5ae3f4e1a40 mod_admin_telnet: Make xmpp:ping command wait and report the reply
Kim Alvefur <zash@zash.se>
parents: 9739
diff changeset
  1140
		return true, "pong from " .. ret.stanza.attr.from;
a5ae3f4e1a40 mod_admin_telnet: Make xmpp:ping command wait and report the reply
Kim Alvefur <zash@zash.se>
parents: 9739
diff changeset
  1141
	else
a5ae3f4e1a40 mod_admin_telnet: Make xmpp:ping command wait and report the reply
Kim Alvefur <zash@zash.se>
parents: 9739
diff changeset
  1142
		return false, tostring(err);
a5ae3f4e1a40 mod_admin_telnet: Make xmpp:ping command wait and report the reply
Kim Alvefur <zash@zash.se>
parents: 9739
diff changeset
  1143
	end
5011
83b4d3727b4f mod_admin_telnet: Add xmpp:ping(from, to), useful for initiating s2s connections
Kim Alvefur <zash@zash.se>
parents: 5007
diff changeset
  1144
end
83b4d3727b4f mod_admin_telnet: Add xmpp:ping(from, to), useful for initiating s2s connections
Kim Alvefur <zash@zash.se>
parents: 5007
diff changeset
  1145
5567
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1146
def_env.dns = {};
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1147
local adns = require"net.adns";
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1148
local dns = require"net.dns";
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1149
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1150
function def_env.dns:lookup(name, typ, class)
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1151
	local ret = "Query sent";
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1152
	local print = self.session.print;
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1153
	local function handler(...)
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1154
		ret = "Got response";
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1155
		print(...);
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1156
	end
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1157
	adns.lookup(handler, name, typ, class);
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1158
	return true, ret;
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1159
end
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1160
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1161
function def_env.dns:addnameserver(...)
6311
f44876548487 mod_admin_telnet: Fix dns:(add,set)nameservers()
Kim Alvefur <zash@zash.se>
parents: 6064
diff changeset
  1162
	dns._resolver:addnameserver(...)
5567
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1163
	return true
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1164
end
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1165
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1166
function def_env.dns:setnameserver(...)
6311
f44876548487 mod_admin_telnet: Fix dns:(add,set)nameservers()
Kim Alvefur <zash@zash.se>
parents: 6064
diff changeset
  1167
	dns._resolver:setnameserver(...)
5567
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1168
	return true
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1169
end
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1170
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1171
function def_env.dns:purge()
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1172
	dns.purge()
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1173
	return true
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1174
end
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1175
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1176
function def_env.dns:cache()
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1177
	return true, "Cache:\n"..tostring(dns.cache())
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1178
end
c4ab25b35a55 mod_admin_telnet: Add some DNS commands.
Kim Alvefur <zash@zash.se>
parents: 5520
diff changeset
  1179
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
  1180
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
  1181
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
  1182
function def_env.http:list()
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
  1183
	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
  1184
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
  1185
	for host in pairs(prosody.hosts) do
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
  1186
		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
  1187
		if #http_apps > 0 then
7980
01d6298de991 plugins/various: Use type-specific config API
Kim Alvefur <zash@zash.se>
parents: 7914
diff changeset
  1188
			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
  1189
			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
  1190
			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
  1191
				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
  1192
				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
  1193
			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
  1194
			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
  1195
		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
  1196
	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
  1197
7980
01d6298de991 plugins/various: Use type-specific config API
Kim Alvefur <zash@zash.se>
parents: 7914
diff changeset
  1198
	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
  1199
	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
  1200
		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
  1201
	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
  1202
		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
  1203
	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
  1204
	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
  1205
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
  1206
8924
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1207
def_env.debug = {};
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1208
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1209
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
  1210
	helpers.log_host_events(host);
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1211
	return true;
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1212
end
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1213
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1214
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
  1215
	local events_obj;
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1216
	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
  1217
		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
  1218
			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
  1219
		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
  1220
			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
  1221
		else
6780049be177 mod_admin_telnet: Allow viewing HTTP event listeners via debug:events('http')
Matthew Wild <mwild1@gmail.com>
parents: 9414
diff changeset
  1222
			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
  1223
		end
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1224
	else
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1225
		events_obj = prosody.events;
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1226
	end
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1227
	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
  1228
end
1c2925376315 mod_admin_telnet: Add debug:events() and debug:logevents()
Matthew Wild <mwild1@gmail.com>
parents: 8593
diff changeset
  1229
9407
f40b0cd41a87 mod_admin_telnet: Remove or rename various unused arguments and variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9406
diff changeset
  1230
function def_env.debug:timers()
9012
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1231
	local socket = require "socket";
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1232
	local print = self.session.print;
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1233
	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
  1234
	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
  1235
	if h then
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1236
		print("-- util.timer");
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1237
		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
  1238
			if not params[id] then
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1239
				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
  1240
			elseif not params[id].callback then
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1241
				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
  1242
			else
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1243
				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
  1244
			end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1245
		end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1246
	end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1247
	if server.event_base then
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1248
		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
  1249
		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
  1250
			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
  1251
				count = count + 1;
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1252
			end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1253
		end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1254
		print(count .. " libevent callbacks");
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1255
	end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1256
	if h then
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1257
		local next_time = h:peek();
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1258
		if next_time then
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1259
			return true, os.date("Next event at %F %T (in %%.6fs)", next_time):format(next_time - socket.gettime());
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1260
		end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1261
	end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1262
	return true;
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1263
end
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1264
4c745d42c974 mod_admin_telnet: Rename timer:info() -> debug:timers()
Matthew Wild <mwild1@gmail.com>
parents: 8967
diff changeset
  1265
-- 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
  1266
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
  1267
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
  1268
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
  1269
	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
  1270
		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
  1271
	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
  1272
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
  1273
8967
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1274
def_env.stats = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1275
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1276
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
  1277
	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
  1278
	--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
  1279
	if type == "duration" then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1280
		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
  1281
			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
  1282
		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
  1283
			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
  1284
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1285
		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
  1286
	elseif type == "size" then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1287
		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
  1288
			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
  1289
		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
  1290
			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
  1291
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1292
		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
  1293
	elseif type == "rate" then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1294
		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
  1295
			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
  1296
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1297
		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
  1298
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1299
	return tostring(value);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1300
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1301
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1302
local stats_methods = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1303
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
  1304
	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
  1305
		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
  1306
		if data then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1307
			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
  1308
			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
  1309
			local new_data = {
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1310
				min = lower;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1311
				max = upper;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1312
				samples = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1313
				sample_count = 0;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1314
				count = data.count;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1315
				units = data.units;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1316
			};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1317
			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
  1318
			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
  1319
				if v > upper then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1320
					break;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1321
				elseif v>=lower then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1322
					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
  1323
					sum = sum + v;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1324
				end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1325
			end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1326
			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
  1327
			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
  1328
			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
  1329
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1330
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1331
	return self;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1332
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1333
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1334
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
  1335
	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
  1336
	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
  1337
	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
  1338
		-- Strip outliers
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1339
		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
  1340
		if data then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1341
			local new_data = {
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1342
				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
  1343
				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
  1344
				samples = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1345
				sample_count = 0;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1346
				count = data.count;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1347
				units = data.units;
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 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
  1350
			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
  1351
				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
  1352
					break;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1353
				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
  1354
					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
  1355
					sum = sum + v;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1356
				end
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
			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
  1359
			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
  1360
			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
  1361
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1362
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1363
	return self;
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
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1366
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
  1367
	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
  1368
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1369
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1370
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
  1371
	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
  1372
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1373
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1374
function stats_methods:summary()
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1375
	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
  1376
	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
  1377
		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
  1378
		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
  1379
			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
  1380
				data.count,
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1381
				data.sample_count
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1382
			));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1383
			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
  1384
				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
  1385
				format_stat(type, value),
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1386
				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
  1387
			));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1388
			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
  1389
				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
  1390
				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
  1391
				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
  1392
			));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1393
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1394
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1395
	return self;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1396
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1397
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1398
function stats_methods:cfgraph()
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1399
	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
  1400
		local name, type, value, data = unpack(stat_info, 1, 4);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1401
		local function print(s)
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1402
			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
  1403
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1404
9414
62c876e333e4 mod_admin_telnet: Guard against missing table field
Kim Alvefur <zash@zash.se>
parents: 9413
diff changeset
  1405
		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
  1406
			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
  1407
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1408
			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
  1409
			local eighth_chars = "   ▁▂▃▄▅▆▇█";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1410
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1411
			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
  1412
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1413
			if range > 0 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1414
				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
  1415
				local histogram = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1416
				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
  1417
					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
  1418
				end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1419
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1420
				print("");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1421
				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
  1422
				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
  1423
					local row_chars = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1424
					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
  1425
					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
  1426
						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
  1427
						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
  1428
							min_eighths = char_eighths;
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
						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
  1431
							max_eighths = char_eighths;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1432
						end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1433
						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
  1434
							row_chars[i] = "-";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1435
						else
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1436
							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
  1437
							row_chars[i] = char;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1438
						end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1439
					end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1440
					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
  1441
				end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1442
				print(("\\    "):rep(11));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1443
				local x_labels = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1444
				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
  1445
					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
  1446
					if #s > 4 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1447
						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
  1448
					end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1449
					x_labels[i] = s;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1450
				end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1451
				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
  1452
				local units = "%";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1453
				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
  1454
				print((" "):rep(margin)..units);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1455
			else
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1456
				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
  1457
			end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1458
			print("");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1459
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1460
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1461
	return self;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1462
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1463
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1464
function stats_methods:histogram()
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1465
	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
  1466
		local name, type, value, data = unpack(stat_info, 1, 4);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1467
		local function print(s)
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1468
			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
  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
		if not data then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1472
			print("[no data]");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1473
			return self;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1474
		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
  1475
			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
  1476
			return self;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1477
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1478
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1479
		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
  1480
		local eighth_chars = "   ▁▂▃▄▅▆▇█";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1481
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1482
		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
  1483
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1484
		if range > 0 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1485
			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
  1486
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1487
			local histogram = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1488
			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
  1489
				histogram[i] = 0;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1490
			end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1491
			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
  1492
			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
  1493
				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
  1494
				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
  1495
				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
  1496
					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
  1497
				end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1498
			end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1499
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1500
			print("");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1501
			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
  1502
			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
  1503
				local row_chars = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1504
				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
  1505
				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
  1506
					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
  1507
					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
  1508
						min_eighths = char_eighths;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1509
					end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1510
					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
  1511
						max_eighths = char_eighths;
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
					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
  1514
						row_chars[i] = "-";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1515
					else
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1516
						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
  1517
						row_chars[i] = char;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1518
					end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1519
				end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1520
				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
  1521
			end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1522
			print(("\\    "):rep(11));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1523
			local x_labels = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1524
			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
  1525
				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
  1526
				if #s > 4 then
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1527
					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
  1528
				end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1529
				x_labels[i] = s;
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(" "..table.concat(x_labels, " "));
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1532
			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
  1533
			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
  1534
			print((" "):rep(margin)..units);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1535
		else
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1536
			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
  1537
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1538
		print("");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1539
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1540
	return self;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1541
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1542
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1543
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
  1544
	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
  1545
	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
  1546
		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
  1547
			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
  1548
			print("");
9407
f40b0cd41a87 mod_admin_telnet: Remove or rename various unused arguments and variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9406
diff changeset
  1549
			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
  1550
				print(v);
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1551
			end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1552
			print("");
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1553
		else
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1554
			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
  1555
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1556
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1557
	return #stats.." statistics displayed";
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1558
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1559
9413
7355b2d0067c mod_admin_telnet: Create metatable only once
Kim Alvefur <zash@zash.se>
parents: 9412
diff changeset
  1560
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
  1561
local function new_stats_context(self)
9413
7355b2d0067c mod_admin_telnet: Create metatable only once
Kim Alvefur <zash@zash.se>
parents: 9412
diff changeset
  1562
	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
  1563
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1564
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1565
function def_env.stats:show(filter)
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1566
	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
  1567
	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
  1568
	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
  1569
	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
  1570
		available = available + 1;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1571
		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
  1572
			displayed = displayed + 1;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1573
			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
  1574
			table.insert(displayed_stats, {
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1575
				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
  1576
				output = {};
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1577
			});
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1578
		end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1579
	end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1580
	return displayed_stats;
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1581
end
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1582
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1583
76780f37028d mod_admin_telnet: Add some experimental commands for inspecting stats
Matthew Wild <mwild1@gmail.com>
parents: 8925
diff changeset
  1584
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1585
-------------
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1586
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1587
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
  1588
	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
  1589
	if option == "full" or option == "graphic" then
5026
c86a14414922 mod_admin_telnet: Fix broken indentation
Matthew Wild <mwild1@gmail.com>
parents: 5025
diff changeset
  1590
		session.print [[
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
  1591
                   ____                \   /     _
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
  1592
                    |  _ \ _ __ ___  ___  _-_   __| |_   _
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1593
                    | |_) | '__/ _ \/ __|/ _ \ / _` | | | |
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1594
                    |  __/| | | (_) \__ \ |_| | (_| | |_| |
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1595
                    |_|   |_|  \___/|___/\___/ \__,_|\__, |
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5770
diff changeset
  1596
                    A study in simplicity            |___/
736
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1597
7cbae2d16fd6 mod_console: Make global
Matthew Wild <mwild1@gmail.com>
parents: 712
diff changeset
  1598
]]
5026
c86a14414922 mod_admin_telnet: Fix broken indentation
Matthew Wild <mwild1@gmail.com>
parents: 5025
diff changeset
  1599
	end
7070
4c0ec9bd5168 mod_admin_telnet: Remove compat warning about 'console_banner' as a function
Kim Alvefur <zash@zash.se>
parents: 7034
diff changeset
  1600
	if option == "short" or option == "full" then
5026
c86a14414922 mod_admin_telnet: Fix broken indentation
Matthew Wild <mwild1@gmail.com>
parents: 5025
diff changeset
  1601
	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
  1602
	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
  1603
	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
  1604
	end
7070
4c0ec9bd5168 mod_admin_telnet: Remove compat warning about 'console_banner' as a function
Kim Alvefur <zash@zash.se>
parents: 7034
diff changeset
  1605
	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
  1606
		session.print(option);
5026
c86a14414922 mod_admin_telnet: Fix broken indentation
Matthew Wild <mwild1@gmail.com>
parents: 5025
diff changeset
  1607
	end
1483
efd19cdda6ca mod_console: Allow customisation/suppression of the banner
Matthew Wild <mwild1@gmail.com>
parents: 1433
diff changeset
  1608
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
  1609
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
  1610
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
  1611
	name = "console";
4550
1c41e4a846a2 mod_admin_telnet: Port to portmanager
Matthew Wild <mwild1@gmail.com>
parents: 4540
diff changeset
  1612
	listener = console_listener;
1c41e4a846a2 mod_admin_telnet: Port to portmanager
Matthew Wild <mwild1@gmail.com>
parents: 4540
diff changeset
  1613
	default_port = 5582;
4571
32d532b95dc7 mod_admin_telnet: make service private.
Marco Cirillo <maranda@lightwitch.org>
parents: 4550
diff changeset
  1614
	private = true;
4550
1c41e4a846a2 mod_admin_telnet: Port to portmanager
Matthew Wild <mwild1@gmail.com>
parents: 4540
diff changeset
  1615
});