diff --git a/src/server/backend/credentials/2fa.js b/src/server/backend/credentials/2fa.js index c944081..71638bb 100644 --- a/src/server/backend/credentials/2fa.js +++ b/src/server/backend/credentials/2fa.js @@ -15,13 +15,30 @@ class TwoFA { } registerStandardAuthentication () { - let token = token.generateToken(); - this.tokenStore[ token ] = 'standard'; + let tok = token.generateToken( 61 ); + this.tokenStore[ tok ] = { 'mode': 'standard' }; + return { 'token': tok }; } registerEnhancedAuthentication () { - let token = token.generateToken(); + let tok = token.generateToken( 61 ); + let code = token.generateNumber( 7 ); + this.tokenStore[ tok ] = { 'mode': 'enhanced', 'code': code }; + return { 'code': code, 'token': tok }; + } + verifyEnhanced ( token, number = '' ) { + if ( this.tokenStore[ token ]?.mode === 'standard' ) return true; + else if ( this.tokenStore[ token ]?.mode === 'enhanced' ) { + if ( this.tokenStore[ token ].code == number ) return true; + else return false; + } else return false; + } + + verifySimple ( token ) { + if ( this.tokenStore[ token ]?.mode === 'standard' ) return 'standard'; + else if ( this.tokenStore[ token ]?.mode === 'enhanced' ) return 'enhanced'; + else return 'invalid'; } } diff --git a/src/server/backend/token.js b/src/server/backend/token.js index caa613a..8e48919 100644 --- a/src/server/backend/token.js +++ b/src/server/backend/token.js @@ -8,11 +8,11 @@ */ -module.exports.generateToken = () => { +module.exports.generateToken = ( length ) => { let token = ''; let min = 48; let max = 122; - for ( let i = 0; i < 61; i++ ) { + for ( let i = 0; i < length; i++ ) { let randomNumber = Math.floor( Math.random() * ( max - min ) ) + min; while ( randomNumber === 92 || randomNumber === 58 || randomNumber === 96 || randomNumber === 94 || randomNumber === 64 ) { randomNumber = Math.floor( Math.random() * ( max - min ) ) + min; @@ -20,4 +20,12 @@ module.exports.generateToken = () => { token += String.fromCharCode( randomNumber ); } return token; +}; + +module.exports.generateNumber = ( length ) => { + let number = ''; + for ( let i = 0; i < length; i++ ) { + number += Math.floor( Math.random() * 10 ); + } + return number; }; \ No newline at end of file diff --git a/src/server/backend/userRoutes.js b/src/server/backend/userRoutes.js index e14ab1b..b00debc 100644 --- a/src/server/backend/userRoutes.js +++ b/src/server/backend/userRoutes.js @@ -11,6 +11,7 @@ const db = require( './db/db.js' ); const pwdmanager = require( './credentials/pwdmanager.js' ); const auth = require( './credentials/2fa.js' ); const twoFA = new auth(); +const path = require( 'path' ); module.exports = ( app, settings ) => { app.post( '/api/reserveTicket', ( request, response ) => { @@ -23,17 +24,17 @@ module.exports = ( app, settings ) => { pwdmanager.checkpassword( request.body.mail, request.body.password ).then( data => { if ( data ) { if ( settings.twoFA === 'standard' ) { - // TODO: Support both methods of 2fa - response.send( '2fa' ); + let tok = twoFA.registerStandardAuthentication()[ 'token' ]; + response.send( { 'status': '2fa' } ); } else if ( settings.twoFA === 'enhanced' ) { - // TODO: Support both methods of 2fa - response.send( '2fa+' ); + let res = twoFA.registerEnhancedAuthentication(); + response.send( { 'status': '2fa+', 'code': res.code } ); } else { request.session.loggedInUser = true; - response.send( 'ok' ); + response.send( { 'status': 'ok' } ); } } else { - response.send( 'pwErr' ); + response.send( { 'status': 'pwErr' } ); } } ); } else { @@ -42,6 +43,18 @@ module.exports = ( app, settings ) => { } ); app.get( '/user/2fa', ( request, response ) => { + // TODO: Add multi language + let tokType = twoFA.verifySimple( request.query.token ); + if ( tokType === 'standard' ) { + response.sendFile( path.join( __dirname + '/../ui/en/2faSimple.html' ) ); + } else if ( tokType === 'enhanced' ) { + response.sendFile( path.join( __dirname + '/../ui/en/2faEnhanced.html' ) ); + } else { + response.sendFile( path.join( __dirname + '/../ui/en/2faInvalid.html' ) ); + } + } ); + app.post( '/user/2fa/verify', ( request, response ) => { + } ); }; \ No newline at end of file diff --git a/src/server/ui/en/2faEnhanced.html b/src/server/ui/en/2faEnhanced.html new file mode 100644 index 0000000..b8e6424 --- /dev/null +++ b/src/server/ui/en/2faEnhanced.html @@ -0,0 +1,11 @@ + + +
+ + +