mirror of
https://github.com/janishutz/libreevent.git
synced 2025-11-25 21:34:24 +00:00
work on 2fa system
This commit is contained in:
@@ -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';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
@@ -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 ) => {
|
||||
|
||||
} );
|
||||
};
|
||||
Reference in New Issue
Block a user