@@ -15,7 +15,7 @@ if (!existsSync("./db.sqlite")) writeFileSync("./db.sqlite", "");
1515const io = socket ( server ) ;
1616sqlite . open ( "db.sqlite" ) ;
1717const sessions = require ( "./SessionIDManager" ) ;
18- const captchas = new Map ( ) ;
18+ let captchas = new Array ( ) ;
1919
2020/**
2121 * Displays an error by emitting to websocket on clientside
@@ -33,7 +33,9 @@ function displayError(msg, data, event, status) {
3333 } ) ;
3434}
3535
36-
36+ setInterval ( ( ) => {
37+ captchas = captchas . filter ( val => ( val . createdAt + 18e4 ) > Date . now ( ) ) ;
38+ } , 1000 ) ;
3739
3840io . on ( "connection" , data => {
3941 data . on ( "getCaptcha" , ( ) => {
@@ -45,7 +47,10 @@ io.on("connection", data => {
4547 y : Math . floor ( Math . random ( ) * 65 ) + 25
4648 }
4749 } ) ;
48- captchas . set ( data . id , captcha ) ;
50+ captchas . push ( {
51+ captcha : captcha ,
52+ createdAt : Date . now ( )
53+ } ) ;
4954 } ) ;
5055
5156 data . on ( "login" , res => {
@@ -94,8 +99,8 @@ io.on("connection", data => {
9499
95100 if ( / [ ^ \w ] + / . test ( res . username ) ) return displayError ( "Username should only contain A-Za-z_ " , data , "register" , 400 ) ;
96101
97- if ( res . captcha !== captchas . get ( data . id ) ) return displayError ( "Captcha is not correct" , data , "register" , 400 ) ;
98-
102+ if ( ! captchas . find ( val => val . captcha === res . captcha ) ) return displayError ( "Captcha is not correct" , data , "register" , 400 ) ;
103+
99104 const hash = bcrypt . hashSync ( res . password , 10 ) ;
100105
101106 sqlite . prepare ( "SELECT * FROM accounts WHERE username = ?" ) . then ( prepare => {
@@ -107,6 +112,7 @@ io.on("connection", data => {
107112 status : 200 ,
108113 message : "Account successfully created!"
109114 } ) ;
115+ captchas . splice ( captchas . findIndex ( val => val . captcha === res . captcha ) , captchas . findIndex ( val => val . captcha === res . captcha ) ) ;
110116 } ) . catch ( console . log ) ;
111117 } ) . catch ( console . log ) ;
112118 } ) ;
0 commit comments