Mercurial > prosody-modules
annotate mod_muc_moderation/mod_muc_moderation.lua @ 5668:ecfd7aece33b
mod_measure_modules: Report module statuses via OpenMetrics
Someone in the chat asked about a health check endpoint, which reminded
me of mod_http_status, which provides access to module statuses with
full details. After that, this idea came about, which seems natural.
As noted in the README, it could be used to monitor that critical
modules are in fact loaded correctly.
As more modules use the status API, the more useful this module and
mod_http_status becomes.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 06 Oct 2023 18:34:39 +0200 |
parents | 2e30af180da5 |
children | 5ccc03c33158 |
rev | line source |
---|---|
3900
06971a04216f
mod_muc_moderation: Add a copyright header
Kim Alvefur <zash@zash.se>
parents:
3897
diff
changeset
|
1 -- mod_muc_moderation |
06971a04216f
mod_muc_moderation: Add a copyright header
Kim Alvefur <zash@zash.se>
parents:
3897
diff
changeset
|
2 -- |
4754 | 3 -- Copyright (C) 2015-2021 Kim Alvefur |
3900
06971a04216f
mod_muc_moderation: Add a copyright header
Kim Alvefur <zash@zash.se>
parents:
3897
diff
changeset
|
4 -- |
06971a04216f
mod_muc_moderation: Add a copyright header
Kim Alvefur <zash@zash.se>
parents:
3897
diff
changeset
|
5 -- This file is MIT licensed. |
06971a04216f
mod_muc_moderation: Add a copyright header
Kim Alvefur <zash@zash.se>
parents:
3897
diff
changeset
|
6 -- |
06971a04216f
mod_muc_moderation: Add a copyright header
Kim Alvefur <zash@zash.se>
parents:
3897
diff
changeset
|
7 -- Implements: XEP-0425: Message Moderation |
06971a04216f
mod_muc_moderation: Add a copyright header
Kim Alvefur <zash@zash.se>
parents:
3897
diff
changeset
|
8 -- |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 -- Imports |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 local dt = require "util.datetime"; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 local id = require "util.id"; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 local jid = require "util.jid"; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 local st = require "util.stanza"; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 -- Plugin dependencies |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 local mod_muc = module:depends "muc"; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 local muc_util = module:require "muc/util"; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 local valid_roles = muc_util.valid_roles; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 local muc_log_archive = module:open_store("muc_log", "archive"); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 if not muc_log_archive.set then |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 module:log("warn", "Selected archive storage module does not support message replacement, no tombstones will be saved"); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 -- Namespaces |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 local xmlns_fasten = "urn:xmpp:fasten:0"; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 local xmlns_moderate = "urn:xmpp:message-moderate:0"; |
5611
06fad22672e1
mod_muc_moderation: Copy XEP-0421 occupant-id from retracted message
Kim Alvefur <zash@zash.se>
parents:
5170
diff
changeset
|
30 local xmlns_occupant_id = "urn:xmpp:occupant-id:0"; |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 local xmlns_retract = "urn:xmpp:message-retract:0"; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 -- Discovering support |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 module:hook("muc-disco#info", function (event) |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 event.reply:tag("feature", { var = xmlns_moderate }):up(); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 end); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 |
5169
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
38 -- TODO error registry, requires Prosody 0.12+ |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 |
5169
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
40 -- moderate : function (string, string, string, boolean, string) : boolean, enum, enum, string |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
41 local function moderate(actor, room_jid, stanza_id, retract, reason) |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 local room_node = jid.split(room_jid); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 local room = mod_muc.get_room_from_jid(room_jid); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 |
5170
4d6af8950016
mod_muc_moderation: Derive role from reserved nickname if occupant
Kim Alvefur <zash@zash.se>
parents:
5169
diff
changeset
|
45 -- Permissions is based on role, which is a property of a current occupant, |
4d6af8950016
mod_muc_moderation: Derive role from reserved nickname if occupant
Kim Alvefur <zash@zash.se>
parents:
5169
diff
changeset
|
46 -- so check if the actor is an occupant, otherwise if they have a reserved |
4d6af8950016
mod_muc_moderation: Derive role from reserved nickname if occupant
Kim Alvefur <zash@zash.se>
parents:
5169
diff
changeset
|
47 -- nickname that can be used to retrieve the role. |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
48 local actor_nick = room:get_occupant_jid(actor); |
4750
98429b646bd4
mod_muc_moderation: Use reserved nickname as fallback
Kim Alvefur <zash@zash.se>
parents:
4749
diff
changeset
|
49 if not actor_nick then |
98429b646bd4
mod_muc_moderation: Use reserved nickname as fallback
Kim Alvefur <zash@zash.se>
parents:
4749
diff
changeset
|
50 local reserved_nickname = room:get_affiliation_data(jid.bare(actor), "reserved_nickname"); |
98429b646bd4
mod_muc_moderation: Use reserved nickname as fallback
Kim Alvefur <zash@zash.se>
parents:
4749
diff
changeset
|
51 if reserved_nickname then |
4806
80f871bedcdf
mod_muc_moderation: Fix actor JID when moderated from outside (thanks lovetox)
Kim Alvefur <zash@zash.se>
parents:
4754
diff
changeset
|
52 actor_nick = room.jid .. "/" .. reserved_nickname; |
4750
98429b646bd4
mod_muc_moderation: Use reserved nickname as fallback
Kim Alvefur <zash@zash.se>
parents:
4749
diff
changeset
|
53 end |
98429b646bd4
mod_muc_moderation: Use reserved nickname as fallback
Kim Alvefur <zash@zash.se>
parents:
4749
diff
changeset
|
54 end |
98429b646bd4
mod_muc_moderation: Use reserved nickname as fallback
Kim Alvefur <zash@zash.se>
parents:
4749
diff
changeset
|
55 |
5170
4d6af8950016
mod_muc_moderation: Derive role from reserved nickname if occupant
Kim Alvefur <zash@zash.se>
parents:
5169
diff
changeset
|
56 -- Retrieve their current role, iff they are in the room, otherwise what they |
4d6af8950016
mod_muc_moderation: Derive role from reserved nickname if occupant
Kim Alvefur <zash@zash.se>
parents:
5169
diff
changeset
|
57 -- would have based on affiliation. |
4d6af8950016
mod_muc_moderation: Derive role from reserved nickname if occupant
Kim Alvefur <zash@zash.se>
parents:
5169
diff
changeset
|
58 local affiliation = room:get_affiliation(actor); |
4d6af8950016
mod_muc_moderation: Derive role from reserved nickname if occupant
Kim Alvefur <zash@zash.se>
parents:
5169
diff
changeset
|
59 local role = room:get_role(actor_nick) or room:get_default_role(affiliation); |
4d6af8950016
mod_muc_moderation: Derive role from reserved nickname if occupant
Kim Alvefur <zash@zash.se>
parents:
5169
diff
changeset
|
60 if valid_roles[role or "none"] < valid_roles.moderator then |
4d6af8950016
mod_muc_moderation: Derive role from reserved nickname if occupant
Kim Alvefur <zash@zash.se>
parents:
5169
diff
changeset
|
61 return false, "auth", "forbidden", "You need a role of at least 'moderator'"; |
4d6af8950016
mod_muc_moderation: Derive role from reserved nickname if occupant
Kim Alvefur <zash@zash.se>
parents:
5169
diff
changeset
|
62 end |
4d6af8950016
mod_muc_moderation: Derive role from reserved nickname if occupant
Kim Alvefur <zash@zash.se>
parents:
5169
diff
changeset
|
63 |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
64 -- Original stanza to base tombstone on |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
65 local original, err; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
66 if muc_log_archive.get then |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
67 original, err = muc_log_archive:get(room_node, stanza_id); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
68 else |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
69 -- COMPAT missing :get API |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
70 err = "item-not-found"; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
71 for i, item in muc_log_archive:find(room_node, { key = stanza_id, limit = 1 }) do |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
72 if i == stanza_id then |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
73 original, err = item, nil; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
74 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
75 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
76 end |
5169
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
77 |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
78 if not original then |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
79 if err == "item-not-found" then |
5169
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
80 return false, "modify", "item-not-found"; |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
81 else |
5169
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
82 return false, "wait", "internal-server-error"; |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
83 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
84 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
85 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
86 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
87 local announcement = st.message({ from = room_jid, type = "groupchat", id = id.medium(), }) |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
88 :tag("apply-to", { xmlns = xmlns_fasten, id = stanza_id }) |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
89 :tag("moderated", { xmlns = xmlns_moderate, by = actor_nick }) |
4814
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
90 |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
91 if retract then |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
92 announcement:tag("retract", { xmlns = xmlns_retract }):up(); |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
93 end |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
94 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
95 if reason then |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
96 announcement:text_tag("reason", reason); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
97 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
98 |
5611
06fad22672e1
mod_muc_moderation: Copy XEP-0421 occupant-id from retracted message
Kim Alvefur <zash@zash.se>
parents:
5170
diff
changeset
|
99 local moderated_occupant_id = original:get_child("occupant-id", xmlns_occupant_id); |
06fad22672e1
mod_muc_moderation: Copy XEP-0421 occupant-id from retracted message
Kim Alvefur <zash@zash.se>
parents:
5170
diff
changeset
|
100 if room.get_occupant_id and moderated_occupant_id then |
06fad22672e1
mod_muc_moderation: Copy XEP-0421 occupant-id from retracted message
Kim Alvefur <zash@zash.se>
parents:
5170
diff
changeset
|
101 announcement:add_direct_child(moderated_occupant_id); |
06fad22672e1
mod_muc_moderation: Copy XEP-0421 occupant-id from retracted message
Kim Alvefur <zash@zash.se>
parents:
5170
diff
changeset
|
102 end |
06fad22672e1
mod_muc_moderation: Copy XEP-0421 occupant-id from retracted message
Kim Alvefur <zash@zash.se>
parents:
5170
diff
changeset
|
103 |
5612
2e30af180da5
mod_muc_moderation: Stamp XEP-0421 occupant-id for the acting moderator
Kim Alvefur <zash@zash.se>
parents:
5611
diff
changeset
|
104 local actor_occupant = room:get_occupant_by_real_jid(actor) or room:new_occupant(jid.bare(actor), actor_nick); |
2e30af180da5
mod_muc_moderation: Stamp XEP-0421 occupant-id for the acting moderator
Kim Alvefur <zash@zash.se>
parents:
5611
diff
changeset
|
105 if room.get_occupant_id then |
2e30af180da5
mod_muc_moderation: Stamp XEP-0421 occupant-id for the acting moderator
Kim Alvefur <zash@zash.se>
parents:
5611
diff
changeset
|
106 -- This isn't a regular broadcast message going through the events occupant_id.lib hooks so we do this here |
2e30af180da5
mod_muc_moderation: Stamp XEP-0421 occupant-id for the acting moderator
Kim Alvefur <zash@zash.se>
parents:
5611
diff
changeset
|
107 announcement:add_direct_child(st.stanza("occupant-id", { xmlns = xmlns_occupant_id; id = room:get_occupant_id(actor_occupant) })) |
2e30af180da5
mod_muc_moderation: Stamp XEP-0421 occupant-id for the acting moderator
Kim Alvefur <zash@zash.se>
parents:
5611
diff
changeset
|
108 end |
2e30af180da5
mod_muc_moderation: Stamp XEP-0421 occupant-id for the acting moderator
Kim Alvefur <zash@zash.se>
parents:
5611
diff
changeset
|
109 |
4814
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
110 if muc_log_archive.set and retract then |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
111 local tombstone = st.message({ from = original.attr.from, type = "groupchat", id = original.attr.id }) |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
112 :tag("moderated", { xmlns = xmlns_moderate, by = actor_nick }) |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
113 :tag("retracted", { xmlns = xmlns_retract, stamp = dt.datetime() }):up(); |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
114 |
5612
2e30af180da5
mod_muc_moderation: Stamp XEP-0421 occupant-id for the acting moderator
Kim Alvefur <zash@zash.se>
parents:
5611
diff
changeset
|
115 if room.get_occupant_id then |
2e30af180da5
mod_muc_moderation: Stamp XEP-0421 occupant-id for the acting moderator
Kim Alvefur <zash@zash.se>
parents:
5611
diff
changeset
|
116 tombstone:add_direct_child(st.stanza("occupant-id", { xmlns = xmlns_occupant_id; id = room:get_occupant_id(actor_occupant) })) |
2e30af180da5
mod_muc_moderation: Stamp XEP-0421 occupant-id for the acting moderator
Kim Alvefur <zash@zash.se>
parents:
5611
diff
changeset
|
117 |
2e30af180da5
mod_muc_moderation: Stamp XEP-0421 occupant-id for the acting moderator
Kim Alvefur <zash@zash.se>
parents:
5611
diff
changeset
|
118 if moderated_occupant_id then |
2e30af180da5
mod_muc_moderation: Stamp XEP-0421 occupant-id for the acting moderator
Kim Alvefur <zash@zash.se>
parents:
5611
diff
changeset
|
119 -- Copy occupant id from moderated message |
2e30af180da5
mod_muc_moderation: Stamp XEP-0421 occupant-id for the acting moderator
Kim Alvefur <zash@zash.se>
parents:
5611
diff
changeset
|
120 tombstone:add_child(moderated_occupant_id); |
2e30af180da5
mod_muc_moderation: Stamp XEP-0421 occupant-id for the acting moderator
Kim Alvefur <zash@zash.se>
parents:
5611
diff
changeset
|
121 end |
5611
06fad22672e1
mod_muc_moderation: Copy XEP-0421 occupant-id from retracted message
Kim Alvefur <zash@zash.se>
parents:
5170
diff
changeset
|
122 end |
06fad22672e1
mod_muc_moderation: Copy XEP-0421 occupant-id from retracted message
Kim Alvefur <zash@zash.se>
parents:
5170
diff
changeset
|
123 |
4814
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
124 if reason then |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
125 tombstone:text_tag("reason", reason); |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
126 end |
5169
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
127 tombstone:reset(); |
4814
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
128 |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
129 local was_replaced = muc_log_archive:set(room_node, stanza_id, tombstone); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
130 if not was_replaced then |
5169
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
131 return false, "wait", "internal-server-error"; |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
132 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
133 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
134 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
135 -- Done, tell people about it |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
136 module:log("info", "Message with id '%s' in room %s moderated by %s, reason: %s", stanza_id, room_jid, actor, reason); |
3902
341850e8866f
mod_muc_moderation: Broadcast retraction via method that saves it
Kim Alvefur <zash@zash.se>
parents:
3901
diff
changeset
|
137 room:broadcast_message(announcement); |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
138 |
5169
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
139 return true; |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
140 end |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
141 |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
142 -- Main handling |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
143 module:hook("iq-set/bare/" .. xmlns_fasten .. ":apply-to", function (event) |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
144 local stanza, origin = event.stanza, event.origin; |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
145 |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
146 local actor = stanza.attr.from; |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
147 local room_jid = stanza.attr.to; |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
148 |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
149 -- Collect info we need |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
150 local apply_to = stanza.tags[1]; |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
151 local moderate_tag = apply_to:get_child("moderate", xmlns_moderate); |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
152 if not moderate_tag then return end -- some other kind of fastening? |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
153 |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
154 local reason = moderate_tag:get_child_text("reason"); |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
155 local retract = moderate_tag:get_child("retract", xmlns_retract); |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
156 |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
157 local stanza_id = apply_to.attr.id; |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
158 |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
159 local ok, error_type, error_condition, error_text = moderate(actor, room_jid, stanza_id, retract, reason); |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
160 if not ok then |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
161 origin.send(st.error_reply(stanza, error_type, error_condition, error_text)); |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
162 return true; |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
163 end |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
164 |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
165 origin.send(st.reply(stanza)); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
166 return true; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
167 end); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
168 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
169 module:hook("muc-message-is-historic", function (event) |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
170 -- Ensure moderation messages are stored |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
171 if event.stanza.attr.from == event.room.jid then |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
172 return event.stanza:get_child("apply-to", xmlns_fasten); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
173 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
174 end, 1); |