Software /
code /
prosody-modules
Annotate
mod_muc_moderation/mod_muc_moderation.lua @ 5170:4d6af8950016
mod_muc_moderation: Derive role from reserved nickname if occupant
When using a different client to moderate than the one used to
participate in the chat, e.g. a command line tool like clix, there's no
occupant and no role to use in the permission check. Previously the
default role based on affiliation was used. Now if you are present in
the room using your reserved nick, the role you have there is used in
the permission check instead of the default affiliation-derived role.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 19 Feb 2023 18:17:37 +0100 |
parent | 5169:1071a420ff6f |
child | 5618:06fad22672e1 |
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"; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 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
|
31 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 -- Discovering support |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 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
|
34 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
|
35 end); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 |
5169
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
37 -- 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
|
38 |
5169
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
39 -- 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
|
40 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
|
41 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
|
42 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
|
43 |
5170
4d6af8950016
mod_muc_moderation: Derive role from reserved nickname if occupant
Kim Alvefur <zash@zash.se>
parents:
5169
diff
changeset
|
44 -- 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
|
45 -- 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
|
46 -- 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
|
47 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
|
48 if not actor_nick then |
98429b646bd4
mod_muc_moderation: Use reserved nickname as fallback
Kim Alvefur <zash@zash.se>
parents:
4749
diff
changeset
|
49 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
|
50 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
|
51 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
|
52 end |
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 |
5170
4d6af8950016
mod_muc_moderation: Derive role from reserved nickname if occupant
Kim Alvefur <zash@zash.se>
parents:
5169
diff
changeset
|
55 -- 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
|
56 -- 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
|
57 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
|
58 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
|
59 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
|
60 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
|
61 end |
4d6af8950016
mod_muc_moderation: Derive role from reserved nickname if occupant
Kim Alvefur <zash@zash.se>
parents:
5169
diff
changeset
|
62 |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
63 -- 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
|
64 local original, err; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
65 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
|
66 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
|
67 else |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
68 -- COMPAT missing :get API |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
69 err = "item-not-found"; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
70 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
|
71 if i == stanza_id then |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
72 original, err = item, nil; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
73 end |
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 |
5169
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
76 |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 if not original then |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
78 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
|
79 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
|
80 else |
5169
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
81 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
|
82 end |
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 |
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 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
|
87 :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
|
88 :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
|
89 |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
90 if retract then |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
91 announcement:tag("retract", { xmlns = xmlns_retract }):up(); |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
92 end |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
93 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
94 if reason then |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
95 announcement:text_tag("reason", reason); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
96 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
97 |
4814
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
98 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
|
99 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
|
100 :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
|
101 :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
|
102 |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
103 if reason then |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
104 tombstone:text_tag("reason", reason); |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
105 end |
5169
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
106 tombstone:reset(); |
4814
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
107 |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
108 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
|
109 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
|
110 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
|
111 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
112 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
113 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
114 -- Done, tell people about it |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
115 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
|
116 room:broadcast_message(announcement); |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
117 |
5169
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
118 return true; |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
119 end |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
120 |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
121 -- Main handling |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
122 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
|
123 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
|
124 |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
125 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
|
126 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
|
127 |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
128 -- 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
|
129 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
|
130 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
|
131 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
|
132 |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
133 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
|
134 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
|
135 |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
136 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
|
137 |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
138 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
|
139 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
|
140 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
|
141 return true; |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
142 end |
1071a420ff6f
mod_muc_moderation: Refactor to prepare for new version of XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
143 |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
144 origin.send(st.reply(stanza)); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
145 return true; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
146 end); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
147 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
148 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
|
149 -- Ensure moderation messages are stored |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
150 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
|
151 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
|
152 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
153 end, 1); |