mod_pep: Add automatic subscriptions on node creation (fixes #1222)
authorKim Alvefur <zash@zash.se>
Sat, 20 Oct 2018 20:22:55 +0200
changeset 9545 b8bfcfbe5126
parent 9544 742977123168
child 9548 9dc7280dd8dc
mod_pep: Add automatic subscriptions on node creation (fixes #1222) Replaces automatic node creation on subscription, since this casues problems when trying to keep nodes private or other specific settings.
plugins/mod_pep.lua
--- a/plugins/mod_pep.lua	Sat Oct 20 20:12:53 2018 +0200
+++ b/plugins/mod_pep.lua	Sat Oct 20 20:22:55 2018 +0200
@@ -158,6 +158,21 @@
 	return simple_broadcast;
 end
 
+local function on_node_creation(event)
+	local service = event.service;
+	local node = event.node;
+	local username = service.config.pep_username;
+
+	local service_recipients = recipients[username];
+	if not service_recipients then return; end
+
+	for recipient, nodes in pairs(service_recipients) do
+		if nodes:contains(node) then
+			service:add_subscription(node, recipient, recipient, { presence = true });
+		end
+	end
+end
+
 function get_pep_service(username)
 	module:log("debug", "get_pep_service(%q)", username);
 	local user_bare = jid_join(username, host);
@@ -174,7 +189,7 @@
 		};
 
 		autocreate_on_publish = true;
-		autocreate_on_subscribe = true;
+		autocreate_on_subscribe = false;
 
 		nodestore = nodestore(username);
 		itemstore = simple_itemstore(username);
@@ -216,6 +231,11 @@
 	return service;
 end
 
+module:hook("item-added/pep-service", function (event)
+	local service = event.item.service;
+	module:hook_object_event(service.events, "node-created", on_node_creation);
+end);
+
 function handle_pubsub_iq(event)
 	local origin, stanza = event.origin, event.stanza;
 	local service_name = origin.username;