Mercurial > prosody-modules
comparison mod_firewall/conditions.lib.lua @ 2128:21bc4d7cddae
mod_firewall: Add support for throttling based on user-defined properties (experimental)
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Fri, 18 Mar 2016 09:47:52 +0000 |
| parents | 59023dffbdd4 |
| children | 6848297cf40a |
comparison
equal
deleted
inserted
replaced
| 2127:59023dffbdd4 | 2128:21bc4d7cddae |
|---|---|
| 180 table.insert(conditions, "("..table.concat(clause, " "..op.." ")..")"); | 180 table.insert(conditions, "("..table.concat(clause, " "..op.." ")..")"); |
| 181 end | 181 end |
| 182 return table.concat(conditions, " or "), { "time:hour,min" }; | 182 return table.concat(conditions, " or "), { "time:hour,min" }; |
| 183 end | 183 end |
| 184 | 184 |
| 185 function condition_handlers.LIMIT(name) | 185 function condition_handlers.LIMIT(spec) |
| 186 return ("not throttle_%s:poll(1)"):format(name), { "throttle:"..name }; | 186 local name, param = spec:match("^(%w+) on (.+)$"); |
| 187 | |
| 188 if not name then | |
| 189 name = spec:match("^%w+$"); | |
| 190 if not name then | |
| 191 error("Unable to parse LIMIT specification"); | |
| 192 end | |
| 193 else | |
| 194 param = meta(("%q"):format(param)); | |
| 195 end | |
| 196 | |
| 197 if not param then | |
| 198 return ("not global_throttle_%s:poll(1)"):format(name), { "globalthrottle:"..name }; | |
| 199 end | |
| 200 return ("not multi_throttle_%s:poll_on(%s, 1)"):format(name, param), { "multithrottle:"..name }; | |
| 187 end | 201 end |
| 188 | 202 |
| 189 function condition_handlers.ORIGIN_MARKED(name_and_time) | 203 function condition_handlers.ORIGIN_MARKED(name_and_time) |
| 190 local name, time = name_and_time:match("^%s*([%w_]+)%s+%(([^)]+)s%)%s*$"); | 204 local name, time = name_and_time:match("^%s*([%w_]+)%s+%(([^)]+)s%)%s*$"); |
| 191 if not name then | 205 if not name then |
