plugins/mod_console.lua

changeset 1342
947d94e3619f
parent 1341
53decd1ee351
child 1433
e7bd00e70973
equal deleted inserted replaced
1341:53decd1ee351 1342:947d94e3619f
6 -- COPYING file in the source package for more information. 6 -- COPYING file in the source package for more information.
7 -- 7 --
8 8
9 module.host = "*"; 9 module.host = "*";
10 10
11 local _G = _G;
12
11 local prosody = _G.prosody; 13 local prosody = _G.prosody;
12 local hosts = prosody.hosts; 14 local hosts = prosody.hosts;
13 local connlisteners_register = require "net.connlisteners".register; 15 local connlisteners_register = require "net.connlisteners".register;
14 16
15 local console_listener = { default_port = 5582; default_mode = "*l"; }; 17 local console_listener = { default_port = 5582; default_mode = "*l"; };
18 local set, array = require "util.set", require "util.array"; 20 local set, array = require "util.set", require "util.array";
19 21
20 local commands = {}; 22 local commands = {};
21 local def_env = {}; 23 local def_env = {};
22 local default_env_mt = { __index = def_env }; 24 local default_env_mt = { __index = def_env };
25
26 local function redirect_output(_G, session)
27 return setmetatable({ print = session.print }, { __index = function (t, k) return rawget(_G, k); end, __newindex = function (t, k, v) rawset(_G, k, v); end });
28 end
23 29
24 console = {}; 30 console = {};
25 31
26 function console:new_session(conn) 32 function console:new_session(conn)
27 local w = function(s) conn.write(s:gsub("\n", "\r\n")); end; 33 local w = function(s) conn.write(s:gsub("\n", "\r\n")); end;
84 session.print("Sorry, I couldn't understand that... "..err); 90 session.print("Sorry, I couldn't understand that... "..err);
85 return; 91 return;
86 end 92 end
87 end 93 end
88 94
89 setfenv(chunk, (useglobalenv and _G) or session.env or nil); 95 setfenv(chunk, (useglobalenv and redirect_output(_G, session)) or session.env or nil);
90 96
91 local ranok, taskok, message = pcall(chunk); 97 local ranok, taskok, message = pcall(chunk);
92 98
93 if not ranok then 99 if not ranok then
94 session.print("Fatal error while running command, it did not complete"); 100 session.print("Fatal error while running command, it did not complete");

mercurial