mod_spam_reporting/mod_spam_reporting.lua
author Kim Alvefur <zash@zash.se>
Wed, 25 Aug 2021 15:05:56 +0200
changeset 4660 4eb684ab440c
parent 4616 fe24bda72838
child 4662 ff68cc37b400
permissions -rw-r--r--
mod_spam_reporting: Handle unknown or future report types An unrecognised value in the 'reason' attribute would have caused an error. This change makes it mirror the behavior for the previous XEP version.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2284
ebe360f59119 mod_spam_reporting: Add Copyright header
Kim Alvefur <zash@zash.se>
parents: 2283
diff changeset
     1
-- XEP-0377: Spam Reporting for Prosody
4660
4eb684ab440c mod_spam_reporting: Handle unknown or future report types
Kim Alvefur <zash@zash.se>
parents: 4616
diff changeset
     2
-- Copyright (C) 2016-2021 Kim Alvefur
2284
ebe360f59119 mod_spam_reporting: Add Copyright header
Kim Alvefur <zash@zash.se>
parents: 2283
diff changeset
     3
--
ebe360f59119 mod_spam_reporting: Add Copyright header
Kim Alvefur <zash@zash.se>
parents: 2283
diff changeset
     4
-- This file is MIT/X11 licensed.
2270
33a0988e5f1c mod_spam_reporting: Basic implementation of XEP-0377: Spam Reporting
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     5
2285
0899eeb0b3f7 mod_spam_reporting: Apply JID prepping
Kim Alvefur <zash@zash.se>
parents: 2284
diff changeset
     6
local jid_prep = require "util.jid".prep;
0899eeb0b3f7 mod_spam_reporting: Apply JID prepping
Kim Alvefur <zash@zash.se>
parents: 2284
diff changeset
     7
2270
33a0988e5f1c mod_spam_reporting: Basic implementation of XEP-0377: Spam Reporting
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     8
module:depends("blocklist");
33a0988e5f1c mod_spam_reporting: Basic implementation of XEP-0377: Spam Reporting
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     9
33a0988e5f1c mod_spam_reporting: Basic implementation of XEP-0377: Spam Reporting
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
module:add_feature("urn:xmpp:reporting:0");
33a0988e5f1c mod_spam_reporting: Basic implementation of XEP-0377: Spam Reporting
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    11
module:add_feature("urn:xmpp:reporting:reason:spam:0");
33a0988e5f1c mod_spam_reporting: Basic implementation of XEP-0377: Spam Reporting
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
module:add_feature("urn:xmpp:reporting:reason:abuse:0");
4616
fe24bda72838 mod_spam_reporting: Add support for XEP-0377 0.3
Martin Dosch <martin@mdosch.de>
parents: 2302
diff changeset
    13
module:add_feature("urn:xmpp:reporting:1");
2270
33a0988e5f1c mod_spam_reporting: Basic implementation of XEP-0377: Spam Reporting
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    14
2279
7f228bf82fe5 mod_spam_reporting: Hook the blocking action, not blocklist fetching
Kim Alvefur <zash@zash.se>
parents: 2271
diff changeset
    15
