Mercurial > prosody-modules
comparison mod_firewall/mod_firewall.lua @ 2528:44a71584521d
mod_firewall: Add SEARCH, PATTERN definitions and SCAN condition to check tokenized stanza:find() against a list
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Mon, 20 Feb 2017 09:31:30 +0000 |
parents | 5ff7eb601d60 |
children | 9aed7f4e9f07 |
comparison
equal
deleted
inserted
replaced
2527:5ff7eb601d60 | 2528:44a71584521d |
---|---|
197 assert(idsafe(list), "Invalid list name: "..list); | 197 assert(idsafe(list), "Invalid list name: "..list); |
198 assert(active_definitions.LIST[list], "Unknown list: "..list); | 198 assert(active_definitions.LIST[list], "Unknown list: "..list); |
199 return ("local list_%s = lists[%q];"):format(list, list); | 199 return ("local list_%s = lists[%q];"):format(list, list); |
200 end | 200 end |
201 }; | 201 }; |
202 search = { | |
203 local_code = function (search_name) | |
204 local search_path = assert(active_definitions.SEARCH[search_name], "Undefined search path: "..search_name); | |
205 return ("local search_%s = tostring(stanza:find(%q) or \"\")"):format(search_name, search_path); | |
206 end; | |
207 }; | |
208 tokens = { | |
209 local_code = function (search_and_pattern) | |
210 local search_name, pattern_name = search_and_pattern:match("^([^%-]+)_(.+)$"); | |
211 local code = ([[local tokens_%s_%s = {}; | |
212 if search_%s then | |
213 for s in search_%s:gmatch(patterns.%s) do | |
214 tokens_%s_%s[s] = true; | |
215 end | |
216 end | |
217 ]]):format(search_name, pattern_name, search_name, search_name, pattern_name, search_name, pattern_name); | |
218 return code, { "search:"..search_name }; | |
219 end; | |
220 }; | |
221 scan_list = { | |
222 global_code = [[local function scan_list(list, items) for item in pairs(items) do if list:contains(item) then return true; end end]]; | |
223 } | |
202 }; | 224 }; |
203 | 225 |
204 local function include_dep(dependency, code) | 226 local function include_dep(dependency, code) |
205 local dep, dep_param = dependency:match("^([^:]+):?(.*)$"); | 227 local dep, dep_param = dependency:match("^([^:]+):?(.*)$"); |
206 local dep_info = available_deps[dep]; | 228 local dep_info = available_deps[dep]; |