Comparison

prosodyctl @ 1390:ef672c9fe7c9

prosodyctl: Allow commands to be implemented in modules
author Matthew Wild <mwild1@gmail.com>
date Tue, 23 Jun 2009 01:50:10 +0100
parent 1205:23a079f50cab
child 1458:fce75b4efda9
comparison
equal deleted inserted replaced
1389:846df07536eb 1390:ef672c9fe7c9
92 ["invalid-hostname"] = "The given hostname is invalid"; 92 ["invalid-hostname"] = "The given hostname is invalid";
93 ["no-password"] = "No password was supplied"; 93 ["no-password"] = "No password was supplied";
94 ["no-such-user"] = "The given user does not exist on the server"; 94 ["no-such-user"] = "The given user does not exist on the server";
95 ["unable-to-save-data"] = "Unable to store, perhaps you don't have permission?"; 95 ["unable-to-save-data"] = "Unable to store, perhaps you don't have permission?";
96 ["no-pidfile"] = "There is no pidfile option in the configuration file, see http://prosody.im/doc/prosodyctl#pidfile for help"; 96 ["no-pidfile"] = "There is no pidfile option in the configuration file, see http://prosody.im/doc/prosodyctl#pidfile for help";
97 ["no-such-method"] = "This module has no commands";
97 }, { __index = function (t,k) return "Error: "..(tostring(k):gsub("%-", " "):gsub("^.", string.upper)); end }); 98 }, { __index = function (t,k) return "Error: "..(tostring(k):gsub("%-", " "):gsub("^.", string.upper)); end });
98 99
99 hosts = {}; 100 hosts = {};
100 101
101 require "core.hostmanager" 102 require "core.hostmanager"
102 require "core.eventmanager".fire_event("server-starting"); 103 require "core.eventmanager".fire_event("server-starting");
104 require "core.modulemanager"
103 105
104 require "util.prosodyctl" 106 require "util.prosodyctl"
105 ----------------------- 107 -----------------------
106 108
107 function show_message(msg, ...) 109 function show_message(msg, ...)
402 end 404 end
403 405
404 406
405 --------------------- 407 ---------------------
406 408
409 if command:match("^mod_") then -- Is a command in a module
410 local module_name = command:match("^mod_(.+)");
411 local ret, err = modulemanager.load("*", module_name);
412 if not ret then
413 show_message("Failed to load module '"..module_name.."': "..err);
414 os.exit(1);
415 end
416
417 table.remove(arg, 1);
418
419 local module = modulemanager.get_module("*", module_name);
420 if not module then
421 show_message("Failed to load module '"..module_name.."': Unknown error");
422 os.exit(1);
423 end
424
425 if not modulemanager.module_has_method(module, "command") then
426 show_message("Fail: mod_"..module_name.." does not support any commands");
427 os.exit(1);
428 end
429
430 local ok, ret = modulemanager.call_module_method(module, "command", arg);
431 if ok then
432 if type(ret) == "number" then
433 os.exit(ret);
434 elseif type(ret) == "string" then
435 show_message(ret);
436 end
437 os.exit(0); -- :)
438 else
439 show_message("Failed to execute command: "..error_messages[ret]);
440 os.exit(1); -- :(
441 end
442 end
443
407 if not commands[command] then -- Show help for all commands 444 if not commands[command] then -- Show help for all commands
408 function show_usage(usage, desc) 445 function show_usage(usage, desc)
409 print(" "..usage); 446 print(" "..usage);
410 print(" "..desc); 447 print(" "..desc);
411 end 448 end