diff options
author | Matthew Wild <mwild1@gmail.com> | 2011-08-30 15:48:16 -0400 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2011-08-30 15:48:16 -0400 |
commit | 20725d07f974ecc7c6b23be5ab5849305e0a4345 (patch) | |
tree | e94457a9e59d32c95cd0d6d34b7101e2a883ec83 | |
parent | f3160dd927bc5721635d13262fcacaf3c146dce2 (diff) | |
download | prosody-20725d07f974ecc7c6b23be5ab5849305e0a4345.tar.gz prosody-20725d07f974ecc7c6b23be5ab5849305e0a4345.zip |
util.pubsub: Add service:remove_all_subscriptions()
-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; |