diff options
-rw-r--r-- | .luacheckrc | 2 | ||||
-rw-r--r-- | core/portmanager.lua | 2 | ||||
-rw-r--r-- | core/usermanager.lua | 15 | ||||
-rw-r--r-- | plugins/mod_admin_telnet.lua | 29 | ||||
-rw-r--r-- | plugins/mod_compression.lua | 2 | ||||
-rwxr-xr-x | prosody | 6 | ||||
-rw-r--r-- | util/dataforms.lua | 6 |
7 files changed, 47 insertions, 15 deletions
diff --git a/.luacheckrc b/.luacheckrc index bcce1155..590f9c37 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -1,5 +1,5 @@ cache = true -read_globals = { "prosody", "hosts" } +read_globals = { "prosody", "hosts", "import" } globals = { "_M" } allow_defined_top = true module = true diff --git a/core/portmanager.lua b/core/portmanager.lua index 9f95077a..ad1a0be3 100644 --- a/core/portmanager.lua +++ b/core/portmanager.lua @@ -111,10 +111,10 @@ local function activate(service_name) 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 diff --git a/core/usermanager.lua b/core/usermanager.lua index d874447d..0d8d7f91 100644 --- a/core/usermanager.lua +++ b/core/usermanager.lua @@ -111,7 +111,6 @@ local function is_admin(jid, host) 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 "*"; @@ -122,8 +121,7 @@ local function is_admin(jid, host) 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 @@ -131,12 +129,11 @@ local function is_admin(jid, host) 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 @@ -145,10 +142,10 @@ local function is_admin(jid, host) 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 { diff --git a/plugins/mod_admin_telnet.lua b/plugins/mod_admin_telnet.lua index 7aea28ba..aa7b10cb 100644 --- a/plugins/mod_admin_telnet.lua +++ b/plugins/mod_admin_telnet.lua @@ -282,6 +282,8 @@ end -- 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() @@ -1125,6 +1127,33 @@ function def_env.dns:cache() 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) diff --git a/plugins/mod_compression.lua b/plugins/mod_compression.lua index da55e5bb..d49e3880 100644 --- a/plugins/mod_compression.lua +++ b/plugins/mod_compression.lua @@ -27,14 +27,12 @@ end 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 @@ -43,6 +43,12 @@ if CFG_DATADIR then 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; diff --git a/util/dataforms.lua b/util/dataforms.lua index 05846ab3..79b4d1a4 100644 --- a/util/dataforms.lua +++ b/util/dataforms.lua @@ -118,6 +118,7 @@ local field_readers = {}; function form_t.data(layout, stanza) local data = {}; local errors = {}; + local present = {}; for _, field in ipairs(layout) do local tag; @@ -133,6 +134,7 @@ function form_t.data(layout, stanza) 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); @@ -140,9 +142,9 @@ function form_t.data(layout, stanza) 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) |