module:hook("iq-set/self/urn:xmpp:blocking:block", function (event)
2270
33a0988e5f1c mod_spam_reporting: Basic implementation of XEP-0377: Spam Reporting
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    16
	for item in event.stanza.tags[1]:childtags("item") do
33a0988e5f1c mod_spam_reporting: Basic implementation of XEP-0377: Spam Reporting
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    17
		local report = item:get_child("report", "urn:xmpp:reporting:0");
2285
0899eeb0b3f7 mod_spam_reporting: Apply JID prepping
Kim Alvefur <zash@zash.se>
parents: 2284
diff changeset
    18
		local jid = jid_prep(item.attr.jid);
2280
1b12ccbbd9b2 mod_spam_reporting: Continue looking for spam reports even when one <item> does not have one
Kim Alvefur <zash@zash.se>
parents: 2279
diff changeset
    19
		if report and jid then
1b12ccbbd9b2 mod_spam_reporting: Continue looking for spam reports even when one <item> does not have one
Kim Alvefur <zash@zash.se>
parents: 2279
diff changeset
    20
			local type = report:get_child("spam") and "spam" or
1b12ccbbd9b2 mod_spam_reporting: Continue looking for spam reports even when one <item> does not have one
Kim Alvefur <zash@zash.se>
parents: 2279
diff changeset
    21
				report:get_child("abuse") and "abuse" or
1b12ccbbd9b2 mod_spam_reporting: Continue looking for spam reports even when one <item> does not have one
Kim Alvefur <zash@zash.se>
parents: 2279
diff changeset
    22
				"unknown";
2287
bd1117002a9b mod_spam_reporting: Correctly check <text> child, not <reason>
Kim Alvefur <zash@zash.se>
parents: 2285
diff changeset
    23
			local reason = report:get_child_text("text") or "no reason given";
2280
1b12ccbbd9b2 mod_spam_reporting: Continue looking for spam reports even when one <item> does not have one
Kim Alvefur <zash@zash.se>
parents: 2279
diff changeset
    24
			module:log("warn", "Received report of %s from JID '%s', %s", type, jid, reason);
2281
bad5dd466427 mod_spam_reporting: Fire an event to ease processing from other modules
Kim Alvefur <zash@zash.se>
parents: 2280
diff changeset
    25
			module:fire_event(module.name.."/"..type.."-report", {
2302
a59671b3dd43 mod_spam_reporting: Include jid in event
Kim Alvefur <zash@zash.se>
parents: 2287
diff changeset
    26
				origin = event.origin, stanza = event.stanza, jid = jid,
2281
bad5dd466427 mod_spam_reporting: Fire an event to ease processing from other modules
Kim Alvefur <zash@zash.se>
parents: 2280
diff changeset
    27
				item = item, report = report, reason = reason, });
4616
fe24bda72838 mod_spam_reporting: Add support for XEP-0377 0.3
Martin Dosch <martin@mdosch.de>
parents: 2302
diff changeset
    28
		else
fe24bda72838 mod_spam_reporting: Add support for XEP-0377 0.3
Martin Dosch <martin@mdosch.de>
parents: 2302
diff changeset
    29
			report = item:get_child("report", "urn:xmpp:reporting:1");
fe24bda72838 mod_spam_reporting: Add support for XEP-0377 0.3
Martin Dosch <martin@mdosch.de>
parents: 2302
diff changeset
    30
			if report and jid then
4660
4eb684ab440c mod_spam_reporting: Handle unknown or future report types
Kim Alvefur <zash@zash.se>
parents: 4616
diff changeset
    31
				local type = "unknown";
4616
fe24bda72838 mod_spam_reporting: Add support for XEP-0377 0.3
Martin Dosch <martin@mdosch.de>
parents: 2302
diff changeset
    32
				if report.attr.reason == "urn:xmpp:reporting:abuse" then
fe24bda72838 mod_spam_reporting: Add support for XEP-0377 0.3
Martin Dosch <martin@mdosch.de>
parents: 2302
diff changeset
    33
					type = "abuse";
fe24bda72838 mod_spam_reporting: Add support for XEP-0377 0.3
Martin Dosch <martin@mdosch.de>
parents: 2302
diff changeset
    34
				end
fe24bda72838 mod_spam_reporting: Add support for XEP-0377 0.3
Martin Dosch <martin@mdosch.de>
parents: 2302
diff changeset
    35
				if report.attr.reason == "urn:xmpp:reporting:spam" then
fe24bda72838 mod_spam_reporting: Add support for XEP-0377 0.3
Martin Dosch <martin@mdosch.de>
parents: 2302
diff changeset
    36
					type = "spam";
fe24bda72838 mod_spam_reporting: Add support for XEP-0377 0.3
Martin Dosch <martin@mdosch.de>
parents: 2302
diff changeset
    37
				end
fe24bda72838 mod_spam_reporting: Add support for XEP-0377 0.3
Martin Dosch <martin@mdosch.de>
parents: 2302
diff changeset
    38
				local reason = report:get_child_text("text") or "no reason given";
fe24bda72838 mod_spam_reporting: Add support for XEP-0377 0.3
Martin Dosch <martin@mdosch.de>
parents: 2302
diff changeset
    39
				module:log("warn", "Received report of %s from JID '%s', %s", type, jid, reason);
fe24bda72838 mod_spam_reporting: Add support for XEP-0377 0.3
Martin Dosch <martin@mdosch.de>
parents: 2302
diff changeset
    40
				module:fire_event(module.name.."/"..type.."-report", {
fe24bda72838 mod_spam_reporting: Add support for XEP-0377 0.3
Martin Dosch <martin@mdosch.de>
parents: 2302
diff changeset
    41
					origin = event.origin, stanza = event.stanza, jid = jid,
fe24bda72838 mod_spam_reporting: Add support for XEP-0377 0.3
Martin Dosch <martin@mdosch.de>
parents: 2302
diff changeset
    42
					item = item, report = report, reason = reason, });
fe24bda72838 mod_spam_reporting: Add support for XEP-0377 0.3
Martin Dosch <martin@mdosch.de>
parents: 2302
diff changeset
    43
			end
2280
1b12ccbbd9b2 mod_spam_reporting: Continue looking for spam reports even when one <item> does not have one
Kim Alvefur <zash@zash.se>
parents: 2279
diff changeset
    44
		end
2270
33a0988e5f1c mod_spam_reporting: Basic implementation of XEP-0377: Spam Reporting
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    45
	end
33a0988e5f1c mod_spam_reporting: Basic implementation of XEP-0377: Spam Reporting
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    46
end, 1);