two fa almost complete

This commit is contained in:
2023-07-13 09:58:43 +02:00
parent 399726d563
commit 9f5d5a3be3
11 changed files with 293 additions and 52 deletions

View File

@@ -8,6 +8,8 @@
*/
const token = require( '../token.js' );
// let createSSRApp = require( 'vue' ).createSSRApp;
// let renderToString = require( 'vue/server-renderer' ).renderToString;
class TwoFA {
constructor () {
@@ -15,14 +17,20 @@ class TwoFA {
}
registerStandardAuthentication () {
let tok = token.generateToken( 61 );
let tok = token.generateToken( 60 );
while ( this.tokenStore[ tok ] ) {
tok = token.generateToken( 60 );
}
this.tokenStore[ tok ] = { 'mode': 'standard' };
return { 'token': tok };
}
registerEnhancedAuthentication () {
let tok = token.generateToken( 61 );
let code = token.generateNumber( 7 );
let tok = token.generateToken( 60 );
while ( this.tokenStore[ tok ] ) {
tok = token.generateToken( 60 );
}
let code = token.generateNumber( 6 );
this.tokenStore[ tok ] = { 'mode': 'enhanced', 'code': code };
return { 'code': code, 'token': tok };
}
@@ -30,14 +38,18 @@ class TwoFA {
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;
if ( this.tokenStore[ token ].code == number ) {
delete this.tokenStore[ token ];
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';
if ( this.tokenStore[ token ]?.mode === 'standard' ) {
delete this.tokenStore[ token ];
return 'standard';
} else if ( this.tokenStore[ token ]?.mode === 'enhanced' ) return 'enhanced';
else return 'invalid';
}
}

View File

@@ -46,15 +46,20 @@ module.exports = ( app, settings ) => {
// TODO: Add multi language
let tokType = twoFA.verifySimple( request.query.token );
if ( tokType === 'standard' ) {
response.sendFile( path.join( __dirname + '/../ui/en/2faSimple.html' ) );
request.session.loggedInUser = true;
response.sendFile( path.join( __dirname + '/../ui/en/2fa/2faSimple.html' ) );
} else if ( tokType === 'enhanced' ) {
response.sendFile( path.join( __dirname + '/../ui/en/2faEnhanced.html' ) );
response.sendFile( path.join( __dirname + '/../ui/en/2fa/2faEnhanced.html' ) );
} else {
response.sendFile( path.join( __dirname + '/../ui/en/2faInvalid.html' ) );
response.sendFile( path.join( __dirname + '/../ui/en/2fa/2faInvalid.html' ) );
}
} );
app.post( '/user/2fa/verify', ( request, response ) => {
let verified = twoFA.verifyEnhanced( request.body.token, request.body.code );
if ( verified ) {
request.session.loggedInUser = true;
response.send( 'ok' );
} else response.send( 'wrong' );
} );
};