mirror of
https://github.com/bunkerity/bunkerized-nginx
synced 2023-12-13 21:30:18 +01:00
45 lines
1.3 KiB
Lua
45 lines
1.3 KiB
Lua
local M = {}
|
|
local http = require "resty.http"
|
|
local cjson = require "cjson"
|
|
|
|
function M.get_code (antibot_uri, recaptcha_sitekey)
|
|
-- get template
|
|
local f = io.open("/antibot/recaptcha.html", "r")
|
|
local template = f:read("*all")
|
|
f:close()
|
|
|
|
-- get recaptcha code
|
|
f = io.open("/antibot/recaptcha-head.data", "r")
|
|
local recaptcha_head = f:read("*all")
|
|
f:close()
|
|
f = io.open("/antibot/recaptcha-body.data", "r")
|
|
local recaptcha_body = f:read("*all")
|
|
f:close()
|
|
|
|
-- edit recaptcha code
|
|
recaptcha_head = string.format(recaptcha_head, recaptcha_sitekey)
|
|
recaptcha_body = string.format(recaptcha_body, antibot_uri, recaptcha_sitekey)
|
|
|
|
-- return template + edited recaptcha code
|
|
return template:gsub("%%RECAPTCHA_HEAD%%", recaptcha_head):gsub("%%RECAPTCHA_BODY%%", recaptcha_body)
|
|
end
|
|
|
|
function M.check (token, recaptcha_secret)
|
|
local httpc = http.new()
|
|
local res, err = httpc:request_uri("https://www.google.com/recaptcha/api/siteverify", {
|
|
ssl_verify = false,
|
|
method = "POST",
|
|
body = "secret=" .. recaptcha_secret .. "&response=" .. token .. "&remoteip=" .. ngx.var.remote_addr,
|
|
headers = { ["Content-Type"] = "application/x-www-form-urlencoded" }
|
|
})
|
|
if not res then
|
|
return 0.0
|
|
end
|
|
local data = cjson.decode(res.body)
|
|
if not data.success then
|
|
return 0.0
|
|
end
|
|
return data.score
|
|
end
|
|
|
|
return M
|