From 9eedb15c6fc760e45316a02cf372b00bb6547f09 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Sat, 22 Feb 2025 00:00:41 +0100 Subject: core.configmanager: Remove dependency on 'prosody' global for Credential Minimizing dependencies on global state is nice, as it makes using configmanager outside of Prosody easier. --- core/configmanager.lua | 16 +++++++++++++--- util/startup.lua | 9 ++++++++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/core/configmanager.lua b/core/configmanager.lua index 023545d7..effe33a1 100644 --- a/core/configmanager.lua +++ b/core/configmanager.lua @@ -36,6 +36,8 @@ 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 } @@ -371,9 +373,9 @@ 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() @@ -405,4 +407,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/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; -- cgit v1.2.3