Software /
code /
prosody-modules
File
mod_adhoc_blacklist/mod_adhoc_blacklist.lua @ 4930:13070c6a7ce8
mod_http_muc_log: Fix exception on lack of trailing slash in room path
A request to /room leads to the match call returning nil which in turn
calls nodeprep(nil). In Prosody 0.11.x this does nothing and simply
returns the nil, while in 0.12 it is an error.
Now it redirects to the calendar view at /room/ - even for non-existant
rooms.
Discovered at a deployment with http_paths = { muc_log = "/" } and
requests to /robots.txt and similar, which now result in a uses redirect
before returning 404.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 22 Apr 2022 14:29:32 +0200 |
parent | 1736:efbb73851af9 |
line wrap: on
line source
-- mod_adhoc_blacklist -- -- http://xmpp.org/extensions/xep-0133.html#edit-blacklist -- -- Copyright (C) 2015 Kim Alvefur -- -- This file is MIT/X11 licensed. -- module:depends("adhoc"); local adhoc = module:require "adhoc"; local st = require"util.stanza"; local set = require"util.set"; local dataform = require"util.dataforms"; local adhoc_inital_data = require "util.adhoc".new_initial_data_form; local blocklist_form = dataform.new { title = "Editing the Blacklist"; instructions = "Fill out this form to edit the list of entities with whom communications are disallowed."; { type = "hidden"; name = "FORM_TYPE"; value = "http://jabber.org/protocol/admin"; }; { type = "jid-multi"; name = "blacklistjids"; label = "The blacklist"; }; } local blocklists = module:open_store("blocklist"); local blocklist_handler = adhoc_inital_data(blocklist_form, function () local blacklistjids = {}; local blacklist = blocklists:get(); if blacklist then for jid in pairs(blacklist) do table.insert(blacklistjids, jid); end end return { blacklistjids = blacklistjids }; end, function(fields, form_err) if form_err then return { status = "completed", error = { message = "Problem in submitted form" } }; end local blacklistjids = set.new(fields.blacklistjids); local ok, err = blocklists:set(nil, blacklistjids._items); if ok then return { status = "completed", info = "Blacklist updated" }; else return { status = "completed", error = { message = "Error saving blacklist: "..err } }; end end); module:add_item("adhoc", adhoc.new("Edit Blacklist", "http://jabber.org/protocol/admin#edit-blacklist", blocklist_handler, "admin")); local function is_blocked(host) local blacklistjids = blocklists:get(); return blacklistjids and blacklistjids[host]; end module:hook("route/remote", function (event) local origin, stanza = event.origin, event.stanza; if is_blocked(event.to_host) then if origin and stanza then origin.send(st.error_reply(stanza, "cancel", "not-allowed", "Communication with this domain is not allowed")); return true; end return false; end end, 1000); module:hook("s2s-stream-features", function (event) local session = event.origin; if is_blocked(session.from_host) then session:close("policy-violation"); return false; end end, 1000); module:hook("stanza/http://etherx.jabber.org/streams:features", function (event) local session = event.origin; if is_blocked(session.to_host) then session:close("policy-violation"); return true; end end, 1000);