X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=prosodyctl;h=c0cd89a0c985c454332cdb8e77e9020f8d4a6d78;hb=67972219b74e6315bcd23966e3570594e47456e3;hp=ccc1e2f9cfe5d86f8d3d55353d3842911aad35be;hpb=f672c8647e3ad1a808c412e8d37ee10fe5122ab2;p=prosody.git diff --git a/prosodyctl b/prosodyctl index ccc1e2f9..c0cd89a0 100755 --- a/prosodyctl +++ b/prosodyctl @@ -29,6 +29,14 @@ if CFG_DATADIR then end end +-- Global 'prosody' object +prosody = { + hosts = {}, + events = require "util.events".new(), + platform = "posix" +}; +local prosody = prosody; + config = require "core.configmanager" do @@ -63,8 +71,6 @@ if not require "util.dependencies".check_dependencies() then os.exit(1); end -prosody = { hosts = {}, events = events, platform = "posix" }; - local data_path = config.get("*", "core", "data_path") or CFG_DATADIR or "data"; require "util.datamanager".set_data_path(data_path); @@ -114,12 +120,14 @@ local error_messages = setmetatable({ ["not-running"] = "Prosody is not running"; }, { __index = function (t,k) return "Error: "..(tostring(k):gsub("%-", " "):gsub("^.", string.upper)); end }); -local events = require "util.events".new(); - hosts = prosody.hosts; +local function make_host(hostname) + return { events = prosody.events, users = require "core.usermanager".new_default_provider(hostname) }; +end + for hostname, config in pairs(config.getconfig()) do - hosts[hostname] = { events = events }; + hosts[hostname] = make_host(hostname); end require "core.modulemanager" @@ -231,14 +239,21 @@ function commands.adduser(arg) return 1; end - if prosodyctl.user_exists{ user = user, host = host } then - show_message [[That user already exists]]; - return 1; - end - if not hosts[host] then show_warning("The host '%s' is not listed in the configuration file (or is not enabled).", host) show_warning("The user will not be able to log in until this is changed."); + hosts[host] = make_host(host); + elseif config.get(host, "core", "authentication") + and config.get(host, "core", "authentication") ~= "default" then + show_warning("The host '%s' is configured to use the '%s' authentication provider", host, + config.get(host, "core", "authentication")); + show_warning("prosodyctl currently only supports the default provider, sorry :("); + return 1; + end + + if prosodyctl.user_exists{ user = user, host = host } then + show_message [[That user already exists]]; + return 1; end local password = read_password(); @@ -269,6 +284,18 @@ function commands.passwd(arg) return 1; end + if not hosts[host] then + show_warning("The host '%s' is not listed in the configuration file (or is not enabled).", host) + show_warning("The user will not be able to log in until this is changed."); + hosts[host] = make_host(host); + elseif config.get(host, "core", "authentication") + and config.get(host, "core", "authentication") ~= "default" then + show_warning("The host '%s' is configured to use the '%s' authentication provider", host, + config.get(host, "core", "authentication")); + show_warning("prosodyctl currently only supports the default provider, sorry :("); + return 1; + end + if not prosodyctl.user_exists { user = user, host = host } then show_message [[That user does not exist, use prosodyctl adduser to create a new user]] return 1; @@ -302,6 +329,18 @@ function commands.deluser(arg) return 1; end + if not hosts[host] then + show_warning("The host '%s' is not listed in the configuration file (or is not enabled).", host) + show_warning("The user will not be able to log in until this is changed."); + hosts[host] = make_host(host); + elseif config.get(host, "core", "authentication") + and config.get(host, "core", "authentication") ~= "default" then + show_warning("The host '%s' is configured to use the '%s' authentication provider", host, + config.get(host, "core", "authentication")); + show_warning("prosodyctl currently only supports the default provider, sorry :("); + return 1; + end + if not prosodyctl.user_exists { user = user, host = host } then show_message [[That user does not exist on this server]] return 1;