function displaycapd(pa) ngx.header.content_type = "text/html" local cookie, err = cook:new() if not cookie then ngx.log(ngx.ERR, err) ngx.say("cookie error") ngx.exit(200) end local blocked_cookies = ngx.shared.blocked_cookies local field, err = cookie:get("dcap") plaintext = decrypt(field) cookdata = split(plaintext, "|") if (cookdata[2] == "cap_not_solved") then if (cookdata[6] == "3") then blocked_cookies:set(field, 1, 120) local ni = random.number(5,20) local tstamp = ngx.now() + ni local plaintext = random.token(random.number(5, 20)) .. "|queue|" .. tstamp .. "|" .. pa .. "|" local ciphertext = encrypt(plaintext) cookie:set( { key = "dcap", value = ciphertext, path = "/", domain = ngx.var.host, httponly = true, max_age = 30, samesite = "Lax" }) ngx.header["Refresh"] = ni ngx.header.content_type = "text/html" local file = io.open("/etc/nginx/resty/queue.html") local queue, err = file:read("*a") file:close() ngx.say(queue) ngx.flush() ngx.exit(200) end end local function getChallenge() local success, module = pcall(require, "challenge") if not success then ngx.header["Refresh"] = '5' ngx.say("Captcha racetime condition hit. Refreshing in 5 seconds.") ngx.exit(200) end local ni = random.number(0,49) if challengeArray[ni] ~= nil then local challenge = challengeArray[ni] return split(challenge, "*") else ngx.header["Refresh"] = '5' ngx.say("Captcha racetime condition hit. Refreshing in 5 seconds.") ngx.exit(200) end end local im = getChallenge() local challengeStyle = im[1] local challengeAnswer = im[2] local challengeImage = im[3] local tstamp = ngx.now() local newcookdata = random.token(random.number(5, 20)) .. "|cap_not_solved|" .. tstamp .. "|" .. pa .. "|" .. challengeAnswer if (cookdata[2] == "queue") then newcookdata = newcookdata .. "|1" else newcookdata = newcookdata .. "|" .. tonumber(cookdata[6] + 1) end local ciphertext = encrypt(newcookdata) local ok, err = cookie:set( { key = "dcap", value = ciphertext, path = "/", domain = ngx.var.host, httponly = true, samesite = "Lax" } ) blocked_cookies:set(field, 1, 120) if not ok then ngx.say("cookie error") ngx.exit(200) end ngx.say([[