Software /
code /
prosody-modules
File
mod_admin_blocklist/mod_admin_blocklist.lua @ 3953:2c6d5734ae04
mod_rest: Add JSON mapping of XEP-0128: Service Discovery Extensions
Example XEP-0157 payload:
{
"disco" : {
"extensions" : {
"http://jabber.org/network/serverinfo" : {
"abuse-addresses" : [
"mailto:abuse@shakespeare.lit",
"xmpp:abuse@shakespeare.lit"
],
"admin-addresses" : [
"mailto:admin@shakespeare.lit",
"xmpp:admin@shakespeare.lit"
],
"feedback-addresses" : [
"http://shakespeare.lit/feedback.php",
"mailto:feedback@shakespeare.lit",
"xmpp:feedback@shakespeare.lit"
],
"sales-addresses" : [
"xmpp:bard@shakespeare.lit"
],
"security-addresses" : [
"xmpp:security@shakespeare.lit"
],
"support-addresses" : [
"http://shakespeare.lit/support.php",
"xmpp:support@shakespeare.lit"
]
}
}
}
}
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 23 Mar 2020 19:03:04 +0100 |
parent | 2313:5d05139d0555 |
child | 4805:683d1ad16b56 |
line wrap: on
line source
-- mod_admin_blocklist -- -- If a local admin has blocked a domain, don't allow s2s to that domain -- -- Copyright (C) 2015 Kim Alvefur -- -- This file is MIT/X11 licensed. -- module:depends("blocklist"); local st = require"util.stanza"; local jid_split = require"util.jid".split; local admins = module:get_option_inherited_set("admins", {}) / function (admin) -- Filter out non-local admins local user, host = jid_split(admin); if host == module.host then return user; end end local blocklists = module:open_store("blocklist"); local function is_blocked(host) for admin in admins do local blocklist = blocklists:get(admin); if blocklist and blocklist[host] then return true; end end 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, -9); 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);