Software / code / prosody-modules
Annotate
mod_report_tracker/mod_report_tracker.lua @ 6310:30adcea825c3
mod_conversejs: Fix hostname set as default username (thanks roughnecks)
In login mode, it seems jid is used as default value in the login field
but it was only needed in anonymous mode.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Wed, 18 Jun 2025 14:28:38 +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); |