Two-Factor Authentication
+Please enter the code displayed on the login page down below to finish the Two-Factor Authentication.
+ + +diff --git a/src/server/backend/credentials/2fa.js b/src/server/backend/credentials/2fa.js index 71638bb..53b44b9 100644 --- a/src/server/backend/credentials/2fa.js +++ b/src/server/backend/credentials/2fa.js @@ -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'; } } diff --git a/src/server/backend/userRoutes.js b/src/server/backend/userRoutes.js index b00debc..d55d731 100644 --- a/src/server/backend/userRoutes.js +++ b/src/server/backend/userRoutes.js @@ -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' ); } ); }; \ No newline at end of file diff --git a/src/server/config/settings.config.json b/src/server/config/settings.config.json index 9f3ed22..acbab79 100644 --- a/src/server/config/settings.config.json +++ b/src/server/config/settings.config.json @@ -1,4 +1,4 @@ { "init": false, - "twoFA": "disabled" + "twoFA": "enhanced" } \ No newline at end of file diff --git a/src/server/ui/en/2fa/2faEnhanced.html b/src/server/ui/en/2fa/2faEnhanced.html new file mode 100644 index 0000000..db0aed9 --- /dev/null +++ b/src/server/ui/en/2fa/2faEnhanced.html @@ -0,0 +1,120 @@ + + +
+ + +Please enter the code displayed on the login page down below to finish the Two-Factor Authentication.
+ + +The token you have specified is invalid. Please check that the link used is correct. If nothing helps, please try logging in again.
+Your two-factor authentication has been completed successfully. You were redirected automatically. You may now close this tab and return to the original browser tab.
+We have sent you an email containing a link for Authentication.
+Open the link in the email and enter this code:
+