comparison mod_firewall/actions.lib.lua @ 961:f0108ec2b016

mod_firewall/actions: Break out logic into a separate reusable function
author Matthew Wild <mwild1@gmail.com>
date Fri, 05 Apr 2013 18:50:52 +0100
parents d773a51af9b1
children 8a3f3f485675
comparison
equal deleted inserted replaced
960:d773a51af9b1 961:f0108ec2b016
1 local action_handlers = {}; 1 local action_handlers = {};
2
3
4 -- Run code through this to allow strings to contain code. e.g.: LOG=Received: $(stanza:top_tag())
5 local function meta(s, extra)
6 return (s:gsub("$(%b())", [["..%1.."]])
7 :gsub("$(%b<>)", [["..stanza:find("%1").."]])
8 :gsub("$$(%a+)", extra or {}));
9 end
2 10
3 -- Takes an XML string and returns a code string that builds that stanza 11 -- Takes an XML string and returns a code string that builds that stanza
4 -- using st.stanza() 12 -- using st.stanza()
5 local function compile_xml(data) 13 local function compile_xml(data)
6 local code = {}; 14 local code = {};
150 end 158 end
151 159
152 function action_handlers.LOG(string) 160 function action_handlers.LOG(string)
153 local level = string:match("^%[(%a+)%]") or "info"; 161 local level = string:match("^%[(%a+)%]") or "info";
154 string = string:gsub("^%[%a+%] ?", ""); 162 string = string:gsub("^%[%a+%] ?", "");
155 return (("log(%q, %q)"):format(level, string) 163 return meta(("log(%q, %q)"):format(level, string));
156 :gsub("$top", [["..stanza:top_tag().."]])
157 :gsub("$stanza", [["..stanza.."]])
158 :gsub("$(%b())", [["..%1.."]]));
159 end 164 end
160 165
161 function action_handlers.RULEDEP(dep) 166 function action_handlers.RULEDEP(dep)
162 return "", { dep }; 167 return "", { dep };
163 end 168 end