aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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;