Mercurial > prosody-modules
view mod_http_status/mod_http_status.lua @ 6167:886c985ece61
mod_lastlog2: Skip initializing internal API (and storage) in prosodyctl
Initializing storage in the global context under prosodyctl causes the
module.command to fail to execute because the storage module has already
been loaded.
Introduced in 7b722955c59b
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sat, 08 Feb 2025 14:12:18 +0100 |
| parents | e274431bf4ce |
| children |
line wrap: on
line source
module:set_global(); local json = require "util.json"; local datetime = require "util.datetime".datetime; local ip = require "util.ip"; local modulemanager = require "core.modulemanager"; local permitted_ips = module:get_option_set("http_status_allow_ips", { "::1", "127.0.0.1" }); local permitted_cidr = module:get_option_string("http_status_allow_cidr"); local function is_permitted(request) local ip_raw = request.ip; if permitted_ips:contains(ip_raw) or (permitted_cidr and ip.match(ip.new_ip(ip_raw), ip.parse_cidr(permitted_cidr))) then return true; end return false; end module:provides("http", { route = { GET = function(event) local request, response = event.request, event.response; if not is_permitted(request) then return 403; -- Forbidden end response.headers.content_type = "application/json"; local resp = { ["*"] = true }; for host in pairs(prosody.hosts) do resp[host] = true; end for host in pairs(resp) do local hostmods = {}; local mods = modulemanager.get_modules(host); for mod_name, mod in pairs(mods) do hostmods[mod_name] = { type = mod.module.status_type; message = mod.module.status_message; time = datetime(math.floor(mod.module.status_time)); }; end resp[host] = hostmods; end return json.encode(resp); end; }; });
