comparison mod_firewall/conditions.lib.lua @ 2342:6848297cf40a

mod_firewall: Add conditions for testing whether a sender of a stanza is in the recipient's roster (or in a certain roster group)
author Matthew Wild <mwild1@gmail.com>
date Fri, 04 Nov 2016 12:46:11 +0000
parents 21bc4d7cddae
children c065ab67d807
comparison
equal deleted inserted replaced
2341:52dd2a51dac8 2342:6848297cf40a
1 --luacheck: globals meta idsafe 1 --luacheck: globals meta idsafe
2 local condition_handlers = {}; 2 local condition_handlers = {};
3 3
4 local jid = require "util.jid"; 4 local jid = require "util.jid";
5
6 -- Helper to convert user-input strings (yes/true//no/false) to a bool
7 local function string_to_boolean(s)
8 s = s:lower();
9 return s == "yes" or s == "true";
10 end
5 11
6 -- Return a code string for a condition that checks whether the contents 12 -- Return a code string for a condition that checks whether the contents
7 -- of variable with the name 'name' matches any of the values in the 13 -- of variable with the name 'name' matches any of the values in the
8 -- comma/space/pipe delimited list 'values'. 14 -- comma/space/pipe delimited list 'values'.
9 local function compile_comparison_list(name, values) 15 local function compile_comparison_list(name, values)
86 return zone_check(zone, "to"); 92 return zone_check(zone, "to");
87 end 93 end
88 94
89 function condition_handlers.LEAVING(zone) 95 function condition_handlers.LEAVING(zone)
90 return zone_check(zone, "from"); 96 return zone_check(zone, "from");
97 end
98
99 function condition_handlers.IN_ROSTER(yes_no)
100 local in_roster_requirement = string_to_boolean(yes_no);
101 return "not "..(in_roster_requirement and "not" or "").." roster_entry", { "roster_entry" };
102 end
103
104 function condition_handlers.IN_ROSTER_GROUP(group)
105 return ("not not (roster_entry and roster_entry.groups[%q])"):format(group), { "roster_entry" };
91 end 106 end
92 107
93 function condition_handlers.PAYLOAD(payload_ns) 108 function condition_handlers.PAYLOAD(payload_ns)
94 return ("stanza:get_child(nil, %q)"):format(payload_ns); 109 return ("stanza:get_child(nil, %q)"):format(payload_ns);
95 end 110 end