mirror of
https://github.com/bunkerity/bunkerized-nginx
synced 2023-12-13 21:30:18 +01:00
45 lines
1.5 KiB
Plaintext
45 lines
1.5 KiB
Plaintext
location = {{ ANTIBOT_URI }} {
|
|
|
|
default_type 'text/html';
|
|
|
|
if ($request_method = GET) {
|
|
content_by_lua_block {
|
|
local cookie = require "cookie"
|
|
local recaptcha = require "recaptcha"
|
|
local logger = require "logger"
|
|
if not cookie.is_set("uri") then
|
|
logger.log(ngx.WARN, "ANTIBOT", "recaptcha fail (1) for " .. ngx.var.remote_addr)
|
|
return ngx.exit(ngx.HTTP_FORBIDDEN)
|
|
end
|
|
local code = recaptcha.get_code("{{ ANTIBOT_URI }}", "{{ ANTIBOT_RECAPTCHA_SITEKEY }}")
|
|
ngx.say(code)
|
|
}
|
|
}
|
|
|
|
if ($request_method = POST) {
|
|
access_by_lua_block {
|
|
local cookie = require "cookie"
|
|
local recaptcha = require "recaptcha"
|
|
local logger = require "logger"
|
|
if not cookie.is_set("uri") then
|
|
logger.log(ngx.WARN, "ANTIBOT", "recaptcha fail (2) for " .. ngx.var.remote_addr)
|
|
return ngx.exit(ngx.HTTP_FORBIDDEN)
|
|
end
|
|
ngx.req.read_body()
|
|
local args, err = ngx.req.get_post_args(1)
|
|
if err == "truncated" or not args or not args["token"] then
|
|
logger.log(ngx.WARN, "ANTIBOT", "recaptcha fail (3) for " .. ngx.var.remote_addr)
|
|
return ngx.exit(ngx.HTTP_FORBIDDEN)
|
|
end
|
|
local token = args["token"]
|
|
local check = recaptcha.check(token, "{{ ANTIBOT_RECAPTCHA_SECRET }}")
|
|
if check < {{ ANTIBOT_RECAPTCHA_SCORE }} then
|
|
logger.log(ngx.WARN, "ANTIBOT", "recaptcha fail (4) for " .. ngx.var.remote_addr .. " (score = " .. tostring(check) .. ")")
|
|
return ngx.exit(ngx.HTTP_FORBIDDEN)
|
|
end
|
|
cookie.set({recaptcha = "ok"})
|
|
return ngx.redirect(cookie.get("uri"))
|
|
}
|
|
}
|
|
}
|