Comparison

mod_seclabels/mod_seclabels.lua @ 450:fb152d4af082

mod_seclabels: Update to latest catalog schema, while keeping compatibility with the old one.
author Kim Alvefur <zash@zash.se>
date Wed, 05 Oct 2011 21:03:51 +0200
parent 449:08ffbbdafeea
child 451:f43d2d26c1c4
comparison
equal deleted inserted replaced
449:08ffbbdafeea 450:fb152d4af082
1 local st = require "util.stanza"; 1 local st = require "util.stanza";
2 2
3 local xmlns_label = "urn:xmpp:sec-label:0"; 3 local xmlns_label = "urn:xmpp:sec-label:0";
4 local xmlns_label_catalog = "urn:xmpp:sec-label:catalog:0"; 4 local xmlns_label_catalog = "urn:xmpp:sec-label:catalog:2";
5 local xmlns_label_catalog_old = "urn:xmpp:sec-label:catalog:0"; -- COMPAT
5 6
6 module:add_feature(xmlns_label); 7 module:add_feature(xmlns_label);
8 module:add_feature(xmlns_label_catalog);
9 module:add_feature(xmlns_label_catalog_old);
7 10
8 module:hook("account-disco-info", function(event) 11 module:hook("account-disco-info", function(event) -- COMPAT
9 local stanza = event.stanza; 12 local stanza = event.stanza;
10 stanza:tag('feature', {var=xmlns_label}):up(); 13 stanza:tag('feature', {var=xmlns_label}):up();
11 stanza:tag('feature', {var=xmlns_label_catalog}):up(); 14 stanza:tag('feature', {var=xmlns_label_catalog}):up();
12 end); 15 end);
13 16
24 labels = module:get_option("security_labels", default_labels); 27 labels = module:get_option("security_labels", default_labels);
25 end 28 end
26 module:hook("config-reloaded",get_conf); 29 module:hook("config-reloaded",get_conf);
27 get_conf(); 30 get_conf();
28 31
29 module:hook("iq/self/"..xmlns_label_catalog..":catalog", function (request) 32 function handle_catalog_request(request)
30 local catalog_request = request.stanza.tags[1]; 33 local catalog_request = request.stanza.tags[1];
31 local reply = st.reply(request.stanza) 34 local reply = st.reply(request.stanza)
32 :tag("catalog", { 35 :tag("catalog", {
33 xmlns = xmlns_label_catalog, 36 xmlns = catalog_request.attr.xmlns,
34 to = catalog_request.attr.to, 37 to = catalog_request.attr.to,
35 name = catalog_name, 38 name = catalog_name,
36 desc = catalog_desc 39 desc = catalog_desc
37 }); 40 });
38 41
39 local function add_labels(catalog, labels, selector) 42 local function add_labels(catalog, labels, selector)
40 for name, value in pairs(labels) do 43 for name, value in pairs(labels) do
41 if value.label then 44 if value.label then
42 catalog:tag("securitylabel", { xmlns = xmlns_label, selector = selector..name }) 45 if catalog_request.attr.xmlns == xmlns_label_catalog then
43 :tag("displaymarking", { 46 catalog:tag("item", {
44 fgcolor = value.color or "black", 47 selector = selector..name,
45 bgcolor = value.bgcolor or "white", 48 default = value.default and "true" or nil,
46 }):text(value.name or name):up() 49 }):tag("securitylabel", { xmlns = xmlns_label })
47 :tag("label"); 50 else -- COMPAT
51 catalog:tag("securitylabel", {
52 xmlns = xmlns_label,
53 selector = selector..name,
54 default = value.default and "true" or nil,
55 })
56 end
57 if value.name or value.color or value.bgcolor then
58 catalog:tag("displaymarking", {
59 fgcolor = value.color,
60 bgcolor = value.bgcolor,
61 }):text(value.name or name):up();
62 end
48 if type(value.label) == "string" then 63 if type(value.label) == "string" then
49 catalog:text(value.label); 64 catalog:tag("label"):text(value.label):up();
50 else 65 elseif type(value.label) == "table" then
51 catalog:add_child(value.label); 66 catalog:tag("label"):add_child(value.label):up();
52 end 67 end
53 catalog:up():up(); 68 catalog:up();
69 if catalog_request.attr.xmlns == xmlns_label_catalog then
70 catalog:up();
71 end
54 else 72 else
55 add_labels(catalog, value, (selector or "")..name.."|"); 73 add_labels(catalog, value, (selector or "")..name.."|");
56 end 74 end
57 end 75 end
58 end 76 end
59 add_labels(reply, labels); 77 add_labels(reply, labels, "");
60 request.origin.send(reply); 78 request.origin.send(reply);
61 return true; 79 return true;
62 end); 80 end
81 module:hook("iq/host/"..xmlns_label_catalog..":catalog", handle_catalog_request);
82 module:hook("iq/self/"..xmlns_label_catalog..":catalog", handle_catalog_request); -- COMPAT
83 module:hook("iq/self/"..xmlns_label_catalog_old..":catalog", handle_catalog_request); -- COMPAT