mirror of
https://github.com/bjc/prosody.git
synced 2025-04-01 20:27:39 +03:00
131 lines
3.5 KiB
Lua
Executable file
131 lines
3.5 KiB
Lua
Executable file
#!/usr/bin/env lua
|
|
|
|
-- cfgdump.lua prosody.cfg.lua [[host] option]
|
|
if not pcall(require, "prosody.loader") then
|
|
pcall(require, "loader");
|
|
end
|
|
|
|
local s_format, print = string.format, print;
|
|
local printf = function(fmt, ...) return print(s_format(fmt, ...)); end
|
|
local it = require "prosody.util.iterators";
|
|
local function sort_anything(a, b)
|
|
local typeof_a, typeof_b = type(a), type(b);
|
|
if typeof_a ~= typeof_b then return typeof_a < typeof_b end
|
|
return a < b -- should work for everything in a config file
|
|
end
|
|
local serialization = require "prosody.util.serialization";
|
|
local serialize = serialization.new and serialization.new({
|
|
unquoted = true, table_iterator = function(t) return it.sorted_pairs(t, sort_anything); end,
|
|
}) or serialization.serialize;
|
|
local configmanager = require"prosody.core.configmanager";
|
|
local startup = require "prosody.util.startup";
|
|
|
|
startup.set_function_metatable();
|
|
local config_filename, onlyhost, onlyoption = ...;
|
|
|
|
local ok, _, err = configmanager.load(config_filename or "./prosody.cfg.lua", "lua");
|
|
assert(ok, err);
|
|
|
|
if onlyhost then
|
|
if not onlyoption then
|
|
onlyhost, onlyoption = "*", onlyhost;
|
|
end
|
|
if onlyhost ~= "*" then
|
|
local component_module = configmanager.get(onlyhost, "component_module");
|
|
|
|
if component_module == "component" then
|
|
printf("Component %q", onlyhost);
|
|
elseif component_module then
|
|
printf("Component %q %q", onlyhost, component_module);
|
|
else
|
|
printf("VirtualHost %q", onlyhost);
|
|
end
|
|
end
|
|
printf("%s = %s", onlyoption or "?", serialize(configmanager.get(onlyhost, onlyoption)));
|
|
return;
|
|
end
|
|
|
|
local config = configmanager.getconfig();
|
|
|
|
|
|
for host, hostcfg in it.sorted_pairs(config) do
|
|
local fixed = {};
|
|
for option, value in it.sorted_pairs(hostcfg) do
|
|
fixed[option] = value;
|
|
if option:match("ports?$") or option:match("interfaces?$") then
|
|
if option:match("s$") then
|
|
if type(value) ~= "table" then
|
|
fixed[option] = { value };
|
|
end
|
|
else
|
|
if type(value) == "table" and #value > 1 then
|
|
fixed[option] = nil;
|
|
fixed[option.."s"] = value;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
config[host] = fixed;
|
|
end
|
|
|
|
local globals = config["*"]; config["*"] = nil;
|
|
|
|
local function printsection(section)
|
|
local out, n = {}, 1;
|
|
for k,v in it.sorted_pairs(section) do
|
|
out[n], n = s_format("%s = %s", k, serialize(v)), n + 1;
|
|
end
|
|
table.sort(out);
|
|
print(table.concat(out, "\n"));
|
|
end
|
|
|
|
print("-------------- Prosody Exported Configuration File -------------");
|
|
print();
|
|
print("------------------------ Global section ------------------------");
|
|
print();
|
|
printsection(globals);
|
|
print();
|
|
|
|
local has_components = nil;
|
|
|
|
print("------------------------ Virtual hosts -------------------------");
|
|
|
|
for host, hostcfg in it.sorted_pairs(config) do
|
|
setmetatable(hostcfg, nil);
|
|
hostcfg.defined = nil;
|
|
|
|
if hostcfg.component_module == nil then
|
|
print();
|
|
printf("VirtualHost %q", host);
|
|
printsection(hostcfg);
|
|
else
|
|
has_components = true
|
|
end
|
|
end
|
|
|
|
print();
|
|
|
|
if has_components then
|
|
print("------------------------- Components ---------------------------");
|
|
|
|
for host, hostcfg in it.sorted_pairs(config) do
|
|
local component_module = hostcfg.component_module;
|
|
hostcfg.component_module = nil;
|
|
|
|
if component_module then
|
|
print();
|
|
if component_module == "component" then
|
|
printf("Component %q", host);
|
|
else
|
|
printf("Component %q %q", host, component_module);
|
|
hostcfg.component_module = nil;
|
|
hostcfg.load_global_modules = nil;
|
|
end
|
|
printsection(hostcfg);
|
|
end
|
|
end
|
|
end
|
|
|
|
print()
|
|
print("------------------------- End of File --------------------------");
|
|
|