plugins/mod_disco.lua
changeset 2491 4be6810914eb
parent 2383 29a30884aadd
child 2925 692b3c6c5bd2
equal deleted inserted replaced
2490:6eee75fb3159 2491:4be6810914eb
     9 local componentmanager_get_children = require "core.componentmanager".get_children;
     9 local componentmanager_get_children = require "core.componentmanager".get_children;
    10 local is_contact_subscribed = require "core.rostermanager".is_contact_subscribed;
    10 local is_contact_subscribed = require "core.rostermanager".is_contact_subscribed;
    11 local jid_split = require "util.jid".split;
    11 local jid_split = require "util.jid".split;
    12 local jid_bare = require "util.jid".bare;
    12 local jid_bare = require "util.jid".bare;
    13 local st = require "util.stanza"
    13 local st = require "util.stanza"
       
    14 
       
    15 local disco_items = module:get_option("disco_items") or {};
       
    16 do -- validate disco_items
       
    17 	for _, item in ipairs(disco_items) do
       
    18 		local err;
       
    19 		if type(item) ~= "table" then
       
    20 			err = "item is not a table";
       
    21 		elseif type(item[1]) ~= "string" then
       
    22 			err = "item jid is not a string";
       
    23 		elseif item[2] and type(item[2]) ~= "string" then
       
    24 			err = "item name is not a string";
       
    25 		end
       
    26 		if err then
       
    27 			module:log("error", "option disco_items is malformed: %s", err);
       
    28 			disco_items = {}; -- TODO clean up data instead of removing it?
       
    29 			break;
       
    30 		end
       
    31 	end
       
    32 end
    14 
    33 
    15 module:add_identity("server", "im", "Prosody"); -- FIXME should be in the non-existing mod_router
    34 module:add_identity("server", "im", "Prosody"); -- FIXME should be in the non-existing mod_router
    16 module:add_feature("http://jabber.org/protocol/disco#info");
    35 module:add_feature("http://jabber.org/protocol/disco#info");
    17 module:add_feature("http://jabber.org/protocol/disco#items");
    36 module:add_feature("http://jabber.org/protocol/disco#items");
    18 
    37 
    48 
    67 
    49 	local reply = st.reply(stanza):query("http://jabber.org/protocol/disco#items");
    68 	local reply = st.reply(stanza):query("http://jabber.org/protocol/disco#items");
    50 	for jid in pairs(componentmanager_get_children(module.host)) do
    69 	for jid in pairs(componentmanager_get_children(module.host)) do
    51 		reply:tag("item", {jid = jid}):up();
    70 		reply:tag("item", {jid = jid}):up();
    52 	end
    71 	end
       
    72 	for _, item in ipairs(disco_items) do
       
    73 		reply:tag("item", {jid=item[1], name=item[2]}):up();
       
    74 	end
    53 	origin.send(reply);
    75 	origin.send(reply);
    54 	return true;
    76 	return true;
    55 end);
    77 end);
    56 module:hook("iq/bare/http://jabber.org/protocol/disco#info:query", function(event)
    78 module:hook("iq/bare/http://jabber.org/protocol/disco#info:query", function(event)
    57 	local origin, stanza = event.origin, event.stanza;
    79 	local origin, stanza = event.origin, event.stanza;