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!
--- /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);