work on 2fa system

This commit is contained in:
2023-07-12 17:04:40 +02:00
parent 447533ed87
commit 399726d563
6 changed files with 82 additions and 11 deletions

View File

@@ -15,13 +15,30 @@ class TwoFA {
} }
registerStandardAuthentication () { registerStandardAuthentication () {
let token = token.generateToken(); let tok = token.generateToken( 61 );
this.tokenStore[ token ] = 'standard'; this.tokenStore[ tok ] = { 'mode': 'standard' };
return { 'token': tok };
} }
registerEnhancedAuthentication () { 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';
} }
} }

View File

@@ -8,11 +8,11 @@
*/ */
module.exports.generateToken = () => { module.exports.generateToken = ( length ) => {
let token = ''; let token = '';
let min = 48; let min = 48;
let max = 122; 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; let randomNumber = Math.floor( Math.random() * ( max - min ) ) + min;
while ( randomNumber === 92 || randomNumber === 58 || randomNumber === 96 || randomNumber === 94 || randomNumber === 64 ) { while ( randomNumber === 92 || randomNumber === 58 || randomNumber === 96 || randomNumber === 94 || randomNumber === 64 ) {
randomNumber = Math.floor( Math.random() * ( max - min ) ) + min; randomNumber = Math.floor( Math.random() * ( max - min ) ) + min;
@@ -21,3 +21,11 @@ module.exports.generateToken = () => {
} }
return token; return token;
}; };
module.exports.generateNumber = ( length ) => {
let number = '';
for ( let i = 0; i < length; i++ ) {
number += Math.floor( Math.random() * 10 );
}
return number;
};

View File

@@ -11,6 +11,7 @@ const db = require( './db/db.js' );
const pwdmanager = require( './credentials/pwdmanager.js' ); const pwdmanager = require( './credentials/pwdmanager.js' );
const auth = require( './credentials/2fa.js' ); const auth = require( './credentials/2fa.js' );
const twoFA = new auth(); const twoFA = new auth();
const path = require( 'path' );
module.exports = ( app, settings ) => { module.exports = ( app, settings ) => {
app.post( '/api/reserveTicket', ( request, response ) => { app.post( '/api/reserveTicket', ( request, response ) => {
@@ -23,17 +24,17 @@ module.exports = ( app, settings ) => {
pwdmanager.checkpassword( request.body.mail, request.body.password ).then( data => { pwdmanager.checkpassword( request.body.mail, request.body.password ).then( data => {
if ( data ) { if ( data ) {
if ( settings.twoFA === 'standard' ) { if ( settings.twoFA === 'standard' ) {
// TODO: Support both methods of 2fa let tok = twoFA.registerStandardAuthentication()[ 'token' ];
response.send( '2fa' ); response.send( { 'status': '2fa' } );
} else if ( settings.twoFA === 'enhanced' ) { } else if ( settings.twoFA === 'enhanced' ) {
// TODO: Support both methods of 2fa let res = twoFA.registerEnhancedAuthentication();
response.send( '2fa+' ); response.send( { 'status': '2fa+', 'code': res.code } );
} else { } else {
request.session.loggedInUser = true; request.session.loggedInUser = true;
response.send( 'ok' ); response.send( { 'status': 'ok' } );
} }
} else { } else {
response.send( 'pwErr' ); response.send( { 'status': 'pwErr' } );
} }
} ); } );
} else { } else {
@@ -42,6 +43,18 @@ module.exports = ( app, settings ) => {
} ); } );
app.get( '/user/2fa', ( request, response ) => { 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 ) => {
} ); } );
}; };

View File

@@ -0,0 +1,11 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Two Factor Authentication</title>
</head>
<body>
<h1>2fa+</h1>
</body>
</html>

View File

@@ -0,0 +1,11 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Two Factor Authentication Invalid</title>
</head>
<body>
<h1>2fa invalid</h1>
</body>
</html>

View File

@@ -0,0 +1,11 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Two Factor Authentication</title>
</head>
<body>
<h1>2fa</h1>
</body>
</html>