mirror of
https://github.com/janishutz/libreevent.git
synced 2025-11-25 13:24:24 +00:00
work on 2fa system
This commit is contained in:
@@ -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';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
};
|
||||||
@@ -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 ) => {
|
||||||
|
|
||||||
} );
|
} );
|
||||||
};
|
};
|
||||||
11
src/server/ui/en/2faEnhanced.html
Normal file
11
src/server/ui/en/2faEnhanced.html
Normal 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>
|
||||||
11
src/server/ui/en/2faInvalid.html
Normal file
11
src/server/ui/en/2faInvalid.html
Normal 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>
|
||||||
11
src/server/ui/en/2faSimple.html
Normal file
11
src/server/ui/en/2faSimple.html
Normal 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>
|
||||||
Reference in New Issue
Block a user