Mercurial > prosody-modules
changeset 5238:94472eb41d0a
mod_spam_report_forwarder: Forward spam/abuse reports to one or more JIDs
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sat, 11 Mar 2023 20:20:37 +0000 |
parents | 3354f943c1fa |
children | 8620a635106e |
files | mod_spam_report_forwarder/README.markdown mod_spam_report_forwarder/mod_spam_report_forwarder.lua |
diffstat | 2 files changed, 69 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /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 `<message>` stanza, and adds a `<jid/>` +element (borrowed from XEP-0268): + +```xml +<message from="prosody.example" to="destination.example"> + <report xmlns="urn:xmpp:reporting:1" reason="urn:xmpp:reporting:spam"> + <jid xmlns="urn:xmpp:jid:0">spammer@bad.example</jid> + <text> + Never came trouble to my house like this. + </text> + </report> +</message> +```
--- /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);