plugins/mod_disco.lua

changeset 2491
4be6810914eb
parent 2383
29a30884aadd
child 2925
692b3c6c5bd2
--- a/plugins/mod_disco.lua	Sat Jan 23 02:53:44 2010 +0000
+++ b/plugins/mod_disco.lua	Sat Jan 23 18:16:10 2010 +0500
@@ -12,6 +12,25 @@
 local jid_bare = require "util.jid".bare;
 local st = require "util.stanza"
 
+local disco_items = module:get_option("disco_items") or {};
+do -- validate disco_items
+	for _, item in ipairs(disco_items) do
+		local err;
+		if type(item) ~= "table" then
+			err = "item is not a table";
+		elseif type(item[1]) ~= "string" then
+			err = "item jid is not a string";
+		elseif item[2] and type(item[2]) ~= "string" then
+			err = "item name is not a string";
+		end
+		if err then
+			module:log("error", "option disco_items is malformed: %s", err);
+			disco_items = {}; -- TODO clean up data instead of removing it?
+			break;
+		end
+	end
+end
+
 module:add_identity("server", "im", "Prosody"); -- FIXME should be in the non-existing mod_router
 module:add_feature("http://jabber.org/protocol/disco#info");
 module:add_feature("http://jabber.org/protocol/disco#items");
@@ -50,6 +69,9 @@
 	for jid in pairs(componentmanager_get_children(module.host)) do
 		reply:tag("item", {jid = jid}):up();
 	end
+	for _, item in ipairs(disco_items) do
+		reply:tag("item", {jid=item[1], name=item[2]}):up();
+	end
 	origin.send(reply);
 	return true;
 end);

mercurial