-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
55 lines (51 loc) · 1.28 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
const { sha256Hash, verifySHA256Hash } = require('./utils/cryptoEncDec');
const { createTextImage } = require('./utils/generateImageFromText');
const { generateRandomString } = require('./utils/randomStringGenerator')
function generate(config) {
const { len, difficulty, color} = config
const str = generateRandomString(len);
let font = '120px ';
let colour;
switch(difficulty?.toLowerCase()) {
case 'easy':
font += 'HenryPenny'
break;
case 'medium':
font += 'Ingrid'
break;
default:
font += 'HenryPenny'
break;
}
switch(color?.toUpperCase()) {
case 'R':
colour = '#FF0000'
break;
case 'G':
colour = '#00FF00'
break;
case 'B':
colour = '#0000FF'
break;
default:
colour = '#000'
break;
}
const captcha = createTextImage(str, font, colour)
const hash = sha256Hash(str);
return {
captcha,
hash
}
}
function verify(captcha, hash) {
let str = '';
for(let i = 0; i < captcha.length; i ++) {
str += captcha[i] + ' ';
}
return verifySHA256Hash(str, hash)
}
module.exports = {
generate,
verify
}