annotate mod_muc_moderation/mod_muc_moderation.lua @ 6319:04c3273cb81f

mod_auth_cyrus: Add empty 'profile' table to SASL handler objects This is for compatibility with Prosody's built-in util.sasl objects. A SASL profile table usually includes methods supported by the backend, which can be used by SASL mechanism handlers to perform operations (such as testing the password). It also optionally contains a 'cb' field with channel binding method handlers. The Cyrus backend doesn't support channel binding, and doesn't have the same concept of auth backend methods (it handles all that internally, and Prosody has no insight or control over it). Thus, we create an empty profile which informs Prosody that the SASL handler does not support any of the auth or channel binding methods. Some features will not work, but they didn't work anyway. This just makes it explicit. This fixes a traceback in mod_sasl2_fast, which expected SASL handlers to always contain a 'profile' field.
author Matthew Wild <mwild1@gmail.com>
date Thu, 04 Sep 2025 10:14:46 +0100
parents a58fb6a05412
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
4665df54719d mod_muc_moderation: Bump year
Kim Alvefur <zash@zash.se>
parents: 4750
diff changeset
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";
6128
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
30 local xmlns_moderate_1 = "urn:xmpp:message-moderate:1";
5611
06fad22672e1 mod_muc_moderation: Copy XEP-0421 occupant-id from retracted message
Kim Alvefur <zash@zash.se>
parents: 5170
diff changeset
31 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
32 local xmlns_retract = "urn:xmpp:message-retract:0";
6128
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
33 local xmlns_retract_1 = "urn:xmpp:message-retract:1";
3897
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35 -- Discovering support
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 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
37 event.reply:tag("feature", { var = xmlns_moderate }):up();
6128
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
38 event.reply:tag("feature", { var = xmlns_moderate_1 }):up();
3897
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 end);
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40
5169
1071a420ff6f mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents: 4814
diff changeset
41 -- 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
42
5169
1071a420ff6f mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents: 4814
diff changeset
43 -- 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
44 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
45 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
46 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
47
5170
4d6af8950016 mod_muc_moderation: Derive role from reserved nickname if occupant
Kim Alvefur <zash@zash.se>
parents: 5169
diff changeset
48 -- 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
49 -- 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
50 -- 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
51 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
52 if not actor_nick then
98429b646bd4 mod_muc_moderation: Use reserved nickname as fallback
Kim Alvefur <zash@zash.se>
parents: 4749
diff changeset
53 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
54 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
55 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
56 end
98429b646bd4 mod_muc_moderation: Use reserved nickname as fallback
Kim Alvefur <zash@zash.se>
parents: 4749
diff changeset
57 end
98429b646bd4 mod_muc_moderation: Use reserved nickname as fallback
Kim Alvefur <zash@zash.se>
parents: 4749
diff changeset
58
5170
4d6af8950016 mod_muc_moderation: Derive role from reserved nickname if occupant
Kim Alvefur <zash@zash.se>
parents: 5169
diff changeset
59 -- 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
60 -- 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
61 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
62 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
63 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
64 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
65 end
4d6af8950016 mod_muc_moderation: Derive role from reserved nickname if occupant
Kim Alvefur <zash@zash.se>
parents: 5169
diff changeset
66
3897
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
67 -- 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
68 local original, err;
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
69 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
70 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
71 else
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
72 -- COMPAT missing :get API
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
73 err = "item-not-found";
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
74 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
75 if i == stanza_id then
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
76 original, err = item, nil;
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
77 end
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
78 end
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
79 end
5169
1071a420ff6f mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents: 4814
diff changeset
80
3897
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
81 if not original then
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
82 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
83 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
84 else
5169
1071a420ff6f mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents: 4814
diff changeset
85 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
86 end
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
87 end
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
88
5942
5ccc03c33158 mod_muc_moderation: Fix a regression. Actor occupant-id was not added under the moderated tag, but at the top level.
John Livingston <git@john-livingston.fr>
parents: 5612
diff changeset
89 local actor_occupant = room:get_occupant_by_real_jid(actor) or room:new_occupant(jid.bare(actor), actor_nick);
3897
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
90
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
91 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
92 :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
93 :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
94
5942
5ccc03c33158 mod_muc_moderation: Fix a regression. Actor occupant-id was not added under the moderated tag, but at the top level.
John Livingston <git@john-livingston.fr>
parents: 5612
diff changeset
95 if room.get_occupant_id then
5ccc03c33158 mod_muc_moderation: Fix a regression. Actor occupant-id was not added under the moderated tag, but at the top level.
John Livingston <git@john-livingston.fr>
parents: 5612
diff changeset
96 -- This isn't a regular broadcast message going through the events occupant_id.lib hooks so we do this here
5ccc03c33158 mod_muc_moderation: Fix a regression. Actor occupant-id was not added under the moderated tag, but at the top level.
John Livingston <git@john-livingston.fr>
parents: 5612
diff changeset
97 announcement:add_child(st.stanza("occupant-id", { xmlns = xmlns_occupant_id; id = room:get_occupant_id(actor_occupant) }));
5ccc03c33158 mod_muc_moderation: Fix a regression. Actor occupant-id was not added under the moderated tag, but at the top level.
John Livingston <git@john-livingston.fr>
parents: 5612
diff changeset
98 end
5ccc03c33158 mod_muc_moderation: Fix a regression. Actor occupant-id was not added under the moderated tag, but at the top level.
John Livingston <git@john-livingston.fr>
parents: 5612
diff changeset
99
4814
5f12c75fd210 mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents: 4806
diff changeset
100 if retract then
5f12c75fd210 mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents: 4806
diff changeset
101 announcement:tag("retract", { xmlns = xmlns_retract }):up();
5f12c75fd210 mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents: 4806
diff changeset
102 end
3897
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
103
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
104 if reason then
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
105 announcement:text_tag("reason", reason);
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
106 end
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
107
5611
06fad22672e1 mod_muc_moderation: Copy XEP-0421 occupant-id from retracted message
Kim Alvefur <zash@zash.se>
parents: 5170
diff changeset
108 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
109 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
110 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
111 end
06fad22672e1 mod_muc_moderation: Copy XEP-0421 occupant-id from retracted message
Kim Alvefur <zash@zash.se>
parents: 5170
diff changeset
112
6128
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
113 -- XEP 0425 v0.3.0
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
114
5943
5076b78c95ef mod_muc_moderation: Fix occupant-id placement in moderated tombstone.
John Livingston <git@john-livingston.fr>
parents: 5942
diff changeset
115 announcement:reset();
5076b78c95ef mod_muc_moderation: Fix occupant-id placement in moderated tombstone.
John Livingston <git@john-livingston.fr>
parents: 5942
diff changeset
116
6128
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
117 if retract then
6134
a58fb6a05412 mod_muc_moderation: add missing id attribute to retract
nicoco <nicoco@nicoco.fr>
parents: 6128
diff changeset
118 announcement:tag("retract", { xmlns = xmlns_retract_1; id = stanza_id })
6128
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
119 :tag("moderated", { xmlns = xmlns_moderate_1 })
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
120 :tag("occupant-id", { xmlns = xmlns_occupant_id; id = room:get_occupant_id(actor_occupant) });
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
121 if reason then
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
122 announcement:up():up():text_tag("reason", reason);
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
123 end
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
124 end
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
125
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
126
5944
4b677e445b8a mod_muc_moderation: adding a new hook that can be used to cancel the moderation, or modify resulting stanzas.
John Livingston <git@john-livingston.fr>
parents: 5943
diff changeset
127 local tombstone = nil;
4814
5f12c75fd210 mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents: 4806
diff changeset
128 if muc_log_archive.set and retract then
5944
4b677e445b8a mod_muc_moderation: adding a new hook that can be used to cancel the moderation, or modify resulting stanzas.
John Livingston <git@john-livingston.fr>
parents: 5943
diff changeset
129 tombstone = st.message({ from = original.attr.from, type = "groupchat", id = original.attr.id })
4814
5f12c75fd210 mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents: 4806
diff changeset
130 :tag("moderated", { xmlns = xmlns_moderate, by = actor_nick })
5943
5076b78c95ef mod_muc_moderation: Fix occupant-id placement in moderated tombstone.
John Livingston <git@john-livingston.fr>
parents: 5942
diff changeset
131 :tag("retracted", { xmlns = xmlns_retract, stamp = dt.datetime() }):up();
5611
06fad22672e1 mod_muc_moderation: Copy XEP-0421 occupant-id from retracted message
Kim Alvefur <zash@zash.se>
parents: 5170
diff changeset
132
4814
5f12c75fd210 mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents: 4806
diff changeset
133 if reason then
5f12c75fd210 mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents: 4806
diff changeset
134 tombstone:text_tag("reason", reason);
5f12c75fd210 mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents: 4806
diff changeset
135 end
5943
5076b78c95ef mod_muc_moderation: Fix occupant-id placement in moderated tombstone.
John Livingston <git@john-livingston.fr>
parents: 5942
diff changeset
136
5076b78c95ef mod_muc_moderation: Fix occupant-id placement in moderated tombstone.
John Livingston <git@john-livingston.fr>
parents: 5942
diff changeset
137 if room.get_occupant_id then
5076b78c95ef mod_muc_moderation: Fix occupant-id placement in moderated tombstone.
John Livingston <git@john-livingston.fr>
parents: 5942
diff changeset
138 if actor_occupant then
5076b78c95ef mod_muc_moderation: Fix occupant-id placement in moderated tombstone.
John Livingston <git@john-livingston.fr>
parents: 5942
diff changeset
139 tombstone:add_child(st.stanza("occupant-id", { xmlns = xmlns_occupant_id; id = room:get_occupant_id(actor_occupant) }));
5076b78c95ef mod_muc_moderation: Fix occupant-id placement in moderated tombstone.
John Livingston <git@john-livingston.fr>
parents: 5942
diff changeset
140 end
5076b78c95ef mod_muc_moderation: Fix occupant-id placement in moderated tombstone.
John Livingston <git@john-livingston.fr>
parents: 5942
diff changeset
141
5076b78c95ef mod_muc_moderation: Fix occupant-id placement in moderated tombstone.
John Livingston <git@john-livingston.fr>
parents: 5942
diff changeset
142 if moderated_occupant_id then
5076b78c95ef mod_muc_moderation: Fix occupant-id placement in moderated tombstone.
John Livingston <git@john-livingston.fr>
parents: 5942
diff changeset
143 -- Copy occupant id from moderated message
5076b78c95ef mod_muc_moderation: Fix occupant-id placement in moderated tombstone.
John Livingston <git@john-livingston.fr>
parents: 5942
diff changeset
144 tombstone:add_direct_child(moderated_occupant_id);
5076b78c95ef mod_muc_moderation: Fix occupant-id placement in moderated tombstone.
John Livingston <git@john-livingston.fr>
parents: 5942
diff changeset
145 end
5076b78c95ef mod_muc_moderation: Fix occupant-id placement in moderated tombstone.
John Livingston <git@john-livingston.fr>
parents: 5942
diff changeset
146 end
5169
1071a420ff6f mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents: 4814
diff changeset
147 tombstone:reset();
5944
4b677e445b8a mod_muc_moderation: adding a new hook that can be used to cancel the moderation, or modify resulting stanzas.
John Livingston <git@john-livingston.fr>
parents: 5943
diff changeset
148 end
4814
5f12c75fd210 mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents: 4806
diff changeset
149
5944
4b677e445b8a mod_muc_moderation: adding a new hook that can be used to cancel the moderation, or modify resulting stanzas.
John Livingston <git@john-livingston.fr>
parents: 5943
diff changeset
150 -- fire an event, that can be used to cancel the moderation, or modify stanzas.
4b677e445b8a mod_muc_moderation: adding a new hook that can be used to cancel the moderation, or modify resulting stanzas.
John Livingston <git@john-livingston.fr>
parents: 5943
diff changeset
151 local event = {
4b677e445b8a mod_muc_moderation: adding a new hook that can be used to cancel the moderation, or modify resulting stanzas.
John Livingston <git@john-livingston.fr>
parents: 5943
diff changeset
152 room = room;
4b677e445b8a mod_muc_moderation: adding a new hook that can be used to cancel the moderation, or modify resulting stanzas.
John Livingston <git@john-livingston.fr>
parents: 5943
diff changeset
153 announcement = announcement;
4b677e445b8a mod_muc_moderation: adding a new hook that can be used to cancel the moderation, or modify resulting stanzas.
John Livingston <git@john-livingston.fr>
parents: 5943
diff changeset
154 tombstone = tombstone;
4b677e445b8a mod_muc_moderation: adding a new hook that can be used to cancel the moderation, or modify resulting stanzas.
John Livingston <git@john-livingston.fr>
parents: 5943
diff changeset
155 stanza_id = stanza_id;
4b677e445b8a mod_muc_moderation: adding a new hook that can be used to cancel the moderation, or modify resulting stanzas.
John Livingston <git@john-livingston.fr>
parents: 5943
diff changeset
156 retract = retract;
4b677e445b8a mod_muc_moderation: adding a new hook that can be used to cancel the moderation, or modify resulting stanzas.
John Livingston <git@john-livingston.fr>
parents: 5943
diff changeset
157 reason = reason;
4b677e445b8a mod_muc_moderation: adding a new hook that can be used to cancel the moderation, or modify resulting stanzas.
John Livingston <git@john-livingston.fr>
parents: 5943
diff changeset
158 actor = actor;
4b677e445b8a mod_muc_moderation: adding a new hook that can be used to cancel the moderation, or modify resulting stanzas.
John Livingston <git@john-livingston.fr>
parents: 5943
diff changeset
159 actor_nick = actor_nick;
4b677e445b8a mod_muc_moderation: adding a new hook that can be used to cancel the moderation, or modify resulting stanzas.
John Livingston <git@john-livingston.fr>
parents: 5943
diff changeset
160 };
4b677e445b8a mod_muc_moderation: adding a new hook that can be used to cancel the moderation, or modify resulting stanzas.
John Livingston <git@john-livingston.fr>
parents: 5943
diff changeset
161 if module:fire_event("muc-moderate-message", event) then
4b677e445b8a mod_muc_moderation: adding a new hook that can be used to cancel the moderation, or modify resulting stanzas.
John Livingston <git@john-livingston.fr>
parents: 5943
diff changeset
162 -- TODO: allow to change the error message?
4b677e445b8a mod_muc_moderation: adding a new hook that can be used to cancel the moderation, or modify resulting stanzas.
John Livingston <git@john-livingston.fr>
parents: 5943
diff changeset
163 return false, "wait", "internal-server-error";
4b677e445b8a mod_muc_moderation: adding a new hook that can be used to cancel the moderation, or modify resulting stanzas.
John Livingston <git@john-livingston.fr>
parents: 5943
diff changeset
164 end
4b677e445b8a mod_muc_moderation: adding a new hook that can be used to cancel the moderation, or modify resulting stanzas.
John Livingston <git@john-livingston.fr>
parents: 5943
diff changeset
165
4b677e445b8a mod_muc_moderation: adding a new hook that can be used to cancel the moderation, or modify resulting stanzas.
John Livingston <git@john-livingston.fr>
parents: 5943
diff changeset
166 if tombstone then
3897
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
167 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
168 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
169 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
170 end
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
171 end
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
172
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
173 -- Done, tell people about it
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
174 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
175 room:broadcast_message(announcement);
3897
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
176
5169
1071a420ff6f mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents: 4814
diff changeset
177 return true;
1071a420ff6f mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents: 4814
diff changeset
178 end
1071a420ff6f mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents: 4814
diff changeset
179
1071a420ff6f mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents: 4814
diff changeset
180 -- Main handling
1071a420ff6f mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents: 4814
diff changeset
181 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
182 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
183
1071a420ff6f mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents: 4814
diff changeset
184 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
185 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
186
1071a420ff6f mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents: 4814
diff changeset
187 -- 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
188 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
189 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
190 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
191
1071a420ff6f mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents: 4814
diff changeset
192 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
193 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
194
1071a420ff6f mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents: 4814
diff changeset
195 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
196
1071a420ff6f mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents: 4814
diff changeset
197 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
198 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
199 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
200 return true;
1071a420ff6f mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents: 4814
diff changeset
201 end
1071a420ff6f mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents: 4814
diff changeset
202
3897
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
203 origin.send(st.reply(stanza));
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
204 return true;
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
205 end);
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
206
6128
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
207 module:hook("iq-set/bare/" .. xmlns_moderate_1 .. ":moderate", function (event)
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
208 local stanza, origin = event.stanza, event.origin;
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
209
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
210 local actor = stanza.attr.from;
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
211 local room_jid = stanza.attr.to;
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
212
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
213 local moderate_tag = stanza:get_child("moderate", xmlns_moderate_1)
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
214 local retract_tag = moderate_tag:get_child("retract", xmlns_retract_1)
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
215
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
216 if not retract_tag then return end -- other kind of moderation?
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
217
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
218 local reason = moderate_tag:get_child_text("reason");
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
219 local stanza_id = moderate_tag.attr.id
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
220
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
221 local ok, error_type, error_condition, error_text = moderate(
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
222 actor,
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
223 room_jid,
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
224 stanza_id,
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
225 retract_tag,
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
226 reason
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
227 );
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
228 if not ok then
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
229 origin.send(st.error_reply(stanza, error_type, error_condition, error_text));
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
230 return true;
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
231 end
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
232
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
233 origin.send(st.reply(stanza));
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
234 return true;
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
235 end);
bcad6baa4fc3 mod_muc_moderation: partial support for XEP-0425 v0.3.0 (no tombstones)
nicoco <nicoco@nicoco.fr>
parents: 5944
diff changeset
236
3897
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
237 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
238 -- Ensure moderation messages are stored
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
239 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
240 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
241 end
3a96070f4a14 mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
242 end, 1);