changeset 775:70ff25db37fa

mod_block_s2s_subscriptions: New module to block incoming presence subscriptions from non-contacts on selected remote hosts
author Matthew Wild <mwild1@gmail.com>
date Sun, 05 Aug 2012 02:27:58 +0100
parents 52caf54fc270
children 841b5eb5fe52
files mod_block_s2s_subscriptions/mod_block_s2s_subscriptions.lua
diffstat 1 files changed, 20 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_block_s2s_subscriptions/mod_block_s2s_subscriptions.lua	Sun Aug 05 02:27:58 2012 +0100
@@ -0,0 +1,20 @@
+
+local jid_split = require "util.jid".split;
+local jid_bare = require "util.jid".bare;
+local load_roster = require "core.rostermanager".load_roster;
+
+local blocked_servers = module:get_option_set("block_s2s_subscriptions")._items;
+
+function filter_presence(event)
+	if blocked_servers[event.origin.from_host] and event.stanza.attr.type == "subscribe" then
+		local stanza = event.stanza;
+		local to_user, to_host = jid_split(stanza.attr.to);
+		local roster = load_roster(to_user, to_host);
+		if roster and roster[jid_bare(stanza.attr.from)] then
+			return; -- In roster, pass through
+		end
+		return true; -- Drop
+	end
+end
+
+module:hook("presence/bare", filter_presence, 200); -- Client receiving