From 8cb6add80a32bc203c6072165b1998fbd5eb2455 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Sat, 2 Dec 2023 23:52:29 +0600 Subject: [PATCH] Fixed a bug where input name captcha-verified was not sent. --- exmplate/script.js | 23 ++++++++++++++--------- production/script.js | 2 +- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/exmplate/script.js b/exmplate/script.js index 1900263..a65c157 100644 --- a/exmplate/script.js +++ b/exmplate/script.js @@ -7,7 +7,6 @@ const domain = element.getAttribute('data-domain'); const token = element.getAttribute('data-token'); const staticPath = element.getAttribute('data-static-path'); - const captchaVerifiedName = element.getAttribute('data-captcha-verified-name'); let windowCaptcha = null; @@ -22,14 +21,14 @@ shadow.appendChild(button); button.addEventListener('click', function () { if (windowCaptcha === null) { - windowCaptcha = createWindowCaptcha(shadow, domain, token, captchaVerifiedName); + windowCaptcha = createWindowCaptcha(shadow, domain, token, element); } windowCaptcha.style.display = 'block'; - actionGetCaptcha(windowCaptcha, domain, token, shadow, captchaVerifiedName); + actionGetCaptcha(windowCaptcha, domain, token, shadow, element); }); }); - function createWindowCaptcha (shadow, domain, token, captchaVerifiedName) { + function createWindowCaptcha (shadow, domain, token, element) { const windowCaptcha = document.createElement('div'); windowCaptcha.classList.add('window-captcha'); windowCaptcha.innerHTML = `
@@ -50,7 +49,7 @@ }); windowCaptcha.querySelector('button.window-captcha__reload').addEventListener('click', function () { - actionGetCaptcha(windowCaptcha, domain, token, shadow, captchaVerifiedName); + actionGetCaptcha(windowCaptcha, domain, token, shadow, element); }); return windowCaptcha; @@ -61,7 +60,7 @@ windowCaptcha.style.display = 'none'; } - function actionGetCaptcha(windowCaptcha, domain, token, shadow, captchaVerifiedName) + function actionGetCaptcha(windowCaptcha, domain, token, shadow, element) { let bodyBlock = windowCaptcha.querySelector('div.window-captcha__content__body'); if (bodyBlock.querySelectorAll('.loading').length > 0) { @@ -117,7 +116,7 @@ }); bodyBlock.querySelector('.window-captcha__content__body__button').addEventListener('click', function () { - checkingCaptcha(bodyBlock, domain, token, shadow, captchaVerifiedName); + checkingCaptcha(bodyBlock, domain, token, shadow, element); }); }) .catch(error => { @@ -125,7 +124,7 @@ }); } - function checkingCaptcha (bodyBlock, domain, token, shadow, captchaVerifiedName) { + function checkingCaptcha (bodyBlock, domain, token, shadow, element) { let button = bodyBlock.querySelector('button.window-captcha__content__body__button'); if (button.querySelectorAll('.loading').length > 0) { return null; @@ -179,9 +178,15 @@ } shadow.querySelector('button.button-open-window-captcha').remove(); let captchaVerified = document.createElement('div'); - captchaVerified.innerHTML = `Ура!!! Проверку прошли!`; + captchaVerified.innerHTML = `Ура!!! Проверку прошли!`; shadow.appendChild(captchaVerified); shadow.querySelector('.window-captcha').remove(); + + const captchaVerifiedInput = document.createElement('input'); + captchaVerifiedInput.name = element.getAttribute('data-captcha-verified-name'); + captchaVerifiedInput.value = data.captcha_key; + captchaVerifiedInput.type = 'hidden'; + element.appendChild(captchaVerifiedInput); }) .catch(error => { setError('Произошла ошибка!', button) diff --git a/production/script.js b/production/script.js index 39ead62..b5e9d03 100644 --- a/production/script.js +++ b/production/script.js @@ -2,4 +2,4 @@ * Copyright (C) 2023 Leonid Nikitin (kor-elf) * https://git.kor-elf.net/kor-elf/service-captcha-gui/src/branch/main/LICENSE.md */ -!function(t){let e=t.querySelectorAll("div.captcha-service-kor-elf");function n(t){t.style.display="none"}function c(e,n,c,o,i){let r=e.querySelector("div.window-captcha__content__body");if(r.querySelectorAll(".loading").length>0)return null;r.innerHTML='
',fetch(n+"/api/v1/captcha",{headers:{"Content-Type":"application/json",Accept:"application/json","public-token":c}}).then(t=>t.json()).then(function(e){let l=e.image_body.width,d=e.image_body.height;r.innerHTML=`

Выберите значение в том порядке, на котором на картинке выше:

`;let s=r.querySelector("div.window-captcha__content__body__coordinator"),u=s.querySelector("img");u.addEventListener("click",function(e){let n=t.createElement("div");n.style.left=e.offsetX/u.width*100+"%",n.style.top=e.offsetY/u.height*100+"%",n.classList.add("pointer");let c=e.offsetX*(l/u.width),a=e.offsetY*(d/u.height),o=s.querySelectorAll(".pointer").length+1;n.innerHTML=`${o}`,n.addEventListener("click",function(){n.remove(),s.querySelectorAll(".pointer").forEach(function(t,e){t.querySelector("span.pounter__number").textContent=e+1})}),s.appendChild(n)}),r.querySelector(".window-captcha__content__body__button").addEventListener("click",function(){(function e(n,c,o,i,r){let l=n.querySelector("button.window-captcha__content__body__button");if(l.querySelectorAll(".loading").length>0)return null;let d=t.createElement("span");d.classList.add("loading"),l.appendChild(d);let s={captcha_key:n.querySelector(".captcha_key").value,verification:[]};n.querySelectorAll(".pointer").forEach(function(t){s.verification.push({x:t.querySelector(".x").value,y:t.querySelector(".y").value})}),fetch(c+"/api/v1/captcha",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","public-token":o},body:JSON.stringify(s)}).then(t=>{if(429===t.status){a("Вы превысили количество попыток. Обновите каптчу.",l);return}return t.json()}).then(function(e){if(void 0!==e.errors){let n="";for(let c in e.errors)n+=e.errors[c]+"
";""===n&&(n=e.message),a(n,l);return}if(void 0===e.captcha_key){a("Произошла ошибка!",l);return}i.querySelector("button.button-open-window-captcha").remove();let o=t.createElement("div");o.innerHTML=`Ура!!! Проверку прошли!`,i.appendChild(o),i.querySelector(".window-captcha").remove()}).catch(t=>{a("Произошла ошибка!",l)}).finally(function(){d.remove()})})(r,n,c,o,i)})}).catch(t=>{r.innerHTML=`
Произошла ошибка, сервис с каптчей не ответил. Попробуйте ещё раз!
`})}function a(e,n){let c=t.createElement("div");c.classList.add("error-message"),c.innerHTML=e,n.before(c),setTimeout(function(){c.remove()},3e3)}e.forEach(function(e){let a=e.attachShadow({mode:"closed"}),o=t.createElement("button"),i=t.createElement("link"),r=e.getAttribute("data-domain"),l=e.getAttribute("data-token"),d=e.getAttribute("data-static-path"),s=e.getAttribute("data-captcha-verified-name"),u=null;i.rel="stylesheet",i.type="text/css",i.href=d+"/style.css",a.appendChild(i),o.textContent="Я не робот!",o.type="button",o.classList.add("button-open-window-captcha"),a.appendChild(o),o.addEventListener("click",function(){null===u&&(u=function e(a,o,i,r){let l=t.createElement("div");return l.classList.add("window-captcha"),l.innerHTML=`
Я не робот!
`,a.appendChild(l),l.addEventListener("click",function(t){if(t.target!==l)return null;n(l)}),l.querySelector("button.window-captcha__close").addEventListener("click",function(){n(l)}),l.querySelector("button.window-captcha__reload").addEventListener("click",function(){c(l,o,i,a,r)}),l}(a,r,l,s)),u.style.display="block",c(u,r,l,a,s)})})}(document); \ No newline at end of file +!function(e){let t=e.querySelectorAll("div.captcha-service-kor-elf");function n(e){e.style.display="none"}function c(t,n,c,o,i){let r=t.querySelector("div.window-captcha__content__body");if(r.querySelectorAll(".loading").length>0)return null;r.innerHTML='
',fetch(n+"/api/v1/captcha",{headers:{"Content-Type":"application/json",Accept:"application/json","public-token":c}}).then(e=>e.json()).then(function(t){let l=t.image_body.width,d=t.image_body.height;r.innerHTML=`

Выберите значение в том порядке, на котором на картинке выше:

`;let s=r.querySelector("div.window-captcha__content__body__coordinator"),p=s.querySelector("img");p.addEventListener("click",function(t){let n=e.createElement("div");n.style.left=t.offsetX/p.width*100+"%",n.style.top=t.offsetY/p.height*100+"%",n.classList.add("pointer");let c=t.offsetX*(l/p.width),a=t.offsetY*(d/p.height),o=s.querySelectorAll(".pointer").length+1;n.innerHTML=`${o}`,n.addEventListener("click",function(){n.remove(),s.querySelectorAll(".pointer").forEach(function(e,t){e.querySelector("span.pounter__number").textContent=t+1})}),s.appendChild(n)}),r.querySelector(".window-captcha__content__body__button").addEventListener("click",function(){(function t(n,c,o,i,r){let l=n.querySelector("button.window-captcha__content__body__button");if(l.querySelectorAll(".loading").length>0)return null;let d=e.createElement("span");d.classList.add("loading"),l.appendChild(d);let s={captcha_key:n.querySelector(".captcha_key").value,verification:[]};n.querySelectorAll(".pointer").forEach(function(e){s.verification.push({x:e.querySelector(".x").value,y:e.querySelector(".y").value})}),fetch(c+"/api/v1/captcha",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","public-token":o},body:JSON.stringify(s)}).then(e=>{if(429===e.status){a("Вы превысили количество попыток. Обновите каптчу.",l);return}return e.json()}).then(function(t){if(void 0!==t.errors){let n="";for(let c in t.errors)n+=t.errors[c]+"
";""===n&&(n=t.message),a(n,l);return}if(void 0===t.captcha_key){a("Произошла ошибка!",l);return}i.querySelector("button.button-open-window-captcha").remove();let o=e.createElement("div");o.innerHTML=`Ура!!! Проверку прошли!`,i.appendChild(o),i.querySelector(".window-captcha").remove();let d=e.createElement("input");d.name=r.getAttribute("data-captcha-verified-name"),d.value=t.captcha_key,d.type="hidden",r.appendChild(d)}).catch(e=>{a("Произошла ошибка!",l)}).finally(function(){d.remove()})})(r,n,c,o,i)})}).catch(e=>{r.innerHTML=`
Произошла ошибка, сервис с каптчей не ответил. Попробуйте ещё раз!
`})}function a(t,n){let c=e.createElement("div");c.classList.add("error-message"),c.innerHTML=t,n.before(c),setTimeout(function(){c.remove()},3e3)}t.forEach(function(t){let a=t.attachShadow({mode:"closed"}),o=e.createElement("button"),i=e.createElement("link"),r=t.getAttribute("data-domain"),l=t.getAttribute("data-token"),d=t.getAttribute("data-static-path"),s=null;i.rel="stylesheet",i.type="text/css",i.href=d+"/style.css",a.appendChild(i),o.textContent="Я не робот!",o.type="button",o.classList.add("button-open-window-captcha"),a.appendChild(o),o.addEventListener("click",function(){null===s&&(s=function t(a,o,i,r){let l=e.createElement("div");return l.classList.add("window-captcha"),l.innerHTML=`
Я не робот!
`,a.appendChild(l),l.addEventListener("click",function(e){if(e.target!==l)return null;n(l)}),l.querySelector("button.window-captcha__close").addEventListener("click",function(){n(l)}),l.querySelector("button.window-captcha__reload").addEventListener("click",function(){c(l,o,i,a,r)}),l}(a,r,l,t)),s.style.display="block",c(s,r,l,a,t)})})}(document); \ No newline at end of file