aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2008-11-23 02:12:46 +0000
committerMatthew Wild <mwild1@gmail.com>2008-11-23 02:12:46 +0000
commitd4f1fa92a2fc10324565151769344981ec26f30c (patch)
treee6c4943f39e243175910d6ad571c6a5520a224e3 /core
parenta7b3157e9ff6d26b7218931646f6e02ed6063be8 (diff)
downloadprosody-d4f1fa92a2fc10324565151769344981ec26f30c.tar.gz
prosody-d4f1fa92a2fc10324565151769344981ec26f30c.zip
New configmanager. Old-style config files still work, but will print a warning
Diffstat (limited to 'core')
-rw-r--r--core/configmanager.lua36
1 files changed, 26 insertions, 10 deletions
diff --git a/core/configmanager.lua b/core/configmanager.lua
index cc7ffb7e..5f5648b9 100644
--- a/core/configmanager.lua
+++ b/core/configmanager.lua
@@ -1,5 +1,7 @@
local _G = _G;
+local setmetatable, loadfile, pcall, rawget, rawset, io =
+ setmetatable, loadfile, pcall, rawget, rawset, io;
module "configmanager"
local parsers = {};
@@ -21,6 +23,10 @@ function section_mt(section_name)
end };
end
+function getconfig()
+ return config;
+end
+
function get(host, section, key)
local sec = config[host][section];
if sec then
@@ -45,15 +51,20 @@ function set(host, section, key, value)
end
function load(filename, format)
+ format = format or filename:match("%w+$");
if parsers[format] and parsers[format].load then
local f = io.open(filename);
if f then
- local ok, err = parsers[format](f:read("*a"));
+ local ok, err = parsers[format].load(f:read("*a"));
f:close();
return ok, err;
end
end
- return false, "no parser";
+ if not format then
+ return nil, "no parser specified";
+ else
+ return false, "no parser";
+ end
end
function save(filename, format)
@@ -65,21 +76,28 @@ function addparser(format, parser)
end
end
+-- Built-in Lua parser
do
+ local loadstring, pcall, setmetatable = _G.loadstring, _G.pcall, _G.setmetatable;
+ local setfenv, rawget, tostring = _G.setfenv, _G.rawget, _G.tostring;
parsers.lua = {};
function parsers.lua.load(data)
- local env = setmetatable({}, { __index = function (t, k)
- if k:match("^mod_") then
- return function (settings_table)
+ local env;
+ env = setmetatable({ Host = true; host = true; }, { __index = function (t, k)
+ return rawget(_G, k) or
+ function (settings_table)
config[__currenthost or "*"][k] = settings_table;
end;
- end
- return rawget(_G, k);
+ end,
+ __newindex = function (t, k, v)
+ set(env.__currenthost or "*", "core", k, v);
end});
function env.Host(name)
- env.__currenthost = name;
+ rawset(env, "__currenthost", name);
+ set(name or "*", "core", "defined", true);
end
+ env.host = env.Host;
local chunk, err = loadstring(data);
@@ -95,8 +113,6 @@ do
return nil, err;
end
-
-
return true;
end