mod_pubsub: Add shell commands to create and list nodes
authorMatthew Wild <mwild1@gmail.com>
Wed, 06 Mar 2024 17:38:21 +0000
changeset 13460 e9ab660b9c5f
parent 13459 2a001cd7f99a
child 13461 3347ed1014b8
mod_pubsub: Add shell commands to create and list nodes
plugins/mod_pubsub/mod_pubsub.lua
--- a/plugins/mod_pubsub/mod_pubsub.lua	Sat Mar 02 14:14:27 2024 +0100
+++ b/plugins/mod_pubsub/mod_pubsub.lua	Wed Mar 06 17:38:21 2024 +0000
@@ -250,3 +250,45 @@
 		normalize_jid = jid_bare;
 	}));
 end
+
+local function get_service(service_jid)
+	return assert(assert(prosody.hosts[service_jid], "Unknown pubsub service").modules.pubsub, "Not a pubsub service").service;
+end
+
+module:add_item("shell-command", {
+	section = "pubsub";
+	section_desc = "Manage publish/subscribe nodes";
+	name = "create_node";
+	desc = "Create a node with the specified name";
+	args = {
+		{ name = "service_jid", type = "string" };
+		{ name = "node_name",   type = "string" };
+	};
+	host_selector = "service_jid";
+
+	handler = function (self, service_jid, node_name) --luacheck: ignore 212/self
+		return get_service(service_jid):create(node_name, true);
+	end;
+});
+
+module:add_item("shell-command", {
+	section = "pubsub";
+	section_desc = "Manage publish/subscribe nodes";
+	name = "list_nodes";
+	desc = "List nodes on a pubsub service";
+	args = {
+		{ name = "service_jid", type = "string" };
+	};
+	host_selector = "service_jid";
+
+	handler = function (self, service_jid) --luacheck: ignore 212/self
+		local service = get_service(service_jid);
+		local nodes = select(2, assert(service:get_nodes(true)));
+		local count = 0;
+		for node_name in pairs(nodes) do
+			count = count + 1;
+			self.session.print(node_name);
+		end
+		return true, ("%d nodes"):format(count);
+	end;
+});