diff --git a/src/server/app.js b/src/server/app.js index cb11c66..5a79327 100644 --- a/src/server/app.js +++ b/src/server/app.js @@ -18,9 +18,14 @@ const fs = require( 'fs' ); const mail = require( './backend/mail/mailSender.js' ); const mailManager = new mail(); +const dbh = require( './backend/db/mysqldb.js' ); +const db = new dbh(); + +db.connect(); + // const env = process.env.PROD || false; -const settings = JSON.parse( fs.readFileSync( path.join( __dirname + '/config.json' ) ) ); +const settings = JSON.parse( fs.readFileSync( path.join( __dirname + '/config/settings.config.json' ) ) ); // initialise express with middlewares // TODO: Generate random token diff --git a/src/server/backend/credentials/2fa.js b/src/server/backend/credentials/2fa.js new file mode 100644 index 0000000..c944081 --- /dev/null +++ b/src/server/backend/credentials/2fa.js @@ -0,0 +1,28 @@ +/* +* libreevent - 2fa.js +* +* Created by Janis Hutz 07/11/2023, Licensed under the GPL V3 License +* https://janishutz.com, development@janishutz.com +* +* +*/ + +const token = require( '../token.js' ); + +class TwoFA { + constructor () { + this.tokenStore = {}; + } + + registerStandardAuthentication () { + let token = token.generateToken(); + this.tokenStore[ token ] = 'standard'; + } + + registerEnhancedAuthentication () { + let token = token.generateToken(); + + } +} + +module.exports = TwoFA; \ No newline at end of file diff --git a/src/server/backend/db/db.js b/src/server/backend/db/db.js index 9372c40..bf43f5a 100644 --- a/src/server/backend/db/db.js +++ b/src/server/backend/db/db.js @@ -16,6 +16,10 @@ module.exports.getData = function getData ( db, searchQuery ) { } ); }; +module.exports.writeData = function writeData ( db ) { + +}; + module.exports.getJSONData = function getData ( file ) { return new Promise( ( resolve, reject ) => { fs.readFile( path.join( __dirname + '/../../' + file ), ( error, data ) => { diff --git a/src/server/backend/db/mysqldb.js b/src/server/backend/db/mysqldb.js index 6449ea1..066ea30 100644 --- a/src/server/backend/db/mysqldb.js +++ b/src/server/backend/db/mysqldb.js @@ -1,15 +1,40 @@ -const mysql = require( 'promise-mysql' ); +/* +* libreevent - mysqldb.js +* +* Created by Janis Hutz 07/12/2023, Licensed under the GPL V3 License +* https://janishutz.com, development@janishutz.com +* +* +*/ + +const mysql = require( 'mysql' ); +const db = require( './db.js' ); + +// If the connection does not work for you, you will need to add your ip +// to the whitelist of the database class SQLDB { constructor () { - this.sqlconnection = mysql.createConnection( { - host: 'janishutz.com', - port: '3306', - user: 'janishut_libreeventTest', - password: '^PVgj&xkaQKmMDCgz&2^aCaYxc7nCS#*%7%', - connectionLimit: 200 + this.sqlConnection = mysql.createConnection( db.getJSONDataSync( '/config/db.config.secret.json' ) ); + } + + connect () { + this.sqlConnection.connect( function( err ) { + if ( err ) { + console.error( 'error connecting: ' + err.stack ); + return; + } + return 'connection'; } ); } + + disconnect () { + this.sqlConnection.end(); + } + + async setupDB () { + this.sqlConnection.query( '' ); + } } module.exports = SQLDB; \ No newline at end of file diff --git a/src/server/backend/mail/mailSender.js b/src/server/backend/mail/mailSender.js index 8891444..0994259 100644 --- a/src/server/backend/mail/mailSender.js +++ b/src/server/backend/mail/mailSender.js @@ -12,7 +12,7 @@ const html2text = require( 'html-to-text' ); const db = require( '../db/db.js' ); -let transporter = mailer.createTransport( db.getJSONDataSync( 'mail.secret.json' ) ); +let transporter = mailer.createTransport( db.getJSONDataSync( '/config/mail.config.secret.json' ) ); class MailManager { diff --git a/src/server/backend/token.js b/src/server/backend/token.js index b851d88..caa613a 100644 --- a/src/server/backend/token.js +++ b/src/server/backend/token.js @@ -8,20 +8,16 @@ */ -class TokenGenerator { - genTok () { - let token = ''; - let min = 48; - let max = 122; - for ( let i = 0; i < 61; 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; - } - token += String.fromCharCode( randomNumber ); +module.exports.generateToken = () => { + let token = ''; + let min = 48; + let max = 122; + for ( let i = 0; i < 61; 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; } - return token; + token += String.fromCharCode( randomNumber ); } -} - -module.exports = TokenGenerator; \ No newline at end of file + return token; +}; \ No newline at end of file diff --git a/src/server/backend/userRoutes.js b/src/server/backend/userRoutes.js index 9acdc64..e14ab1b 100644 --- a/src/server/backend/userRoutes.js +++ b/src/server/backend/userRoutes.js @@ -9,6 +9,8 @@ const db = require( './db/db.js' ); const pwdmanager = require( './credentials/pwdmanager.js' ); +const auth = require( './credentials/2fa.js' ); +const twoFA = new auth(); module.exports = ( app, settings ) => { app.post( '/api/reserveTicket', ( request, response ) => { @@ -20,9 +22,12 @@ module.exports = ( app, settings ) => { if ( request.body.mail && request.body.password ) { pwdmanager.checkpassword( request.body.mail, request.body.password ).then( data => { if ( data ) { - if ( settings.twoFA ) { + if ( settings.twoFA === 'standard' ) { // TODO: Support both methods of 2fa response.send( '2fa' ); + } else if ( settings.twoFA === 'enhanced' ) { + // TODO: Support both methods of 2fa + response.send( '2fa+' ); } else { request.session.loggedInUser = true; response.send( 'ok' ); @@ -35,4 +40,8 @@ module.exports = ( app, settings ) => { response.send( 'missingCredentials' ); } } ); + + app.get( '/user/2fa', ( request, response ) => { + + } ); }; \ No newline at end of file diff --git a/src/server/config.json b/src/server/config.json deleted file mode 100644 index 4be959e..0000000 --- a/src/server/config.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "init":true, - "twoFA": true -} \ No newline at end of file diff --git a/src/server/config/db.config.json b/src/server/config/db.config.json new file mode 100644 index 0000000..f234057 --- /dev/null +++ b/src/server/config/db.config.json @@ -0,0 +1,7 @@ +{ + "host": "", + "database": "", + "user": "", + "password": "", + "port": 3306 +} \ No newline at end of file diff --git a/src/server/mail.json b/src/server/config/mail.config.json similarity index 100% rename from src/server/mail.json rename to src/server/config/mail.config.json diff --git a/src/server/config/settings.config.json b/src/server/config/settings.config.json new file mode 100644 index 0000000..a5fd38c --- /dev/null +++ b/src/server/config/settings.config.json @@ -0,0 +1,4 @@ +{ + "init":true, + "twoFA": "disabled" +} \ No newline at end of file diff --git a/src/server/package-lock.json b/src/server/package-lock.json index f62d349..3d2fc48 100644 --- a/src/server/package-lock.json +++ b/src/server/package-lock.json @@ -15,8 +15,8 @@ "express": "^4.18.2", "express-session": "^1.17.3", "html-to-text": "^9.0.5", + "mysql": "^2.18.1", "nodemailer": "^6.9.3", - "promise-mysql": "^5.2.0", "serve-favicon": "^2.5.0", "serve-static": "^1.15.0" }, @@ -150,24 +150,6 @@ "url": "https://ko-fi.com/killymxi" } }, - "node_modules/@types/bluebird": { - "version": "3.5.38", - "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.38.tgz", - "integrity": "sha512-yR/Kxc0dd4FfwtEoLZMoqJbM/VE/W7hXn/MIjb+axcwag0iFmSPK7OBUZq1YWLynJUoWQkfUrI7T0HDqGApNSg==" - }, - "node_modules/@types/mysql": { - "version": "2.15.21", - "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.21.tgz", - "integrity": "sha512-NPotx5CVful7yB+qZbWtXL2fA4e7aEHkihHLjklc6ID8aq7bhguHgeIoC1EmSNTAuCgI6ZXrjt2ZSaXnYX0EUg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "20.4.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.1.tgz", - "integrity": "sha512-JIzsAvJeA/5iY6Y/OxZbv1lUcc8dNSE77lb2gnBH+/PJ3lFR1Ccvgwl5JWnHAkNHcRsT0TbpVOsiMKZ1F/yyJg==" - }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -264,11 +246,6 @@ "node": "*" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, "node_modules/body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", @@ -1534,17 +1511,6 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "node_modules/promise-mysql": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/promise-mysql/-/promise-mysql-5.2.0.tgz", - "integrity": "sha512-IKkBe7OukgCpy5U5EZPlgH6BRvnngmP+HwD6PoMNzvGXBYVZkiJ5nx6SY7bo+sgwXsMOVE7zQf6CfS9qaFs2pw==", - "dependencies": { - "@types/bluebird": "^3.5.26", - "@types/mysql": "^2.15.2", - "bluebird": "^3.5.1", - "mysql": "^2.18.1" - } - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", diff --git a/src/server/package.json b/src/server/package.json index 0f54e4f..6a816e3 100644 --- a/src/server/package.json +++ b/src/server/package.json @@ -47,8 +47,8 @@ "express": "^4.18.2", "express-session": "^1.17.3", "html-to-text": "^9.0.5", + "mysql": "^2.18.1", "nodemailer": "^6.9.3", - "promise-mysql": "^5.2.0", "serve-favicon": "^2.5.0", "serve-static": "^1.15.0" },