Changeset

8815:5974c9da1391

mod_pubsub: Add support for generation of a plain text <body> from Atom payloads See https://xmpp.org/extensions/xep-0060.html#impl-body
author Kim Alvefur <zash@zash.se>
date Mon, 21 May 2018 00:44:37 +0200
parents 8814:07197f29e2b8
children 8816:0f9d5cfa84f9
files plugins/mod_pubsub/mod_pubsub.lua plugins/mod_pubsub/pubsub.lib.lua
diffstat 2 files changed, 27 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/plugins/mod_pubsub/mod_pubsub.lua	Mon May 21 00:35:45 2018 +0200
+++ b/plugins/mod_pubsub/mod_pubsub.lua	Mon May 21 00:44:37 2018 +0200
@@ -57,6 +57,26 @@
 			:tag(kind, { node = node })
 				:add_child(item);
 
+	-- Compose a sensible textual representation of at least Atom payloads
+	if node_obj and node_obj.config.include_body and item.tags[1] then
+		local payload = item.tags[1];
+		if payload.attr.xmlns == "http://www.w3.org/2005/Atom" then
+			message:reset();
+			local title = payload:get_child_text("title");
+			local summary = payload:get_child_text("summary");
+			if not summary and title then
+				local author = payload:find("author/name#");
+				summary = title;
+				if author then
+					summary = author .. " posted " .. summary;
+				end
+			end
+			if summary then
+				message:body(summary);
+			end
+		end
+	end
+
 	module:broadcast(jids, message, pairs);
 end
 
--- a/plugins/mod_pubsub/pubsub.lib.lua	Mon May 21 00:35:45 2018 +0200
+++ b/plugins/mod_pubsub/pubsub.lib.lua	Mon May 21 00:44:37 2018 +0200
@@ -53,6 +53,11 @@
 		label = "Persist items to storage";
 	};
 	{
+		type = "boolean";
+		name = "pubsub#include_body";
+		label = "Receive message body in addition to payload?";
+	};
+	{
 		type = "list-single";
 		name = "pubsub#notification_type";
 		label = "Specify the delivery style for notifications";
@@ -196,6 +201,7 @@
 			["max_items"] = tonumber(form_data["pubsub#max_items"]);
 			["persist_items"] = form_data["pubsub#persist_items"];
 			["notification_type"] = form_data["pubsub#notification_type"];
+			["include_body"] = form_data["pubsub#include_body"];
 		};
 	end
 	if node then
@@ -384,6 +390,7 @@
 		["pubsub#max_items"] = tostring(node_config["max_items"]);
 		["pubsub#persist_items"] = node_config["persist_items"];
 		["pubsub#notification_type"] = node_config["notification_type"];
+		["pubsub#include_body"] = node_config["include_body"];
 	}
 	local reply = st.reply(stanza)
 		:tag("pubsub", { xmlns = xmlns_pubsub_owner })