Mercurial > prosody-modules
annotate mod_spam_reporting/mod_spam_reporting.lua @ 5536:96dec7681af8
mod_firewall: Update user marks to store instantly via map store
The original approach was to keep marks in memory only, and persist them at
shutdown. That saves I/O, at the cost of potentially losing marks on an
unclean shutdown.
This change persists marks instantly, which may have some performance overhead
but should be more "correct".
It also splits the marking/unmarking into an event which may be watched or
even fired by other modules.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 08 Jun 2023 16:20:42 +0100 |
parents | a357c3e3bd32 |
children |
rev | line source |
---|---|
2280
ebe360f59119
mod_spam_reporting: Add Copyright header
Kim Alvefur <zash@zash.se>
parents:
2279
diff
changeset
|
1 -- XEP-0377: Spam Reporting for Prosody |
4656
4eb684ab440c
mod_spam_reporting: Handle unknown or future report types
Kim Alvefur <zash@zash.se>
parents:
4612
diff
changeset
|
2 -- Copyright (C) 2016-2021 Kim Alvefur |
2280
ebe360f59119
mod_spam_reporting: Add Copyright header
Kim Alvefur <zash@zash.se>
parents:
2279
diff
changeset
|
3 -- |
ebe360f59119
mod_spam_reporting: Add Copyright header
Kim Alvefur <zash@zash.se>
parents:
2279
diff
changeset
|
4 -- This file is MIT/X11 licensed. |
2266
33a0988e5f1c
mod_spam_reporting: Basic implementation of XEP-0377: Spam Reporting
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 |
2281
0899eeb0b3f7
mod_spam_reporting: Apply JID prepping
Kim Alvefur <zash@zash.se>
parents:
2280
diff
changeset
|
6 local jid_prep = require "util.jid".prep; |
0899eeb0b3f7
mod_spam_reporting: Apply JID prepping
Kim Alvefur <zash@zash.se>
parents:
2280
diff
changeset
|
7 |
2266
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"); |
4612
fe24bda72838
mod_spam_reporting: Add support for XEP-0377 0.3
Martin Dosch <martin@mdosch.de>
parents:
2298
diff
changeset
|
13 module:add_feature("urn:xmpp:reporting:1"); |
2266
33a0988e5f1c
mod_spam_reporting: Basic implementation of XEP-0377: Spam Reporting
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 |
2275
7f228bf82fe5
mod_spam_reporting: Hook the blocking action, not blocklist fetching
Kim Alvefur <zash@zash.se>
parents:
2267
diff
changeset
|
15 module:hook("iq-set/self/urn:xmpp:blocking:block", function (event) |
2266
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 |
4660
ce826ac8496e
mod_spam_reporting: Refactor to deduplicate code
Kim Alvefur <zash@zash.se>
parents:
4659
diff
changeset
|
17 local report = item:get_child("report", "urn:xmpp:reporting:0") or item:get_child("report", "urn:xmpp:reporting:1"); |
2281
0899eeb0b3f7
mod_spam_reporting: Apply JID prepping
Kim Alvefur <zash@zash.se>
parents:
2280
diff
changeset
|
18 local jid = jid_prep(item.attr.jid); |
2276
1b12ccbbd9b2
mod_spam_reporting: Continue looking for spam reports even when one <item> does not have one
Kim Alvefur <zash@zash.se>
parents:
2275
diff
changeset
|
19 if report and jid then |
4660
ce826ac8496e
mod_spam_reporting: Refactor to deduplicate code
Kim Alvefur <zash@zash.se>
parents:
4659
diff
changeset
|
20 local report_type, reason; |
ce826ac8496e
mod_spam_reporting: Refactor to deduplicate code
Kim Alvefur <zash@zash.se>
parents:
4659
diff
changeset
|
21 if report.attr.xmlns == "urn:xmpp:reporting:0" then |
ce826ac8496e
mod_spam_reporting: Refactor to deduplicate code
Kim Alvefur <zash@zash.se>
parents:
4659
diff
changeset
|
22 report_type = report:get_child("spam") and "spam" or report:get_child("abuse") and "abuse" or "unknown"; |
ce826ac8496e
mod_spam_reporting: Refactor to deduplicate code
Kim Alvefur <zash@zash.se>
parents:
4659
diff
changeset
|
23 reason = report:get_child_text("text"); |
ce826ac8496e
mod_spam_reporting: Refactor to deduplicate code
Kim Alvefur <zash@zash.se>
parents:
4659
diff
changeset
|
24 elseif report.attr.xmlns == "urn:xmpp:reporting:1" then |
ce826ac8496e
mod_spam_reporting: Refactor to deduplicate code
Kim Alvefur <zash@zash.se>
parents:
4659
diff
changeset
|
25 report_type = "unknown"; |
4612
fe24bda72838
mod_spam_reporting: Add support for XEP-0377 0.3
Martin Dosch <martin@mdosch.de>
parents:
2298
diff
changeset
|
26 if report.attr.reason == "urn:xmpp:reporting:abuse" then |
4659
cc8b221f137c
mod_spam_reporting: Rename variable avoid name clash with global function
Kim Alvefur <zash@zash.se>
parents:
4658
diff
changeset
|
27 report_type = "abuse"; |
4612
fe24bda72838
mod_spam_reporting: Add support for XEP-0377 0.3
Martin Dosch <martin@mdosch.de>
parents:
2298
diff
changeset
|
28 end |
fe24bda72838
mod_spam_reporting: Add support for XEP-0377 0.3
Martin Dosch <martin@mdosch.de>
parents:
2298
diff
changeset
|
29 if report.attr.reason == "urn:xmpp:reporting:spam" then |
4659
cc8b221f137c
mod_spam_reporting: Rename variable avoid name clash with global function
Kim Alvefur <zash@zash.se>
parents:
4658
diff
changeset
|
30 report_type = "spam"; |
4612
fe24bda72838
mod_spam_reporting: Add support for XEP-0377 0.3
Martin Dosch <martin@mdosch.de>
parents:
2298
diff
changeset
|
31 end |
4660
ce826ac8496e
mod_spam_reporting: Refactor to deduplicate code
Kim Alvefur <zash@zash.se>
parents:
4659
diff
changeset
|
32 reason = report:get_child_text("text"); |
ce826ac8496e
mod_spam_reporting: Refactor to deduplicate code
Kim Alvefur <zash@zash.se>
parents:
4659
diff
changeset
|
33 end |
ce826ac8496e
mod_spam_reporting: Refactor to deduplicate code
Kim Alvefur <zash@zash.se>
parents:
4659
diff
changeset
|
34 |
ce826ac8496e
mod_spam_reporting: Refactor to deduplicate code
Kim Alvefur <zash@zash.se>
parents:
4659
diff
changeset
|
35 if report_type then |
4662
a357c3e3bd32
mod_spam_reporting: Fallback string for missing 'reason'
Kim Alvefur <zash@zash.se>
parents:
4661
diff
changeset
|
36 module:log("warn", "Received report of %s from JID '%s', %s", report_type, jid, reason or "no reason given"); |
4659
cc8b221f137c
mod_spam_reporting: Rename variable avoid name clash with global function
Kim Alvefur <zash@zash.se>
parents:
4658
diff
changeset
|
37 module:fire_event(module.name.."/"..report_type.."-report", { |
4612
fe24bda72838
mod_spam_reporting: Add support for XEP-0377 0.3
Martin Dosch <martin@mdosch.de>
parents:
2298
diff
changeset
|
38 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:
2298
diff
changeset
|
39 item = item, report = report, reason = reason, }); |
fe24bda72838
mod_spam_reporting: Add support for XEP-0377 0.3
Martin Dosch <martin@mdosch.de>
parents:
2298
diff
changeset
|
40 end |
2276
1b12ccbbd9b2
mod_spam_reporting: Continue looking for spam reports even when one <item> does not have one
Kim Alvefur <zash@zash.se>
parents:
2275
diff
changeset
|
41 end |
2266
33a0988e5f1c
mod_spam_reporting: Basic implementation of XEP-0377: Spam Reporting
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 end |
33a0988e5f1c
mod_spam_reporting: Basic implementation of XEP-0377: Spam Reporting
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 end, 1); |