1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
#!/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 --------------------------");
|