less dumb logic for the captcha loop and make it a bit stronger

merge-requests/208/head
Thomas Lynch 4 years ago
parent 5a6114014f
commit cb4c74b7cf
  1. 2
      configs/main.js.example
  2. 2
      gulp/res/js/captcha.js
  3. 40
      helpers/captcha/generators/grid.js

@ -52,7 +52,7 @@ nano module.exports = {
min: 3,
max: 4
},
imageSize: 150,
imageSize: 120,
gridSize: 4,
},

@ -22,7 +22,7 @@ class CaptchaController {
}
if (captchaType === 'grid') {
const hoverListener = captcha.parentElement.previousSibling.tagName === 'SUMMARY' ? captcha.parentElement.previousSibling : captcha.parentElement;
const hoverListener = captcha.parentElement.previousSibling.previousSibling.tagName === 'SUMMARY' ? captcha.parentElement.previousSibling.previousSibling : captcha.parentElement;
hoverListener.addEventListener('mouseover', () => this.loadCaptcha(captcha), { once: true });
} else {
captcha.placeholder = 'focus to load captcha';

@ -14,12 +14,13 @@ const gm = require('gm').subClass({ imageMagick: true })
} while (g > div * mod - 1);
return ((g / div) | 0) + min;
}
, crop = 30
, width = captchaOptions.imageSize+crop
, height = captchaOptions.imageSize+crop
, padding = 30
, width = captchaOptions.imageSize+padding
, height = captchaOptions.imageSize+padding
, gridSize = captchaOptions.gridSize
, zeros = ['○','□','♘','♢','▽','△','♖','✧','♔','♘','♕','♗','♙','♧']
, ones = ['●','■','♞','♦','▼','▲','♜','✦','♚','♞','♛','♝','♟','♣']
, colors = ['#FF8080', '#80FF80', '#8080FF', '#FF80FF', '#FFFF80', '#80FFFF']
module.exports = async () => {
//number of inputs in grid
@ -52,25 +53,26 @@ module.exports = async () => {
.fill('#000000')
.font(__dirname+'/../font.ttf');
const spaceSize = (width-crop)/gridSize;
for(let i = 0, j = 0; i < boolArray.length; i++) {
if (i % gridSize === 0) { j++ }
const cxOffset = await randomRange(0, spaceSize*0.75);
const cyOffset = await randomRange(spaceSize/2, spaceSize);
const charIndex = await randomRange(0, ones.length-1);
const character = (boolArray[i] ? ones : zeros)[charIndex];
captcha.fontSize((await randomRange(20,30)))
captcha.drawText(
(spaceSize*(i%gridSize))+cxOffset+(crop/2),
(spaceSize*(j-1))+cyOffset+(crop/2),
character
);
const spaceSize = (width-padding)/gridSize;
for(let j = 0; j < gridSize; j++) {
let cxOffset = await randomRange(0, spaceSize*1.5);
for(let i = 0; i < gridSize; i++) {
const index = (j*gridSize)+i;
const cyOffset = await randomRange(0, spaceSize/2);
const charIndex = await randomRange(0, ones.length-1);
const character = (boolArray[index] ? ones : zeros)[charIndex];
captcha.fontSize((await randomRange(20,30)))
captcha.drawText(
spaceSize*(i)+cxOffset,
spaceSize*(j+1)+cyOffset,
character
);
}
}
captcha
.distort(distorts, 'Shepards')
.edge(25)
// .quality(10)
.crop(captchaOptions.imageSize,captchaOptions.imageSize,crop/2,crop/2)
.edge(5)
.write(`${uploadDirectory}/captcha/${captchaId}.jpg`, (err) => {
if (err) {
return reject(err);

Loading…
Cancel
Save