# HG changeset patch # User Matthew Wild # Date 1678566037 0 # Node ID 94472eb41d0a88561ce81b04b16cbe35ab47fafc # Parent 3354f943c1fa89ffdeb6122560417fa78fafa7ce mod_spam_report_forwarder: Forward spam/abuse reports to one or more JIDs diff -r 3354f943c1fa -r 94472eb41d0a mod_spam_report_forwarder/README.markdown --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_spam_report_forwarder/README.markdown Sat Mar 11 20:20:37 2023 +0000 @@ -0,0 +1,48 @@ +--- +labels: +- 'Stage-Beta' +summary: 'Forward spam/abuse reports to a JID' +--- + +This module forwards spam/abuse reports (e.g. those submitted by users via +XEP-0377 via mod_spam_reporting) to one or more JIDs. + +## Configuration + +Install and enable the module the same as any other. + +There is a single option, `spam_report_destinations` which accepts a list of +JIDs to send reports to. + +For example: + +```lua +modules_enabled = { + --- + "spam_reporting"; + "spam_report_forwarder"; + --- +} + +spam_report_destinations = { "antispam.example.com" } +``` + +## Protocol + +This section is intended for developers. + +XEP-0377 assumes the report is embedded within another protocol such as +XEP-0191, and doesn't specify a format for communicating "standalone" reports. +This module transmits them inside a `` stanza, and adds a `` +element (borrowed from XEP-0268): + +```xml + + + spammer@bad.example + + Never came trouble to my house like this. + + + +``` diff -r 3354f943c1fa -r 94472eb41d0a mod_spam_report_forwarder/mod_spam_report_forwarder.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_spam_report_forwarder/mod_spam_report_forwarder.lua Sat Mar 11 20:20:37 2023 +0000 @@ -0,0 +1,21 @@ +local st = require "util.stanza"; + +local destinations = module:get_option_set("spam_report_destinations", {}); + +function forward_report(event) + local report = st.clone(event.report); + report:text_tag("jid", event.jid, { xmlns = "urn:xmpp:jid:0" }); + + local message = st.message({ from = module.host }) + :add_child(report); + + for destination in destinations do + local m = st.clone(message); + m.attr.to = destination; + module:send(m); + end +end + +module:hook("spam_reporting/abuse-report", forward_report, -1); +module:hook("spam_reporting/spam-report", forward_report, -1); +module:hook("spam_reporting/unknown-report", forward_report, -1);