Mercurial > prosody-modules
annotate mod_map/mod_map.lua @ 5173:460f78654864
mod_muc_rtbl: also filter messages
This was a bit tricky because we don't want to run the JIDs
through SHA256 on each message. Took a while to come up with this
simple plan of just caching the SHA256 of the JIDs on the
occupants.
This will leave some dirt in the occupants after unloading the
module, but that should be ok; once they cycle the room, the
hashes will be gone.
This is direly needed, otherwise, there is a tight race between
the moderation activities and the actors joining the room.
| author | Jonas Schäfer <jonas@wielicki.name> |
|---|---|
| date | Tue, 21 Feb 2023 21:37:27 +0100 |
| parents | d0c2f001735f |
| children |
| rev | line source |
|---|---|
|
3496
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 local st = require "util.stanza"; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 local jid_bare = require "util.jid".bare; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 local rsm = require "util.rsm"; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 local dataform = require "util.dataforms".new; |
|
3651
95f7291db669
mod_map: Include timestamps of first/last message (if reported)
Kim Alvefur <zash@zash.se>
parents:
3650
diff
changeset
|
6 local datetime = require "util.datetime".datetime; |
|
3496
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 local archive = module:open_store("archive", "archive"); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 local query_form = dataform { |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 { name = "with"; type = "jid-single"; }; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 { name = "start"; type = "text-single" }; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 { name = "end"; type = "text-single"; }; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 }; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 if not archive.summary then |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 module:log("error", "The archive:summary() API is not supported by %s", archive._provided_by); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 return |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 end |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 module:hook("iq-get/self/xmpp:prosody.im/mod_map:summary", function(event) |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 local origin, stanza = event.origin, event.stanza; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 local query = stanza.tags[1]; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 -- Search query parameters |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 local qwith, qstart, qend; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 local form = query:get_child("x", "jabber:x:data"); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 if form then |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 local err; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 form, err = query_form:data(form); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 if err then |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 origin.send(st.error_reply(stanza, "modify", "bad-request", select(2, next(err)))); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 return true; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 end |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 qwith, qstart, qend = form["with"], form["start"], form["end"]; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 qwith = qwith and jid_bare(qwith); -- dataforms does jidprep |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 end |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 local qset = rsm.get(query); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 local qmax = qset and qset.max; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 local before, after = qset and qset.before, qset and qset.after; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 if type(before) ~= "string" then before = nil; end |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
45 local summary = archive:summary(origin.username, { |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
46 start = qstart; ["end"] = qend; -- Time range |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
47 with = qwith; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
48 limit = qmax; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
49 before = before; after = after; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
50 }); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
51 if not summary then |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 module:send(st.error_reply(stanza, "wait", "internal-server-error")); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
53 return true; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
54 end |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
55 |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
56 local reply = st.reply(stanza); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
57 reply:tag("summary", { xmlns = "xmpp:prosody.im/mod_map" }); |
|
3650
30743ae1fe1a
mod_map: Update for new API in prosody 1e2b444acb72
Kim Alvefur <zash@zash.se>
parents:
3496
diff
changeset
|
58 for jid, count in pairs(summary.counts) do |
|
3496
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
59 reply:tag("item", { jid = jid }); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
60 if type(count) == "number" then |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
61 reply:text_tag("count", ("%d"):format(count)); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
62 end |
|
3651
95f7291db669
mod_map: Include timestamps of first/last message (if reported)
Kim Alvefur <zash@zash.se>
parents:
3650
diff
changeset
|
63 if summary.earliest and summary.earliest[jid] then |
|
95f7291db669
mod_map: Include timestamps of first/last message (if reported)
Kim Alvefur <zash@zash.se>
parents:
3650
diff
changeset
|
64 reply:text_tag("start", datetime(summary.earliest[jid])); |
|
95f7291db669
mod_map: Include timestamps of first/last message (if reported)
Kim Alvefur <zash@zash.se>
parents:
3650
diff
changeset
|
65 end |
|
95f7291db669
mod_map: Include timestamps of first/last message (if reported)
Kim Alvefur <zash@zash.se>
parents:
3650
diff
changeset
|
66 if summary.latest and summary.latest[jid] then |
|
95f7291db669
mod_map: Include timestamps of first/last message (if reported)
Kim Alvefur <zash@zash.se>
parents:
3650
diff
changeset
|
67 reply:text_tag("end", datetime(summary.latest[jid])); |
|
95f7291db669
mod_map: Include timestamps of first/last message (if reported)
Kim Alvefur <zash@zash.se>
parents:
3650
diff
changeset
|
68 end |
|
3652
d0c2f001735f
mod_map: Include last body text
Kim Alvefur <zash@zash.se>
parents:
3651
diff
changeset
|
69 if summary.body and summary.body[jid] then |
|
d0c2f001735f
mod_map: Include last body text
Kim Alvefur <zash@zash.se>
parents:
3651
diff
changeset
|
70 reply:text_tag("body", summary.body[jid]); |
|
d0c2f001735f
mod_map: Include last body text
Kim Alvefur <zash@zash.se>
parents:
3651
diff
changeset
|
71 end |
|
3496
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
72 reply:up(); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
73 end |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
74 |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
75 module:send(reply); |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
76 return true; |
|
262e68821f3f
mod_map: Experimental module exposing MAM summary
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 end); |
