我们还有哪些地方可以改进、删除或进一步说明?选填
0 / 500
如果您需要账户帮助,请查看我们的个人或机构支持页面。
正在加载挑战码...
请重试。
请重新加载图像
请稍后生成
正在验证...`;
captchaAlert.style.display = 'none';
captchaAlertReload.style.display = 'none';
captchaAlertRate.style.display = 'none'
if(modalCaptcha === undefined){
}
if (images.length > 1) {
renderCaptcha();
if (val == 'generate') {
modalCaptcha.show();
}
return;
}
let data = {
fingerprint: "7a5e2420260715",
ip: "216.73.216.170"
};
if (val == 'generate') {
modalCaptcha.show();
}
let url = '/webrest/captcha/generate';
fetch(url, {
method: 'POST',
headers: {
'Content-type': 'application/json',
},
body : JSON.stringify(data)
}).then(response => response.json())
.then((res) => {
captchaImageJson = res;
if(captchaImageJson.category.includes("Rate")){
captchaAlertRate.style.display = 'block';
return;
}
images = captchaImageJson.fileNames;
renderCaptcha();
});
}
function trimFileName(name) {
let fileName = name.length == 6 ? name.slice(-2) : name.slice(-3);
fileName = fileName.slice(0, 1) == '0' ? fileName.slice(1) : fileName;
return fileName;
}
function renderCaptcha() {
let allCategories = [];
selectedImage = new Set();
captchaGrid.innerHTML = '';
images.forEach((img, i) => {
let fileName = trimFileName(img);
let url = '../../images/web/captcha/captcha_' + fileName + '.svg';
let imageEl = new Image();
let imageX = 25;
let imageY = 25;
imageEl.src = url;
if (i % 3 == 1) {
imageX = 122;
} else if (i % 3 == 2) {
imageX = 220;
}
if (i > 2 && i < 6) {
imageY = 122;
} else if (i > 5) {
imageY = 220;
}
imageEl.onload = () => {
captchaCanvas.save();
captchaCanvas.drawImage(imageEl, imageX, imageY, 54, 54);
captchaCanvas.restore();
resetCanvas = true;
}
const el = document.createElement('div');
el.className = 'captcha-select';
el.onclick = () => {
captchaAlert.style.display = 'none';
if (selectedImage.has(i)) {
selectedImage.delete(i);
el.classList.remove('selected');
} else {
selectedImage.add(i);
el.classList.add('selected');
}
};
captchaGrid.appendChild(el);
});
document.getElementById('captchaText').textContent = `请点击所有显示${captchaImageJson.category}的图标。`;
}
captchaSubmit.onclick = () => {
if (checkAlert()) {
return;
}
let selected = '';
images.forEach((img, i) => {
if (selectedImage.has(i)) {
selected = selected + img + ','
};
});
selected = selected.slice(0, -1);
if (selected == '') {
captchaAlert.style.display = 'block';
captchaAlertReload.style.display = 'none';
return;
}
let data = {
id: captchaImageJson.id,
ip: "216.73.216.170",
selected: selected,
fingerprint: "7a5e2420260715"
};
let url = '/webrest/captcha/verify';
fetch(url, {
method: 'POST',
headers: {
'Content-type': 'application/json',
},
body : JSON.stringify(data)
}).then(response => response.json())
.then((res) => {
setCaptchaId(data.id+'-'+data.fingerprint);
checkSumbit(res,selected);
});
};
function checkSumbit(res,selected) {
if(validateCaptcha(res.token,selected)){
correctCaptcha = res.answer;
}
if (correctCaptcha && res.count <= 3) {
captchaImageResult = res.answer;
modalCaptcha.hide();
modalCaptchaSuccess.show();
captchaButton.classList.add('is-valid', 'disabled');
captchaButton.innerHTML = `
`;
setCaptchaValue(correctCaptcha);
} else if (res.count == 3) {
captchaAlert.style.display = 'none';
captchaAlertReload.style.display = 'block';
}
else {
captchaAlert.style.display = 'block';
captchaAlertReload.style.display = 'none';
}
}
function validateCaptcha(token,selected) {
var tokenArr = token.split('-');
var selectedArr = selected.split(',');
if(tokenArr.length != selectedArr.length){
return false;
}
let count = 0;
for(let i = 0; i < tokenArr.length; i++){
let ans = tokenArr[i].substring(3);
for(let j = 0; j < selectedArr.length; j++){
let sel = selectedArr[j].substring(4);
if(ans == sel){
count++;
}
}
}
if(count == tokenArr.length){
return true;
}
return false;
}
captchaReload.onclick = () => {
generateGrid('reload');
};
modalCaptchaElement.addEventListener('hidden.bs.modal', function () {
if (!correctCaptcha) {
captchaButton.innerHTML = `
`;
}
captchaAlertRate.style.display = 'none'
});
}, 2000);
});
function resetCaptchaButton(){
captchaButton.classList.remove('is-valid', 'disabled');
captchaButton.innerHTML = `
`;
correctCaptcha = false;
images = [];
}
请输入验证码