Tue, 03 Aug 2010 10:58:15 +0100
sessionmanager: Remove dependency on eventmanager
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 |
519
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
461
diff
changeset
|
4 | -- |
758 | 5 | -- This project is MIT/X11 licensed. Please see the |
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 | -- |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
461
diff
changeset
|
8 | |
736 | 9 | module.host = "*"; |
519
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
461
diff
changeset
|
10 | |
1342
947d94e3619f
mod_console: Redirect print() to console session when executing commands in global environment
Matthew Wild <mwild1@gmail.com>
parents:
1341
diff
changeset
|
11 | 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
|
12 | |
1315
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
13 | local prosody = _G.prosody; |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
14 | local hosts = prosody.hosts; |
736 | 15 | local connlisteners_register = require "net.connlisteners".register; |
16 | ||
1575
ca39f78de3c8
mod_console: Set default_interface to 127.0.0.1
Matthew Wild <mwild1@gmail.com>
parents:
1523
diff
changeset
|
17 | local console_listener = { default_port = 5582; default_mode = "*l"; default_interface = "127.0.0.1" }; |
736 | 18 | |
1315
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
19 | require "util.iterators"; |
1491
694a0a00e1a5
mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents:
1483
diff
changeset
|
20 | local jid_bare = require "util.jid".bare; |
1315
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
21 | local set, array = require "util.set", require "util.array"; |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
22 | |
736 | 23 | local commands = {}; |
24 | local def_env = {}; | |
25 | local default_env_mt = { __index = def_env }; | |
26 | ||
1506
2c8aa16b4f64
mod_console: Expose commands and environment table
Matthew Wild <mwild1@gmail.com>
parents:
1503
diff
changeset
|
27 | prosody.console = { commands = commands, env = def_env }; |
2c8aa16b4f64
mod_console: Expose commands and environment table
Matthew Wild <mwild1@gmail.com>
parents:
1503
diff
changeset
|
28 | |
1342
947d94e3619f
mod_console: Redirect print() to console session when executing commands in global environment
Matthew Wild <mwild1@gmail.com>
parents:
1341
diff
changeset
|
29 | local function redirect_output(_G, session) |
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
|
30 | local env = setmetatable({ print = session.print }, { __index = function (t, k) return rawget(_G, k); end, __newindex = function (t, k, v) rawset(_G, k, v); 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
|
31 | env.dofile = function(name) |
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
|
32 | local f, err = loadfile(name); |
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
|
33 | if not f then return f, err; 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
|
34 | return setfenv(f, env)(); |
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
|
35 | 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
|
36 | 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
|
37 | end |
947d94e3619f
mod_console: Redirect print() to console session when executing commands in global environment
Matthew Wild <mwild1@gmail.com>
parents:
1341
diff
changeset
|
38 | |
736 | 39 | console = {}; |
40 | ||
41 | function console:new_session(conn) | |
2145
daeb6ebf304c
mod_console: Update for new net.server API
Matthew Wild <mwild1@gmail.com>
parents:
2087
diff
changeset
|
42 | local w = function(s) conn:write(s:gsub("\n", "\r\n")); end; |
736 | 43 | local session = { conn = conn; |
44 | 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
|
45 | print = function (...) |
33c81ee280e3
mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents:
3044
diff
changeset
|
46 | local t = {}; |
33c81ee280e3
mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents:
3044
diff
changeset
|
47 | for i=1,select("#", ...) do |
33c81ee280e3
mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents:
3044
diff
changeset
|
48 | t[i] = tostring(select(i, ...)); |
33c81ee280e3
mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents:
3044
diff
changeset
|
49 | end |
33c81ee280e3
mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents:
3044
diff
changeset
|
50 | 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
|
51 | 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
|
52 | disconnect = function () conn:close(); end; |
736 | 53 | }; |
54 | session.env = setmetatable({}, default_env_mt); | |
55 | ||
56 | -- Load up environment with helper objects | |
57 | for name, t in pairs(def_env) do | |
58 | if type(t) == "table" then | |
59 | session.env[name] = setmetatable({ session = session }, { __index = t }); | |
60 | end | |
61 | end | |
62 | ||
63 | return session; | |
64 | end | |
65 | ||
66 | local sessions = {}; | |
67 | ||
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
|
68 | 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
|
69 | -- 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
|
70 | 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
|
71 | 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
|
72 | 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
|
73 | session.send(string.char(0)); |
736 | 74 | end |
75 | ||
2145
daeb6ebf304c
mod_console: Update for new net.server API
Matthew Wild <mwild1@gmail.com>
parents:
2087
diff
changeset
|
76 | function console_listener.onincoming(conn, data) |
736 | 77 | 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
|
78 | |
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
|
79 | -- Handle data |
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
|
80 | (function(session, data) |
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
|
81 | local useglobalenv; |
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
|
82 | |
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
|
83 | if data:match("^>") then |
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
|
84 | data = data:gsub("^>", ""); |
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
|
85 | useglobalenv = true; |
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
|
86 | elseif data == "\004" then |
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
|
87 | commands["bye"](session, data); |
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
|
88 | return; |
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
|
89 | else |
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
|
90 | local command = data:lower(); |
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
|
91 | command = data:match("^%w+") or data:match("%p"); |
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
|
92 | if commands[command] then |
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
|
93 | commands[command](session, data); |
1502
0f895c06e03f
mod_console: Check for commands when not executing in the global environment
Matthew Wild <mwild1@gmail.com>
parents:
1496
diff
changeset
|
94 | return; |
0f895c06e03f
mod_console: Check for commands when not executing in the global environment
Matthew Wild <mwild1@gmail.com>
parents:
1496
diff
changeset
|
95 | end |
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
|
96 | end |
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
|
97 | |
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
|
98 | session.env._ = data; |
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
|
99 | |
3028 | 100 | local chunkname = "=console"; |
101 | local chunk, err = loadstring("return "..data, chunkname); | |
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
|
102 | if not chunk then |
3028 | 103 | chunk, err = loadstring(data, chunkname); |
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
|
104 | if not chunk then |
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
|
105 | err = err:gsub("^%[string .-%]:%d+: ", ""); |
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
|
106 | err = err:gsub("^:%d+: ", ""); |
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
|
107 | err = err:gsub("'<eof>'", "the end of the line"); |
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
|
108 | session.print("Sorry, I couldn't understand that... "..err); |
736 | 109 | return; |
110 | end | |
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
|
111 | end |
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
|
112 | |
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
|
113 | setfenv(chunk, (useglobalenv and redirect_output(_G, session)) or session.env or nil); |
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
|
114 | |
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
|
115 | local ranok, taskok, message = pcall(chunk); |
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
|
116 | |
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
|
117 | if not (ranok or message or useglobalenv) and commands[data:lower()] then |
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
|
118 | commands[data:lower()](session, data); |
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
|
119 | return; |
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
|
120 | end |
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
|
121 | |
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
|
122 | if not ranok then |
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
|
123 | session.print("Fatal error while running command, it did not complete"); |
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
|
124 | session.print("Error: "..taskok); |
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
|
125 | return; |
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
|
126 | end |
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
|
127 | |
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
|
128 | if not message then |
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
|
129 | session.print("Result: "..tostring(taskok)); |
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
|
130 | return; |
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
|
131 | elseif (not taskok) and message then |
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
|
132 | session.print("Command completed with a problem"); |
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
|
133 | session.print("Message: "..tostring(message)); |
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
|
134 | return; |
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
|
135 | end |
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
|
136 | |
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
|
137 | session.print("OK: "..tostring(message)); |
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
|
138 | end)(session, data); |
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
|
139 | |
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
|
140 | session.send(string.char(0)); |
736 | 141 | end |
142 | ||
2145
daeb6ebf304c
mod_console: Update for new net.server API
Matthew Wild <mwild1@gmail.com>
parents:
2087
diff
changeset
|
143 | function console_listener.ondisconnect(conn, err) |
2055
a43aea9b0bd1
mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents:
2010
diff
changeset
|
144 | local session = sessions[conn]; |
a43aea9b0bd1
mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents:
2010
diff
changeset
|
145 | if session then |
a43aea9b0bd1
mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents:
2010
diff
changeset
|
146 | session.disconnect(); |
a43aea9b0bd1
mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents:
2010
diff
changeset
|
147 | sessions[conn] = nil; |
a43aea9b0bd1
mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents:
2010
diff
changeset
|
148 | end |
736 | 149 | end |
150 | ||
151 | connlisteners_register('console', console_listener); | |
152 | ||
153 | -- Console commands -- | |
154 | -- These are simple commands, not valid standalone in Lua | |
155 | ||
156 | function commands.bye(session) | |
157 | session.print("See you! :)"); | |
158 | session.disconnect(); | |
159 | end | |
1503
5970e06d9335
mod_console: Add quit and exit as aliases for 'bye' command
Matthew Wild <mwild1@gmail.com>
parents:
1502
diff
changeset
|
160 | commands.quit, commands.exit = commands.bye, commands.bye; |
736 | 161 | |
162 | commands["!"] = function (session, data) | |
163 | if data:match("^!!") then | |
164 | session.print("!> "..session.env._); | |
2512
d04b0eeeb954
mod_console: Update !! shortcut for new connection API
Matthew Wild <mwild1@gmail.com>
parents:
2296
diff
changeset
|
165 | return console_listener.onincoming(session.conn, session.env._); |
736 | 166 | end |
167 | local old, new = data:match("^!(.-[^\\])!(.-)!$"); | |
168 | if old and new then | |
169 | local ok, res = pcall(string.gsub, session.env._, old, new); | |
170 | if not ok then | |
171 | session.print(res) | |
172 | return; | |
173 | end | |
174 | session.print("!> "..res); | |
2512
d04b0eeeb954
mod_console: Update !! shortcut for new connection API
Matthew Wild <mwild1@gmail.com>
parents:
2296
diff
changeset
|
175 | return console_listener.onincoming(session.conn, res); |
736 | 176 | end |
177 | session.print("Sorry, not sure what you want"); | |
178 | end | |
179 | ||
1616
80ea744f2643
mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents:
1575
diff
changeset
|
180 | 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
|
181 | local print = session.print; |
80ea744f2643
mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents:
1575
diff
changeset
|
182 | 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
|
183 | if not section then |
80ea744f2643
mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents:
1575
diff
changeset
|
184 | 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
|
185 | 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
|
186 | print [[]] |
80ea744f2643
mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents:
1575
diff
changeset
|
187 | 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
|
188 | 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
|
189 | print [[module - Commands to load/reload/unload modules/plugins]] |
80ea744f2643
mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents:
1575
diff
changeset
|
190 | print [[server - Uptime, version, shutting down, etc.]] |
2009
3f9cce29c57d
mod_console: Added help text for config:reload().
Waqas Hussain <waqas20@gmail.com>
parents:
2007
diff
changeset
|
191 | 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
|
192 | 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
|
193 | elseif section == "c2s" then |
80ea744f2643
mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents:
1575
diff
changeset
|
194 | 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
|
195 | 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
|
196 | print [[c2s:show_secure() - Show all encrypted client connections]] |
80ea744f2643
mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents:
1575
diff
changeset
|
197 | print [[c2s:close(jid) - Close all sessions for the specified JID]] |
80ea744f2643
mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents:
1575
diff
changeset
|
198 | elseif section == "s2s" then |
80ea744f2643
mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents:
1575
diff
changeset
|
199 | print [[s2s:show(domain) - Show all s2s connections for the given domain (or all if no domain given)]] |
80ea744f2643
mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents:
1575
diff
changeset
|
200 | print [[s2s:close(from, to) - Close a connection from one domain to another]] |
80ea744f2643
mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents:
1575
diff
changeset
|
201 | elseif section == "module" then |
80ea744f2643
mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents:
1575
diff
changeset
|
202 | 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
|
203 | 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
|
204 | 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
|
205 | print [[module:list(host) - List the modules loaded on the specified host]] |
1616
80ea744f2643
mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents:
1575
diff
changeset
|
206 | elseif section == "server" then |
80ea744f2643
mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents:
1575
diff
changeset
|
207 | 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
|
208 | print [[server:uptime() - Show how long the server has been running]] |
2870
471c3acffb2a
mod_console: Uncomment the help for server:shutdown() - thanks darkrain
Matthew Wild <mwild1@gmail.com>
parents:
2087
diff
changeset
|
209 | print [[server:shutdown(reason) - Shut down the server, with an optional reason to be broadcast to all connections]] |
2009
3f9cce29c57d
mod_console: Added help text for config:reload().
Waqas Hussain <waqas20@gmail.com>
parents:
2007
diff
changeset
|
210 | elseif section == "config" then |
3f9cce29c57d
mod_console: Added help text for config:reload().
Waqas Hussain <waqas20@gmail.com>
parents:
2007
diff
changeset
|
211 | 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
|
212 | elseif section == "console" then |
80ea744f2643
mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents:
1575
diff
changeset
|
213 | 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
|
214 | 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
|
215 | 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
|
216 | 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
|
217 | print [[]] |
80ea744f2643
mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents:
1575
diff
changeset
|
218 | 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
|
219 | 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
|
220 | 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
|
221 | print [[]] |
80ea744f2643
mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents:
1575
diff
changeset
|
222 | 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
|
223 | 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
|
224 | 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
|
225 | end |
80ea744f2643
mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents:
1575
diff
changeset
|
226 | print [[]] |
80ea744f2643
mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents:
1575
diff
changeset
|
227 | end |
80ea744f2643
mod_console: Finally add in the missing 'help' command \o/
Matthew Wild <mwild1@gmail.com>
parents:
1575
diff
changeset
|
228 | |
736 | 229 | -- Session environment -- |
230 | -- Anything in def_env will be accessible within the session as a global variable | |
231 | ||
232 | def_env.server = {}; | |
1558
e15917530285
mod_console: Add config:reload() command
Matthew Wild <mwild1@gmail.com>
parents:
1556
diff
changeset
|
233 | |
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
|
234 | 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
|
235 | prosody.unlock_globals(); |
736 | 236 | dofile "prosody" |
1316
28ae044f1aaf
mod_console: Some "improvements" to the useless server:reload() command :)
Matthew Wild <mwild1@gmail.com>
parents:
1315
diff
changeset
|
237 | prosody = _G.prosody; |
736 | 238 | return true, "Server reloaded"; |
239 | end | |
240 | ||
1496
4fa337035f46
mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents:
1491
diff
changeset
|
241 | function def_env.server:version() |
4fa337035f46
mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents:
1491
diff
changeset
|
242 | 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
|
243 | end |
4fa337035f46
mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents:
1491
diff
changeset
|
244 | |
4fa337035f46
mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents:
1491
diff
changeset
|
245 | function def_env.server:uptime() |
4fa337035f46
mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents:
1491
diff
changeset
|
246 | 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
|
247 | local seconds = t%60; |
4fa337035f46
mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents:
1491
diff
changeset
|
248 | t = (t - seconds)/60; |
4fa337035f46
mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents:
1491
diff
changeset
|
249 | local minutes = t%60; |
4fa337035f46
mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents:
1491
diff
changeset
|
250 | t = (t - minutes)/60; |
4fa337035f46
mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents:
1491
diff
changeset
|
251 | local hours = t%24; |
4fa337035f46
mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents:
1491
diff
changeset
|
252 | t = (t - hours)/24; |
4fa337035f46
mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents:
1491
diff
changeset
|
253 | local days = t; |
4fa337035f46
mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents:
1491
diff
changeset
|
254 | return true, string.format("This server has been running for %d day%s, %d hour%s and %d minute%s (since %s)", |
4fa337035f46
mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents:
1491
diff
changeset
|
255 | days, (days ~= 1 and "s") or "", hours, (hours ~= 1 and "s") or "", |
4fa337035f46
mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents:
1491
diff
changeset
|
256 | 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
|
257 | end |
4fa337035f46
mod_console: server:version() and server:uptime() commands
Matthew Wild <mwild1@gmail.com>
parents:
1491
diff
changeset
|
258 | |
1559
831649bb1922
mod_console: Add server:shutdown() command
Matthew Wild <mwild1@gmail.com>
parents:
1558
diff
changeset
|
259 | function def_env.server:shutdown(reason) |
831649bb1922
mod_console: Add server:shutdown() command
Matthew Wild <mwild1@gmail.com>
parents:
1558
diff
changeset
|
260 | prosody.shutdown(reason); |
831649bb1922
mod_console: Add server:shutdown() command
Matthew Wild <mwild1@gmail.com>
parents:
1558
diff
changeset
|
261 | return true, "Shutdown initiated"; |
831649bb1922
mod_console: Add server:shutdown() command
Matthew Wild <mwild1@gmail.com>
parents:
1558
diff
changeset
|
262 | end |
831649bb1922
mod_console: Add server:shutdown() command
Matthew Wild <mwild1@gmail.com>
parents:
1558
diff
changeset
|
263 | |
736 | 264 | def_env.module = {}; |
1315
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
265 | |
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
|
266 | 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
|
267 | if type(hosts) == "table" then |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
268 | if hosts[1] then |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
269 | return set.new(hosts); |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
270 | elseif hosts._items then |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
271 | return hosts; |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
272 | end |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
273 | elseif type(hosts) == "string" then |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
274 | return set.new { hosts }; |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
275 | elseif hosts == nil then |
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
|
276 | local mm = require "modulemanager"; |
1315
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
277 | return set.new(array.collect(keys(prosody.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
|
278 | / function (host) return prosody.hosts[host].type == "local" or module and mm.is_loaded(host, module); end; |
1315
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
279 | end |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
280 | end |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
281 | |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
282 | function def_env.module:load(name, hosts, config) |
736 | 283 | local mm = require "modulemanager"; |
1315
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
284 | |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
285 | hosts = get_hosts_set(hosts); |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
286 | |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
287 | -- Load the module for each host |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
288 | 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
|
289 | for host in hosts do |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
290 | if (not mm.is_loaded(host, name)) then |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
291 | ok, err = mm.load(host, name, config); |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
292 | if not ok then |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
293 | ok = false; |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
294 | 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
|
295 | else |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
296 | count = count + 1; |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
297 | self.session.print("Loaded for "..host); |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
298 | end |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
299 | end |
736 | 300 | end |
1315
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
301 | |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
302 | return ok, (ok and "Module loaded onto "..count.." host"..(count ~= 1 and "s" or "")) or ("Last error: "..tostring(err)); |
736 | 303 | end |
304 | ||
1315
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
305 | function def_env.module:unload(name, hosts) |
712
56410c0cd846
mod_console: Added module:reload
Waqas Hussain <waqas20@gmail.com>
parents:
669
diff
changeset
|
306 | local mm = require "modulemanager"; |
1315
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
307 | |
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
|
308 | 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
|
309 | |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
310 | -- 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
|
311 | 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
|
312 | for host in hosts do |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
313 | if mm.is_loaded(host, name) then |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
314 | ok, err = mm.unload(host, name); |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
315 | if not ok then |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
316 | ok = false; |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
317 | 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
|
318 | else |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
319 | count = count + 1; |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
320 | 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
|
321 | end |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
322 | end |
712
56410c0cd846
mod_console: Added module:reload
Waqas Hussain <waqas20@gmail.com>
parents:
669
diff
changeset
|
323 | end |
1315
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
324 | 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
|
325 | end |
56410c0cd846
mod_console: Added module:reload
Waqas Hussain <waqas20@gmail.com>
parents:
669
diff
changeset
|
326 | |
1315
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
327 | function def_env.module:reload(name, hosts) |
712
56410c0cd846
mod_console: Added module:reload
Waqas Hussain <waqas20@gmail.com>
parents:
669
diff
changeset
|
328 | local mm = require "modulemanager"; |
1315
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
329 | |
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
|
330 | 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
|
331 | |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
332 | -- 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
|
333 | 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
|
334 | for host in hosts do |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
335 | if mm.is_loaded(host, name) then |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
336 | ok, err = mm.reload(host, name); |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
337 | if not ok then |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
338 | ok = false; |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
339 | 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
|
340 | else |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
341 | count = count + 1; |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
342 | if ok == nil then |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
343 | ok = true; |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
344 | end |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
345 | 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
|
346 | end |
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
347 | end |
712
56410c0cd846
mod_console: Added module:reload
Waqas Hussain <waqas20@gmail.com>
parents:
669
diff
changeset
|
348 | end |
1315
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
349 | 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
|
350 | end |
56410c0cd846
mod_console: Added module:reload
Waqas Hussain <waqas20@gmail.com>
parents:
669
diff
changeset
|
351 | |
1906
88c61368e669
mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents:
1821
diff
changeset
|
352 | 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
|
353 | 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
|
354 | hosts = array.collect(keys(prosody.hosts)); |
88c61368e669
mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents:
1821
diff
changeset
|
355 | end |
88c61368e669
mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents:
1821
diff
changeset
|
356 | 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
|
357 | 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
|
358 | end |
88c61368e669
mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents:
1821
diff
changeset
|
359 | 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
|
360 | 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
|
361 | end |
88c61368e669
mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents:
1821
diff
changeset
|
362 | |
88c61368e669
mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents:
1821
diff
changeset
|
363 | 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
|
364 | for _, host in ipairs(hosts) do |
88c61368e669
mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents:
1821
diff
changeset
|
365 | print(host..":"); |
2010
1a4f14ea39b6
mod_console: Fixed traceback occuring on using module:list on unknown hosts.
Waqas Hussain <waqas20@gmail.com>
parents:
2009
diff
changeset
|
366 | local modules = array.collect(keys(prosody.hosts[host] and prosody.hosts[host].modules 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
|
367 | 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
|
368 | 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
|
369 | 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
|
370 | else |
1a4f14ea39b6
mod_console: Fixed traceback occuring on using module:list on unknown hosts.
Waqas Hussain <waqas20@gmail.com>
parents:
2009
diff
changeset
|
371 | 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
|
372 | 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
|
373 | else |
88c61368e669
mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents:
1821
diff
changeset
|
374 | for _, name in ipairs(modules) do |
88c61368e669
mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents:
1821
diff
changeset
|
375 | print(" "..name); |
88c61368e669
mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents:
1821
diff
changeset
|
376 | end |
88c61368e669
mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents:
1821
diff
changeset
|
377 | end |
88c61368e669
mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents:
1821
diff
changeset
|
378 | end |
88c61368e669
mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents:
1821
diff
changeset
|
379 | end |
88c61368e669
mod_console: Add module:list() command to show modules loaded on a host
Matthew Wild <mwild1@gmail.com>
parents:
1821
diff
changeset
|
380 | |
736 | 381 | def_env.config = {}; |
382 | function def_env.config:load(filename, format) | |
383 | local config_load = require "core.configmanager".load; | |
384 | local ok, err = config_load(filename, format); | |
385 | if not ok then | |
386 | return false, err or "Unknown error loading config"; | |
387 | end | |
388 | return true, "Config loaded"; | |
389 | end | |
390 | ||
391 | function def_env.config:get(host, section, key) | |
392 | local config_get = require "core.configmanager".get | |
393 | return true, tostring(config_get(host, section, key)); | |
394 | end | |
395 | ||
1558
e15917530285
mod_console: Add config:reload() command
Matthew Wild <mwild1@gmail.com>
parents:
1556
diff
changeset
|
396 | function def_env.config:reload() |
e15917530285
mod_console: Add config:reload() command
Matthew Wild <mwild1@gmail.com>
parents:
1556
diff
changeset
|
397 | local ok, err = prosody.reload_config(); |
e15917530285
mod_console: Add config:reload() command
Matthew Wild <mwild1@gmail.com>
parents:
1556
diff
changeset
|
398 | 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
|
399 | end |
e15917530285
mod_console: Add config:reload() command
Matthew Wild <mwild1@gmail.com>
parents:
1556
diff
changeset
|
400 | |
736 | 401 | def_env.hosts = {}; |
402 | function def_env.hosts:list() | |
403 | for host, host_session in pairs(hosts) do | |
404 | self.session.print(host); | |
405 | end | |
406 | return true, "Done"; | |
407 | end | |
408 | ||
409 | function def_env.hosts:add(name) | |
410 | end | |
411 | ||
1241
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
412 | def_env.c2s = {}; |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
413 | |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
414 | local function show_c2s(callback) |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
415 | for hostname, host in pairs(hosts) do |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
416 | for username, user in pairs(host.sessions or {}) do |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
417 | for resource, session in pairs(user.sessions or {}) do |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
418 | local jid = username.."@"..hostname.."/"..resource; |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
419 | callback(jid, session); |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
420 | end |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
421 | end |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
422 | end |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
423 | end |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
424 | |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
425 | function def_env.c2s:show(match_jid) |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
426 | local print, count = self.session.print, 0; |
1763
9e4ff3b66ed1
mod_console: c2s:show(): Group listed clients by host
Matthew Wild <mwild1@gmail.com>
parents:
1623
diff
changeset
|
427 | local curr_host; |
1798
4c8f3fa9d926
mod_console: Show status and priority of clients
Matthew Wild <mwild1@gmail.com>
parents:
1616
diff
changeset
|
428 | 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
|
429 | 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
|
430 | curr_host = session.host; |
9e4ff3b66ed1
mod_console: c2s:show(): Group listed clients by host
Matthew Wild <mwild1@gmail.com>
parents:
1623
diff
changeset
|
431 | print(curr_host); |
9e4ff3b66ed1
mod_console: c2s:show(): Group listed clients by host
Matthew Wild <mwild1@gmail.com>
parents:
1623
diff
changeset
|
432 | end |
1241
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
433 | 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
|
434 | count = count + 1; |
1798
4c8f3fa9d926
mod_console: Show status and priority of clients
Matthew Wild <mwild1@gmail.com>
parents:
1616
diff
changeset
|
435 | local status, priority = "unavailable", tostring(session.priority or "-"); |
4c8f3fa9d926
mod_console: Show status and priority of clients
Matthew Wild <mwild1@gmail.com>
parents:
1616
diff
changeset
|
436 | if session.presence then |
4c8f3fa9d926
mod_console: Show status and priority of clients
Matthew Wild <mwild1@gmail.com>
parents:
1616
diff
changeset
|
437 | status = session.presence:child_with_name("show"); |
4c8f3fa9d926
mod_console: Show status and priority of clients
Matthew Wild <mwild1@gmail.com>
parents:
1616
diff
changeset
|
438 | if status then |
4c8f3fa9d926
mod_console: Show status and priority of clients
Matthew Wild <mwild1@gmail.com>
parents:
1616
diff
changeset
|
439 | status = status:get_text() or "[invalid!]"; |
4c8f3fa9d926
mod_console: Show status and priority of clients
Matthew Wild <mwild1@gmail.com>
parents:
1616
diff
changeset
|
440 | else |
4c8f3fa9d926
mod_console: Show status and priority of clients
Matthew Wild <mwild1@gmail.com>
parents:
1616
diff
changeset
|
441 | status = "available"; |
4c8f3fa9d926
mod_console: Show status and priority of clients
Matthew Wild <mwild1@gmail.com>
parents:
1616
diff
changeset
|
442 | end |
4c8f3fa9d926
mod_console: Show status and priority of clients
Matthew Wild <mwild1@gmail.com>
parents:
1616
diff
changeset
|
443 | end |
1763
9e4ff3b66ed1
mod_console: c2s:show(): Group listed clients by host
Matthew Wild <mwild1@gmail.com>
parents:
1623
diff
changeset
|
444 | print(" "..jid.." - "..status.."("..priority..")"); |
1241
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
445 | end |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
446 | end); |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
447 | 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
|
448 | end |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
449 | |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
450 | 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
|
451 | 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
|
452 | 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
|
453 | 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
|
454 | count = count + 1; |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
455 | print(jid); |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
456 | end |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
457 | end); |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
458 | 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
|
459 | end |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
460 | |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
461 | 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
|
462 | 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
|
463 | 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
|
464 | 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
|
465 | count = count + 1; |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
466 | print(jid); |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
467 | end |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
468 | end); |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
469 | 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
|
470 | end |
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
471 | |
1491
694a0a00e1a5
mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents:
1483
diff
changeset
|
472 | function def_env.c2s:close(match_jid) |
694a0a00e1a5
mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents:
1483
diff
changeset
|
473 | local print, count = self.session.print, 0; |
694a0a00e1a5
mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents:
1483
diff
changeset
|
474 | show_c2s(function (jid, session) |
694a0a00e1a5
mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents:
1483
diff
changeset
|
475 | 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
|
476 | count = count + 1; |
694a0a00e1a5
mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents:
1483
diff
changeset
|
477 | session:close(); |
694a0a00e1a5
mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents:
1483
diff
changeset
|
478 | end |
694a0a00e1a5
mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents:
1483
diff
changeset
|
479 | end); |
694a0a00e1a5
mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents:
1483
diff
changeset
|
480 | return true, "Total: "..count.." sessions closed"; |
694a0a00e1a5
mod_console: Add c2s:close() command
Matthew Wild <mwild1@gmail.com>
parents:
1483
diff
changeset
|
481 | end |
1241
9c53fb182044
mod_console: c2s:show(), c2s:show_secure(), c2s:show_insecure()
Matthew Wild <mwild1@gmail.com>
parents:
1240
diff
changeset
|
482 | |
1085
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
483 | def_env.s2s = {}; |
1240
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
484 | function def_env.s2s:show(match_jid) |
1085
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
485 | local _print = self.session.print; |
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
486 | local print = self.session.print; |
1322
33d103b0283f
mod_console: Show total incoming/outgoing s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1317
diff
changeset
|
487 | |
33d103b0283f
mod_console: Show total incoming/outgoing s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1317
diff
changeset
|
488 | local count_in, count_out = 0,0; |
33d103b0283f
mod_console: Show total incoming/outgoing s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1317
diff
changeset
|
489 | |
1085
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
490 | for host, host_session in pairs(hosts) do |
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
491 | print = function (...) _print(host); _print(...); print = _print; end |
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
492 | for remotehost, session in pairs(host_session.s2sout) do |
1240
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
493 | if (not match_jid) or remotehost:match(match_jid) or host:match(match_jid) then |
1322
33d103b0283f
mod_console: Show total incoming/outgoing s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1317
diff
changeset
|
494 | count_out = count_out + 1; |
2296
23e84604fb00
mod_console: Show compression status on s2s:show() output.
Tobias Markmann <tm@ayena.de>
parents:
2253
diff
changeset
|
495 | print(" "..host.." -> "..remotehost..(session.secure and " (encrypted)" or "")..(session.compressed and " (compressed)" or "")); |
1240
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
496 | if session.sendq then |
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
497 | print(" There are "..#session.sendq.." queued outgoing stanzas for this connection"); |
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
498 | end |
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
499 | if session.type == "s2sout_unauthed" then |
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
500 | if session.connecting then |
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
501 | print(" Connection not yet established"); |
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
502 | if not session.srv_hosts then |
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
503 | if not session.conn then |
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
504 | print(" We do not yet have a DNS answer for this host's SRV records"); |
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
505 | else |
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
506 | print(" This host has no SRV records, using A record instead"); |
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
507 | end |
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
508 | elseif session.srv_choice then |
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
509 | print(" We are on SRV record "..session.srv_choice.." of "..#session.srv_hosts); |
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
510 | local srv_choice = session.srv_hosts[session.srv_choice]; |
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
511 | 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
|
512 | end |
1240
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
513 | elseif session.notopen then |
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
514 | print(" The <stream> has not yet been opened"); |
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
515 | elseif not session.dialback_key then |
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
516 | print(" Dialback has not been initiated yet"); |
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
517 | elseif session.dialback_key then |
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
518 | 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
|
519 | end |
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
520 | end |
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
521 | end |
1240
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
522 | end |
1924
75e6ba240888
mod_console: Also search piggy-backed, er, multiplexed domains when passing a filter to s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1914
diff
changeset
|
523 | local subhost_filter = function (h) |
75e6ba240888
mod_console: Also search piggy-backed, er, multiplexed domains when passing a filter to s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1914
diff
changeset
|
524 | return (match_jid and h:match(match_jid)); |
75e6ba240888
mod_console: Also search piggy-backed, er, multiplexed domains when passing a filter to s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1914
diff
changeset
|
525 | end |
1085
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
526 | for session in pairs(incoming_s2s) do |
1240
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
527 | if session.to_host == host and ((not match_jid) or host:match(match_jid) |
1924
75e6ba240888
mod_console: Also search piggy-backed, er, multiplexed domains when passing a filter to s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1914
diff
changeset
|
528 | or (session.from_host and session.from_host:match(match_jid)) |
75e6ba240888
mod_console: Also search piggy-backed, er, multiplexed domains when passing a filter to s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1914
diff
changeset
|
529 | -- Pft! is what I say to list comprehensions |
75e6ba240888
mod_console: Also search piggy-backed, er, multiplexed domains when passing a filter to s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1914
diff
changeset
|
530 | or (session.hosts and #array.collect(keys(session.hosts)):filter(subhost_filter)>0)) then |
1322
33d103b0283f
mod_console: Show total incoming/outgoing s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1317
diff
changeset
|
531 | count_in = count_in + 1; |
2296
23e84604fb00
mod_console: Show compression status on s2s:show() output.
Tobias Markmann <tm@ayena.de>
parents:
2253
diff
changeset
|
532 | print(" "..host.." <- "..(session.from_host or "(unknown)")..(session.secure and " (encrypted)" or "")..(session.compressed and " (compressed)" or "")); |
1085
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
533 | if session.type == "s2sin_unauthed" then |
1240
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
534 | print(" Connection not yet authenticated"); |
1085
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
535 | end |
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
536 | 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
|
537 | if name ~= session.from_host then |
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
538 | print(" also hosts "..tostring(name)); |
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
539 | end |
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
540 | end |
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
541 | end |
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
542 | end |
1240
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
543 | |
1085
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
544 | print = _print; |
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
545 | end |
1240
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
546 | |
1085
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
547 | for session in pairs(incoming_s2s) do |
1240
397b6e9c1568
mod_console: Allow restricting results to matching JIDs in s2s:show()
Matthew Wild <mwild1@gmail.com>
parents:
1085
diff
changeset
|
548 | if not session.to_host and ((not match_jid) or session.from_host and session.from_host:match(match_jid)) then |
1322
33d103b0283f
mod_console: Show total incoming/outgoing s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1317
diff
changeset
|
549 | count_in = count_in + 1; |
1085
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
550 | print("Other incoming s2s connections"); |
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
551 | print(" (unknown) <- "..(session.from_host or "(unknown)")); |
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
552 | end |
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
553 | end |
1322
33d103b0283f
mod_console: Show total incoming/outgoing s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1317
diff
changeset
|
554 | |
33d103b0283f
mod_console: Show total incoming/outgoing s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1317
diff
changeset
|
555 | 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
|
556 | end |
1ac11fb753ca
mod_console: Add s2s:show() command to list s2s connections
Matthew Wild <mwild1@gmail.com>
parents:
1042
diff
changeset
|
557 | |
1340
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
558 | 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
|
559 | local print, count = self.session.print, 0; |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
560 | |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
561 | if not (from and to) then |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
562 | 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
|
563 | 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
|
564 | 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
|
565 | end |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
566 | |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
567 | if hosts[from] and not hosts[to] then |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
568 | -- Is an outgoing connection |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
569 | local session = hosts[from].s2sout[to]; |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
570 | if not session then |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
571 | print("No outgoing connection 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
|
572 | else |
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
|
573 | (session.close or s2smanager.destroy_session)(session); |
1340
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
574 | count = count + 1; |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
575 | print("Closed outgoing session 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
|
576 | end |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
577 | elseif hosts[to] and not hosts[from] then |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
578 | -- Is an incoming connection |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
579 | for session in pairs(incoming_s2s) do |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
580 | if session.to_host == to and session.from_host == from then |
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
|
581 | (session.close or s2smanager.destroy_session)(session); |
1340
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
582 | count = count + 1; |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
583 | end |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
584 | end |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
585 | |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
586 | if count == 0 then |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
587 | print("No incoming connections 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
|
588 | else |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
589 | print("Closed "..count.." incoming session"..((count == 1 and "") or "s").." 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
|
590 | end |
1341
53decd1ee351
mod_console: Fix syntax error
Matthew Wild <mwild1@gmail.com>
parents:
1340
diff
changeset
|
591 | elseif hosts[to] and hosts[from] then |
1340
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
592 | return false, "Both of the hostnames you specified are local, there are no s2s sessions to close"; |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
593 | else |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
594 | return false, "Neither of the hostnames you specified are being used on this server"; |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
595 | end |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
596 | |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
597 | 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
|
598 | end |
f707d0957155
mod_console: Add s2s:close() to close s2s sessions between two hosts
Matthew Wild <mwild1@gmail.com>
parents:
1322
diff
changeset
|
599 | |
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
|
600 | def_env.host = {}; def_env.hosts = def_env.host; |
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
|
601 | function def_env.host:activate(hostname, config) |
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
|
602 | local hostmanager_activate = require "core.hostmanager".activate; |
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
|
603 | if hosts[hostname] then |
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
|
604 | return false, "The host "..tostring(hostname).." is already activated"; |
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
|
605 | 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
|
606 | |
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
|
607 | local defined_hosts = config or configmanager.getconfig(); |
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
|
608 | if not config and not defined_hosts[hostname] then |
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
|
609 | return false, "Couldn't find "..tostring(hostname).." defined in the config, perhaps you need to config:reload()?"; |
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
|
610 | 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
|
611 | hostmanager_activate(hostname, config or defined_hosts[hostname]); |
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
|
612 | return true, "Host "..tostring(hostname).." activated"; |
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
|
613 | 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
|
614 | |
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
|
615 | function def_env.host:deactivate(hostname, reason) |
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
|
616 | local hostmanager_deactivate = require "core.hostmanager".deactivate; |
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
|
617 | local host = hosts[hostname]; |
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
|
618 | if not host then |
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
|
619 | return false, "The host "..tostring(hostname).." is not activated"; |
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
|
620 | 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
|
621 | if reason then |
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
|
622 | reason = { condition = "host-gone", text = reason }; |
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
|
623 | 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
|
624 | hostmanager_deactivate(hostname, reason); |
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
|
625 | return true, "Host "..tostring(hostname).." deactivated"; |
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
|
626 | 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
|
627 | |
2007
b89d61db74d1
mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents:
1977
diff
changeset
|
628 | function def_env.host:list() |
b89d61db74d1
mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents:
1977
diff
changeset
|
629 | local print = self.session.print; |
b89d61db74d1
mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents:
1977
diff
changeset
|
630 | local i = 0; |
b89d61db74d1
mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents:
1977
diff
changeset
|
631 | for host in values(array.collect(keys(prosody.hosts)):sort()) do |
b89d61db74d1
mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents:
1977
diff
changeset
|
632 | i = i + 1; |
b89d61db74d1
mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents:
1977
diff
changeset
|
633 | print(host); |
b89d61db74d1
mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents:
1977
diff
changeset
|
634 | end |
b89d61db74d1
mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents:
1977
diff
changeset
|
635 | return true, i.." hosts"; |
b89d61db74d1
mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents:
1977
diff
changeset
|
636 | end |
b89d61db74d1
mod_console: Add missing hosts:list() command
Matthew Wild <mwild1@gmail.com>
parents:
1977
diff
changeset
|
637 | |
736 | 638 | ------------- |
639 | ||
640 | function printbanner(session) | |
1483
efd19cdda6ca
mod_console: Allow customisation/suppression of the banner
Matthew Wild <mwild1@gmail.com>
parents:
1433
diff
changeset
|
641 | local option = config.get("*", "core", "console_banner"); |
efd19cdda6ca
mod_console: Allow customisation/suppression of the banner
Matthew Wild <mwild1@gmail.com>
parents:
1433
diff
changeset
|
642 | if option == nil or option == "full" or option == "graphic" then |
736 | 643 | session.print [[ |
644 | ____ \ / _ | |
645 | | _ \ _ __ ___ ___ _-_ __| |_ _ | |
646 | | |_) | '__/ _ \/ __|/ _ \ / _` | | | | | |
647 | | __/| | | (_) \__ \ |_| | (_| | |_| | | |
648 | |_| |_| \___/|___/\___/ \__,_|\__, | | |
649 | A study in simplicity |___/ | |
650 | ||
651 | ]] | |
1483
efd19cdda6ca
mod_console: Allow customisation/suppression of the banner
Matthew Wild <mwild1@gmail.com>
parents:
1433
diff
changeset
|
652 | end |
efd19cdda6ca
mod_console: Allow customisation/suppression of the banner
Matthew Wild <mwild1@gmail.com>
parents:
1433
diff
changeset
|
653 | if option == nil or option == "short" or option == "full" then |
736 | 654 | session.print("Welcome to the Prosody administration console. For a list of commands, type: help"); |
655 | session.print("You may find more help on using this console in our online documentation at "); | |
656 | session.print("http://prosody.im/doc/console\n"); | |
657 | end | |
1483
efd19cdda6ca
mod_console: Allow customisation/suppression of the banner
Matthew Wild <mwild1@gmail.com>
parents:
1433
diff
changeset
|
658 | if option and option ~= "short" and option ~= "full" and option ~= "graphic" then |
efd19cdda6ca
mod_console: Allow customisation/suppression of the banner
Matthew Wild <mwild1@gmail.com>
parents:
1433
diff
changeset
|
659 | if type(option) == "string" then |
efd19cdda6ca
mod_console: Allow customisation/suppression of the banner
Matthew Wild <mwild1@gmail.com>
parents:
1433
diff
changeset
|
660 | session.print(option) |
efd19cdda6ca
mod_console: Allow customisation/suppression of the banner
Matthew Wild <mwild1@gmail.com>
parents:
1433
diff
changeset
|
661 | elseif type(option) == "function" then |
efd19cdda6ca
mod_console: Allow customisation/suppression of the banner
Matthew Wild <mwild1@gmail.com>
parents:
1433
diff
changeset
|
662 | setfenv(option, redirect_output(_G, session)); |
efd19cdda6ca
mod_console: Allow customisation/suppression of the banner
Matthew Wild <mwild1@gmail.com>
parents:
1433
diff
changeset
|
663 | pcall(option, session); |
efd19cdda6ca
mod_console: Allow customisation/suppression of the banner
Matthew Wild <mwild1@gmail.com>
parents:
1433
diff
changeset
|
664 | end |
efd19cdda6ca
mod_console: Allow customisation/suppression of the banner
Matthew Wild <mwild1@gmail.com>
parents:
1433
diff
changeset
|
665 | end |
efd19cdda6ca
mod_console: Allow customisation/suppression of the banner
Matthew Wild <mwild1@gmail.com>
parents:
1433
diff
changeset
|
666 | end |
2087
5efd79871205
mod_console: Moved activation of the console port from the main file to mod_console.
Waqas Hussain <waqas20@gmail.com>
parents:
2055
diff
changeset
|
667 | |
5efd79871205
mod_console: Moved activation of the console port from the main file to mod_console.
Waqas Hussain <waqas20@gmail.com>
parents:
2055
diff
changeset
|
668 | prosody.net_activate_ports("console", "console", {5582}, "tcp"); |