mod_mam: Allow plugging into archive decision
authorKim Alvefur <zash@zash.se>
Fri, 10 Dec 2021 22:37:32 +0100
changeset 12310 81fc7fc77e68
parent 12309 f8b8061461e3
child 12311 dcad3a207915
mod_mam: Allow plugging into archive decision Similar procedure as mod_csi_simple
plugins/mod_mam/mod_mam.lua
--- a/plugins/mod_mam/mod_mam.lua	Mon Feb 21 08:54:39 2022 +0100
+++ b/plugins/mod_mam/mod_mam.lua	Fri Dec 10 22:37:32 2021 +0100
@@ -311,7 +311,7 @@
 	return stanza;
 end
 
-local function should_store(stanza, c2s) --> boolean, reason: string
+local function should_store(stanza) --> boolean, reason: string
 	local st_type = stanza.attr.type or "normal";
 	-- FIXME pass direction of stanza and use that along with bare/full JID addressing
 	-- for more accurate MUC / type=groupchat check
@@ -320,7 +320,7 @@
 		-- Headline messages are ephemeral by definition
 		return false, "headline";
 	end
-	if st_type == "error" and not c2s then
+	if st_type == "error" then
 		-- Errors not sent sent from a local client
 		-- Why would a client send an error anyway?
 		if jid_resource(stanza.attr.to) then
@@ -380,6 +380,12 @@
 	return false, "default";
 end
 
+module:hook("archive-should-store", function (event)
+	local should, why = should_store(event.stanza);
+	event.reason = why;
+	return should;
+end, -1)
+
 -- Handle messages
 local function message_handler(event, c2s)
 	local origin, stanza = event.origin, event.stanza;
@@ -396,9 +402,12 @@
 	-- Filter out <stanza-id> that claim to be from us
 	event.stanza = strip_stanza_id(stanza, store_user);
 
-	local should, why = should_store(stanza, c2s);
+	local event_payload = { stanza = stanza; session = origin };
+	local should = module:fire_event("archive-should-store", event_payload);
+	local why = event_payload.reason;
+
 	if not should then
-		log("debug", "Not archiving stanza: %s (%s)", stanza:top_tag(), why);
+		log("debug", "Not archiving stanza: %s (%s)", stanza:top_tag(), event_payload.reason);
 		return;
 	end