aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2011-08-30 15:48:16 -0400
committerMatthew Wild <mwild1@gmail.com>2011-08-30 15:48:16 -0400
commit20725d07f974ecc7c6b23be5ab5849305e0a4345 (patch)
treee94457a9e59d32c95cd0d6d34b7101e2a883ec83
parentf3160dd927bc5721635d13262fcacaf3c146dce2 (diff)
downloadprosody-20725d07f974ecc7c6b23be5ab5849305e0a4345.tar.gz
prosody-20725d07f974ecc7c6b23be5ab5849305e0a4345.zip
util.pubsub: Add service:remove_all_subscriptions()
-rw-r--r--util/pubsub.lua26
1 files changed, 26 insertions, 0 deletions
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;