Mercurial > prosody-modules
comparison mod_firewall/conditions.lib.lua @ 5704:ad5c77793750
mod_firewall: Add FROM COUNTRY condition based on GeoIP DB
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 12 Nov 2023 16:37:47 +0100 |
parents | eeccec0955a1 |
children | 14e17927c0ec |
comparison
equal
deleted
inserted
replaced
5703:0ac4545cb4f9 | 5704:ad5c77793750 |
---|---|
379 "it_count", | 379 "it_count", |
380 "search:"..search_name, "pattern:"..pattern_name | 380 "search:"..search_name, "pattern:"..pattern_name |
381 }; | 381 }; |
382 end | 382 end |
383 | 383 |
384 -- FROM COUNTRY: SE | |
385 -- FROM COUNTRY: code=SE | |
386 -- FROM COUNTRY: SWE | |
387 -- FROM COUNTRY: code3=SWE | |
388 -- FROM COUNTRY: continent=EU | |
389 -- FROM COUNTRY? --> NOT FROM COUNTRY: -- (for unknown/invalid) | |
390 -- TODO list support? | |
391 function condition_handlers.FROM_COUNTRY(geoip_spec) | |
392 local condition = "=="; | |
393 if not geoip_spec then | |
394 geoip_spec = "--"; | |
395 condition = "~="; | |
396 end | |
397 local field, country = geoip_spec:match("(%w+)=(%w+)"); | |
398 if not field then | |
399 if #geoip_spec == 3 then | |
400 field, country = "code3", geoip_spec; | |
401 elseif #geoip_spec == 2 then | |
402 field, country = "code", geoip_spec; | |
403 else | |
404 error("Unknown country code type"); | |
405 end | |
406 end | |
407 return ("get_geoip(session.ip, %q) %s %q"):format(field:lower(), condition, country:upper()), { "geoip_country" }; | |
408 end | |
409 | |
384 return condition_handlers; | 410 return condition_handlers; |