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, min: 3,
max: 4 max: 4
}, },
imageSize: 150, imageSize: 120,
gridSize: 4, gridSize: 4,
}, },

@ -22,7 +22,7 @@ class CaptchaController {
} }
if (captchaType === 'grid') { 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 }); hoverListener.addEventListener('mouseover', () => this.loadCaptcha(captcha), { once: true });
} else { } else {
captcha.placeholder = 'focus to load captcha'; captcha.placeholder = 'focus to load captcha';

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

Loading…
Cancel
Save