# HG changeset patch
# User Matthew Wild <mwild1@gmail.com>
# Date 1314733696 14400
# Node ID b6c18cadd3ec548ca13472f513065717446c0e55
# Parent  6704b3cd032e2b3842e7fcb677cb71a226e4a5e9
util.pubsub: Add service:remove_all_subscriptions()

diff -r 6704b3cd032e -r b6c18cadd3ec util/pubsub.lua
--- a/util/pubsub.lua	Tue Aug 30 15:03:27 2011 -0400
+++ b/util/pubsub.lua	Tue Aug 30 15:48:16 2011 -0400
@@ -171,6 +171,32 @@
 	return true;
 end
 
+function service:remove_all_subscriptions(actor, jid)
+	-- Access checking
+	local cap;
+	if actor == true or jid == actor or self:jids_equal(actor, jid) then
+		cap = "unsubscribe";
+	else
+		cap = "unsubscribe_other";
+	end
+	if not self:may(node, actor, cap) then
+		return false, "forbidden";
+	end
+	if not self:may(node, jid, "be_unsubscribed") then
+		return false, "forbidden";
+	end
+	--
+	local normal_jid = self.config.normalize_jid(jid);
+	local subs = self.subscriptions[normal_jid]
+	subs = subs and subs[jid];
+	if subs then
+		for node in pairs(subs) do
+			self:remove_subscription(node, true, jid);
+		end
+	end
+	return true;
+end
+
 function service:get_subscription(node, actor, jid)
 	-- Access checking
 	local cap;