cache = true
-read_globals = { "prosody", "hosts" }
+read_globals = { "prosody", "hosts", "import" }
globals = { "_M" }
allow_defined_top = true
module = true
local global_ssl_config = config.get("*", "ssl") or {};
local prefix_ssl_config = config.get("*", config_prefix.."ssl") or global_ssl_config;
ssl, err = certmanager.create_context(service_info.name.." port "..port, "server",
- service_info.ssl_config or {},
prefix_ssl_config[interface],
prefix_ssl_config[port],
prefix_ssl_config,
+ service_info.ssl_config or {},
global_ssl_config[interface],
global_ssl_config[port]);
if not ssl then
if host and not hosts[host] then return false; end
if type(jid) ~= "string" then return false; end
- local is_admin;
jid = jid_bare(jid);
host = host or "*";
if type(host_admins) == "table" then
for _,admin in ipairs(host_admins) do
if jid_prep(admin) == jid then
- is_admin = true;
- break;
+ return true;
end
end
elseif host_admins then
end
end
- if not is_admin and global_admins then
+ if global_admins then
if type(global_admins) == "table" then
for _,admin in ipairs(global_admins) do
if jid_prep(admin) == jid then
- is_admin = true;
- break;
+ return true;
end
end
elseif global_admins then
end
-- Still not an admin, check with auth provider
- if not is_admin and host ~= "*" and hosts[host].users and hosts[host].users.is_admin then
- is_admin = hosts[host].users.is_admin(jid);
+ if host ~= "*" and hosts[host].users and hosts[host].users.is_admin then
+ return hosts[host].users.is_admin(jid);
end
- return is_admin or false;
+ return false;
end
return {
-- Session environment --
-- Anything in def_env will be accessible within the session as a global variable
+--luacheck: ignore 212/self
+
def_env.server = {};
function def_env.server:insane_reload()
return true, "Cache:\n"..tostring(dns.cache())
end
+def_env.http = {};
+
+function def_env.http:list()
+ local print = self.session.print;
+
+ for host in pairs(prosody.hosts) do
+ local http_apps = modulemanager.get_items("http-provider", host);
+ if #http_apps > 0 then
+ local http_host = module:context(host):get_option("http_host");
+ print("HTTP endpoints on "..host..(http_host and (" (using "..http_host.."):") or ":"));
+ for _, provider in ipairs(http_apps) do
+ local url = module:context(host):http_url(provider.name);
+ print("", url);
+ end
+ print("");
+ end
+ end
+
+ local default_host = module:get_option("http_default_host");
+ if not default_host then
+ print("HTTP requests to unknown hosts will return 404 Not Found");
+ else
+ print("HTTP requests to unknown hosts will be handled by "..default_host);
+ end
+ return true;
+end
+
-------------
function printbanner(session)
module:hook("stream-features", function(event)
local origin, features = event.origin, event.features;
if not origin.compressed and origin.type == "c2s" then
- -- FIXME only advertise compression support when TLS layer has no compression enabled
features:add_child(compression_stream_feature);
end
end);
module:hook("s2s-stream-features", function(event)
local origin, features = event.origin, event.features;
- -- FIXME only advertise compression support when TLS layer has no compression enabled
if not origin.compressed and origin.type == "s2sin" then
features:add_child(compression_stream_feature);
end
end
end
+if #arg > 0 and arg[1] ~= "--config" then
+ print("Unknown command-line option: "..tostring(arg[1]));
+ print("Perhaps you meant to use prosodyctl instead?");
+ return 1;
+end
+
-- Global 'prosody' object
local prosody = { events = require "util.events".new(); };
_G.prosody = prosody;
function form_t.data(layout, stanza)
local data = {};
local errors = {};
+ local present = {};
for _, field in ipairs(layout) do
local tag;
errors[field.name] = "Required value missing";
end
else
+ present[field.name] = true;
local reader = field_readers[field.type];
if reader then
data[field.name], errors[field.name] = reader(tag, field.required);
end
end
if next(errors) then
- return data, errors;
+ return data, errors, present;
end
- return data;
+ return data, nil, present;
end
local function simple_text(field_tag, required)