changeset 5611:06fad22672e1

mod_muc_moderation: Copy XEP-0421 occupant-id from retracted message Lets clients correlate the sender of whatever was retracted by moderators. Behavior limited to Prosody 0.12, otherwise there are no assurances of the origin of the occupant-id tag. Ref #1816
author Kim Alvefur <zash@zash.se>
date Thu, 20 Jul 2023 10:37:27 +0200
parents 67f7df9892bb
children 2e30af180da5
files mod_muc_moderation/mod_muc_moderation.lua
diffstat 1 files changed, 11 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/mod_muc_moderation/mod_muc_moderation.lua	Wed Jul 19 17:01:40 2023 +0200
+++ b/mod_muc_moderation/mod_muc_moderation.lua	Thu Jul 20 10:37:27 2023 +0200
@@ -27,6 +27,7 @@
 -- Namespaces
 local xmlns_fasten = "urn:xmpp:fasten:0";
 local xmlns_moderate = "urn:xmpp:message-moderate:0";
+local xmlns_occupant_id = "urn:xmpp:occupant-id:0";
 local xmlns_retract = "urn:xmpp:message-retract:0";
 
 -- Discovering support
@@ -95,11 +96,21 @@
 		announcement:text_tag("reason", reason);
 	end
 
+	local moderated_occupant_id = original:get_child("occupant-id", xmlns_occupant_id);
+	if room.get_occupant_id and moderated_occupant_id then
+		announcement:add_direct_child(moderated_occupant_id);
+	end
+
 	if muc_log_archive.set and retract then
 		local tombstone = st.message({ from = original.attr.from, type = "groupchat", id = original.attr.id })
 			:tag("moderated", { xmlns = xmlns_moderate, by = actor_nick })
 				:tag("retracted", { xmlns = xmlns_retract, stamp = dt.datetime() }):up();
 
+		if room.get_occupant_id and moderated_occupant_id then
+			-- Copy occupant id from moderated message
+			tombstone:add_child(moderated_occupant_id);
+		end
+
 		if reason then
 			tombstone:text_tag("reason", reason);
 		end