From 20725d07f974ecc7c6b23be5ab5849305e0a4345 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Tue, 30 Aug 2011 15:48:16 -0400 Subject: util.pubsub: Add service:remove_all_subscriptions() --- util/pubsub.lua | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'util') diff --git a/util/pubsub.lua b/util/pubsub.lua index 621cf1a6..df055c7a 100644 --- a/util/pubsub.lua +++ b/util/pubsub.lua @@ -171,6 +171,32 @@ function service:remove_subscription(node, actor, jid) 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; -- cgit v1.2.3