mod_seclabels/mod_seclabels.lua
changeset 452 48b615229509
parent 451 f43d2d26c1c4
child 937 5276e1fc26b6
equal deleted inserted replaced
451:f43d2d26c1c4 452:48b615229509
    13 	stanza:tag('feature', {var=xmlns_label}):up();
    13 	stanza:tag('feature', {var=xmlns_label}):up();
    14 	stanza:tag('feature', {var=xmlns_label_catalog}):up();
    14 	stanza:tag('feature', {var=xmlns_label_catalog}):up();
    15 end);
    15 end);
    16 
    16 
    17 local default_labels = {
    17 local default_labels = {
       
    18 	{
       
    19 		name = "Unclassified",
       
    20 		label = true,
       
    21 		default = true,
       
    22 	},
    18 	Classified = {
    23 	Classified = {
    19 		SECRET = { color = "black", bgcolor = "aqua", label = "THISISSECRET" };
    24 		SECRET = { color = "black", bgcolor = "aqua", label = "THISISSECRET" };
    20 		PUBLIC = { label = "THISISPUBLIC" };
    25 		PUBLIC = { label = "THISISPUBLIC" };
    21 	};
    26 	};
    22 };
    27 };
    38 			name = catalog_name,
    43 			name = catalog_name,
    39 			desc = catalog_desc
    44 			desc = catalog_desc
    40 		});
    45 		});
    41 	
    46 	
    42 	local function add_labels(catalog, labels, selector)
    47 	local function add_labels(catalog, labels, selector)
    43 		for name, value in pairs(labels) do
    48 		local function add_item(item, name)
    44 			if value.label then
    49 			local name = name or item.name;
       
    50 			if item.label then
    45 				if catalog_request.attr.xmlns == xmlns_label_catalog then
    51 				if catalog_request.attr.xmlns == xmlns_label_catalog then
    46 					catalog:tag("item", {
    52 					catalog:tag("item", {
    47 						selector = selector..name,
    53 						selector = selector..name,
    48 						default = value.default and "true" or nil,
    54 						default = item.default and "true" or nil,
    49 					}):tag("securitylabel", { xmlns = xmlns_label })
    55 					}):tag("securitylabel", { xmlns = xmlns_label })
    50 				else -- COMPAT
    56 				else -- COMPAT
    51 					catalog:tag("securitylabel", {
    57 					catalog:tag("securitylabel", {
    52 						xmlns = xmlns_label,
    58 						xmlns = xmlns_label,
    53 						selector = selector..name,
    59 						selector = selector..name,
    54 						default = value.default and "true" or nil,
    60 						default = item.default and "true" or nil,
    55 					})
    61 					})
    56 				end
    62 				end
    57 				if value.name or value.color or value.bgcolor then
    63 				if item.display or item.color or item.bgcolor then
    58 					catalog:tag("displaymarking", {
    64 					catalog:tag("displaymarking", {
    59 						fgcolor = value.color,
    65 						fgcolor = item.color,
    60 						bgcolor = value.bgcolor,
    66 						bgcolor = item.bgcolor,
    61 					}):text(value.name or name):up();
    67 					}):text(item.display or name):up();
    62 				end
    68 				end
    63 				if type(value.label) == "string" then
    69 				if type(item.label) == "string" then
    64 					catalog:tag("label"):text(value.label):up();
    70 					catalog:tag("label"):text(item.label):up();
    65 				elseif type(value.label) == "table" then
    71 				elseif type(item.label) == "table" then
    66 					catalog:tag("label"):add_child(value.label):up();
    72 					catalog:tag("label"):add_child(item.label):up();
    67 				end
    73 				end
    68 				catalog:up();
    74 				catalog:up();
    69 				if catalog_request.attr.xmlns == xmlns_label_catalog then
    75 				if catalog_request.attr.xmlns == xmlns_label_catalog then
    70 					catalog:up();
    76 					catalog:up();
    71 				end
    77 				end
    72 			else
    78 			else
    73 				add_labels(catalog, value, (selector or "")..name.."|");
    79 				add_labels(catalog, item, (selector or "")..name.."|");
       
    80 			end
       
    81 		end
       
    82 		for i = 1,#labels do
       
    83 			add_item(labels[i])
       
    84 		end
       
    85 		for name, child in pairs(labels) do
       
    86 			if type(name) == "string" then
       
    87 				add_item(child, name)
    74 			end
    88 			end
    75 		end
    89 		end
    76 	end
    90 	end
    77 	-- TODO query remote servers
    91 	-- TODO query remote servers
    78 	--[[ FIXME later
    92 	--[[ FIXME later