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;

mercurial