Software /
code /
prosody-modules
Annotate
mod_report_tracker/mod_report_tracker.lua @ 6230:8c98b1dd1ad3
mod_register_apps: Remove compatibility with 0.11
author | Link Mauve <linkmauve@linkmauve.fr> |
---|---|
date | Wed, 09 Apr 2025 19:05:35 +0200 |
parent | 6064:765e0235c202 |
rev | line source |
---|---|
6063
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 local um = require "core.usermanager"; |
6064
765e0235c202
mod_report_tracker: Add trait for reported accounts, for mod_report_affiliations
Matthew Wild <mwild1@gmail.com>
parents:
6063
diff
changeset
|
2 local cache = require "util.cache"; |
6063
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 local jid = require "util.jid"; |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 local trusted_reporters = module:get_option_inherited_set("trusted_reporters", {}); |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 local reports_received = module:open_store("reports_received"); |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 local xmlns_reporting = "urn:xmpp:reporting:1"; |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 |
6064
765e0235c202
mod_report_tracker: Add trait for reported accounts, for mod_report_affiliations
Matthew Wild <mwild1@gmail.com>
parents:
6063
diff
changeset
|
10 local reported_users = cache.new(256); |
765e0235c202
mod_report_tracker: Add trait for reported accounts, for mod_report_affiliations
Matthew Wild <mwild1@gmail.com>
parents:
6063
diff
changeset
|
11 |
6063
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 local function is_trusted_reporter(reporter_jid) |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 return trusted_reporters:contains(reporter_jid); |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 end |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 function handle_report(event) |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 local stanza = event.stanza; |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 local report = stanza:get_child("report", xmlns_reporting); |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 if not report then |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 return; |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 end |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 local reported_jid = report:get_child_text("jid", "urn:xmpp:jid:0") |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 or stanza:find("{urn:xmpp:forward:0}forwarded/{jabber:client}message@from"); |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 if not reported_jid then |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 module:log("debug", "Discarding report with no JID"); |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 return; |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 elseif jid.host(reported_jid) ~= module.host then |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 module:log("debug", "Discarding report about non-local user"); |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 return; |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 end |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 local reporter_jid = stanza.attr.from; |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 if jid.node(reporter_jid) then |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 module:log("debug", "Discarding report from non-server JID"); |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 return; |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 end |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 local reported_user = jid.node(reported_jid); |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 if not um.user_exists(reported_user, module.host) then |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 module:log("debug", "Discarding report about non-existent user"); |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 return; |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 end |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 if is_trusted_reporter(reporter_jid) then |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 local current_reports = reports_received:get(reported_user, reporter_jid); |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 if not current_reports then |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 current_reports = { |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 first = os.time(); |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 last = os.time(); |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 count = 1; |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 }; |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 else |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 current_reports.last = os.time(); |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 current_reports.count = current_reports.count + 1; |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 end |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 reports_received:set(reported_user, reporter_jid, current_reports); |
6064
765e0235c202
mod_report_tracker: Add trait for reported accounts, for mod_report_affiliations
Matthew Wild <mwild1@gmail.com>
parents:
6063
diff
changeset
|
59 reported_users:set(reported_user, true); |
6063
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 module:log("info", "Received abuse report about <%s> from <%s>", reported_jid, reporter_jid); |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 module:fire_event(module.name.."/account-reported", { |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 report_from = reporter_jid; |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 reported_user = reported_user; |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 report = report; |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 }); |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 else |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 module:log("warn", "Discarding abuse report about <%s> from untrusted source <%s>", reported_jid, reporter_jid); |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 end |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
72 -- Message was handled |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
73 return true; |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 end |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 |
b04518fa0987
mod_report_tracker: Keep track of spam/abuse reports about local JIDs
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
76 module:hook("message/host", handle_report); |
6064
765e0235c202
mod_report_tracker: Add trait for reported accounts, for mod_report_affiliations
Matthew Wild <mwild1@gmail.com>
parents:
6063
diff
changeset
|
77 |
765e0235c202
mod_report_tracker: Add trait for reported accounts, for mod_report_affiliations
Matthew Wild <mwild1@gmail.com>
parents:
6063
diff
changeset
|
78 module:add_item("account-trait", { |
765e0235c202
mod_report_tracker: Add trait for reported accounts, for mod_report_affiliations
Matthew Wild <mwild1@gmail.com>
parents:
6063
diff
changeset
|
79 name = "reported-by-trusted-server"; |
765e0235c202
mod_report_tracker: Add trait for reported accounts, for mod_report_affiliations
Matthew Wild <mwild1@gmail.com>
parents:
6063
diff
changeset
|
80 prob_bad_true = 0.80; |
765e0235c202
mod_report_tracker: Add trait for reported accounts, for mod_report_affiliations
Matthew Wild <mwild1@gmail.com>
parents:
6063
diff
changeset
|
81 prob_bad_false = 0.50; |
765e0235c202
mod_report_tracker: Add trait for reported accounts, for mod_report_affiliations
Matthew Wild <mwild1@gmail.com>
parents:
6063
diff
changeset
|
82 }); |
765e0235c202
mod_report_tracker: Add trait for reported accounts, for mod_report_affiliations
Matthew Wild <mwild1@gmail.com>
parents:
6063
diff
changeset
|
83 |
765e0235c202
mod_report_tracker: Add trait for reported accounts, for mod_report_affiliations
Matthew Wild <mwild1@gmail.com>
parents:
6063
diff
changeset
|
84 module:hook("get-account-traits", function (event) |
765e0235c202
mod_report_tracker: Add trait for reported accounts, for mod_report_affiliations
Matthew Wild <mwild1@gmail.com>
parents:
6063
diff
changeset
|
85 local username = event.username; |
765e0235c202
mod_report_tracker: Add trait for reported accounts, for mod_report_affiliations
Matthew Wild <mwild1@gmail.com>
parents:
6063
diff
changeset
|
86 local reported = reported_users:get(username); |
765e0235c202
mod_report_tracker: Add trait for reported accounts, for mod_report_affiliations
Matthew Wild <mwild1@gmail.com>
parents:
6063
diff
changeset
|
87 if reported == nil then |
765e0235c202
mod_report_tracker: Add trait for reported accounts, for mod_report_affiliations
Matthew Wild <mwild1@gmail.com>
parents:
6063
diff
changeset
|
88 -- Check storage, update cache |
765e0235c202
mod_report_tracker: Add trait for reported accounts, for mod_report_affiliations
Matthew Wild <mwild1@gmail.com>
parents:
6063
diff
changeset
|
89 reported = not not reports_received:get(username); |
765e0235c202
mod_report_tracker: Add trait for reported accounts, for mod_report_affiliations
Matthew Wild <mwild1@gmail.com>
parents:
6063
diff
changeset
|
90 reported_users:set(username, reported); |
765e0235c202
mod_report_tracker: Add trait for reported accounts, for mod_report_affiliations
Matthew Wild <mwild1@gmail.com>
parents:
6063
diff
changeset
|
91 end |
765e0235c202
mod_report_tracker: Add trait for reported accounts, for mod_report_affiliations
Matthew Wild <mwild1@gmail.com>
parents:
6063
diff
changeset
|
92 event.traits["reported-by-trusted-server"] = reported; |
765e0235c202
mod_report_tracker: Add trait for reported accounts, for mod_report_affiliations
Matthew Wild <mwild1@gmail.com>
parents:
6063
diff
changeset
|
93 end); |