diff options
-rw-r--r-- | core/configmanager.lua | 38 | ||||
-rw-r--r-- | plugins/mod_invites.lua | 7 | ||||
-rw-r--r-- | util/prosodyctl/check.lua | 1 | ||||
-rw-r--r-- | util/startup.lua | 9 |
4 files changed, 36 insertions, 19 deletions
diff --git a/core/configmanager.lua b/core/configmanager.lua index 023545d7..6c6b670b 100644 --- a/core/configmanager.lua +++ b/core/configmanager.lua @@ -34,8 +34,9 @@ local parser = nil; local config_mt = { __index = function (t, _) return rawget(t, "*"); end}; local config = setmetatable({ ["*"] = { } }, config_mt); -local delayed_warnings = {}; local files = {}; +local credentials_directory = nil; +local credential_fallback_fatal = true; -- When host not found, use global local host_mt = { __index = function(_, k) return config["*"][k] end } @@ -45,11 +46,12 @@ function _M.getconfig() end function _M.get(host, key) - if host and key and delayed_warnings[host.."/"..key] then - local warning = delayed_warnings[host.."/"..key]; - log("warn", "%s", warning.text); + local v = config[host][key]; + if v and errors.is_error(v) then + log("warn", "%s:%d: %s", v.context.filename, v.context.fileline, v.text); + return nil; end - return config[host][key]; + return v; end function _M.rawget(host, key) local hostconfig = rawget(config, host); @@ -250,10 +252,6 @@ do t_insert(warnings, ("%s:%d: Duplicate option '%s'"):format(config_file, get_line_number(config_file), k)); end set_options[option_path] = true; - if errors.is_error(v) then - delayed_warnings[option_path] = v; - return; - end set(config_table, env.__currenthost or "*", k, v); end }); @@ -371,19 +369,17 @@ do env.FileLine = filereader(config_path, "*l"); env.FileLines = linereader(config_path); - if _G.prosody.paths.credentials then - env.Credential = filereader(_G.prosody.paths.credentials, "*a"); - elseif _G.prosody.process_type == "prosody" then + if credentials_directory then + env.Credential = filereader(credentials_directory, "*a"); + elseif credential_fallback_fatal then env.Credential = function() error("Credential() requires the $CREDENTIALS_DIRECTORY environment variable to be set", 2) end else env.Credential = function() return errors.new({ - type = "continue", - text = ("%s:%d: Credential() requires the $CREDENTIALS_DIRECTORY environment variable to be set") - :format(config_file, get_line_number(config_file)); - }); + type = "continue"; + text = "Credential() requires the $CREDENTIALS_DIRECTORY environment variable to be set"; + }, { filename = config_file; fileline = get_line_number(config_file) }); end - end local chunk, err = envload(data, "@"..config_file, env); @@ -405,4 +401,12 @@ do end +function _M.set_credentials_directory(directory) + credentials_directory = directory; +end + +function _M.set_credential_fallback_mode(mode) + credential_fallback_fatal = mode == "error"; +end + return _M; diff --git a/plugins/mod_invites.lua b/plugins/mod_invites.lua index 0da93215..c6a66a8f 100644 --- a/plugins/mod_invites.lua +++ b/plugins/mod_invites.lua @@ -239,6 +239,11 @@ end module:hook("invite-created", add_landing_url, -1); --- shell command +-- COMPAT: Dynamic groups are work in progress as of 13.0, so we'll use the +-- presence of mod_invites_groups (a community module) to determine whether to +-- expose our support for invites to groups. +local have_group_invites = module:get_option_inherited_set("modules_enabled"):contains("invites_groups"); + module:add_item("shell-command", { section = "invite"; section_desc = "Create and manage invitations"; @@ -249,7 +254,7 @@ module:add_item("shell-command", { }; host_selector = "user_jid"; flags = { - array_params = { role = true, group = true }; + array_params = { role = true, group = have_group_invites }; value_params = { expires_after = true }; }; diff --git a/util/prosodyctl/check.lua b/util/prosodyctl/check.lua index 4ac7af9e..554a64ef 100644 --- a/util/prosodyctl/check.lua +++ b/util/prosodyctl/check.lua @@ -1631,6 +1631,7 @@ local function check(arg) }); end end + break; end end if not found then diff --git a/util/startup.lua b/util/startup.lua index 34c2f733..15f07fdf 100644 --- a/util/startup.lua +++ b/util/startup.lua @@ -89,6 +89,14 @@ function startup.read_config() end end prosody.config_file = filename + local credentials_directory = os.getenv("CREDENTIALS_DIRECTORY"); + if credentials_directory then + config.set_credentials_directory(credentials_directory); + elseif prosody.process_type == "prosody" then + config.set_credential_fallback_mode("error"); + else + config.set_credential_fallback_mode("warn"); + end local ok, level, err = config.load(filename); if not ok then print("\n"); @@ -271,7 +279,6 @@ function startup.init_global_state() config = CFG_CONFIGDIR or "."; plugins = CFG_PLUGINDIR or "plugins"; data = "data"; - credentials = os.getenv("CREDENTIALS_DIRECTORY"); }; prosody.arg = _G.arg; |