diff options
-rw-r--r-- | util/pubsub.lua | 26 |
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; |