Mercurial > prosody-modules
changeset 5168:e00dc913d965
mod_unsubscriber: Revoke roster subscriptions of unreachable hosts
Wrote a version of this long ago, but it was lost to time. Here it is
again, from scratch!
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 19 Feb 2023 17:39:04 +0100 |
parents | 272a8e54f0c8 |
children | 1071a420ff6f |
files | mod_unsubscriber/README.md mod_unsubscriber/mod_unsubscriber.lua |
diffstat | 2 files changed, 32 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_unsubscriber/README.md Sun Feb 19 17:39:04 2023 +0100 @@ -0,0 +1,9 @@ +Over the years, some servers stop working for various reasons, and leave +behind broken roster subscriptions that trigger failing s2s connections. +This module allows cleaning up such cases by unsubscribing local users +from their contacts on those servers. Also works for typos and the like. +Use with care. + +```lua +Component "gmail.com" "unsubscriber" +```
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_unsubscriber/mod_unsubscriber.lua Sun Feb 19 17:39:04 2023 +0100 @@ -0,0 +1,23 @@ +assert(module:get_host_type() == "component", "This module should be loaded as a Component"); + +local st = require "util.stanza"; + +module:hook("presence/bare", function(event) + local origin, stanza = event.origin, event.stanza; + if stanza.attr.type == "probe" then + -- they are subscribed and want our current presence + -- tell them we denied their subscription + local reply = st.reply(stanza) + reply.attr.type = "unsubcribed"; + origin.send(reply); + return true; + elseif stanza.attr.type == nil then + -- they think we are subscribed and sent their current presence + -- tell them we unsubscribe + local reply = st.reply(stanza) + reply.attr.type = "unsubcribe"; + origin.send(reply); + return true; + end + -- fall trough to default error +end);