diff --git a/src/server/backend/db/db.js b/src/server/backend/db/db.js index 71937b5..2ef5b5d 100644 --- a/src/server/backend/db/db.js +++ b/src/server/backend/db/db.js @@ -19,9 +19,11 @@ let dbh; if ( settings.db === 'mysql' ) { const dbsoft = require( './mysqldb.js' ); dbh = new dbsoft(); + dbh.connect(); } else { - const dbsoft = require( './jsondb.js' ); + const dbsoft = require( './nedbDB.js' ); dbh = new dbsoft(); + dbh.connect(); } module.exports.getDataSimple = function getData ( db, column, searchQuery ) { diff --git a/src/server/backend/db/db.json b/src/server/backend/db/db.json new file mode 100644 index 0000000..e69de29 diff --git a/src/server/backend/db/jsonDataHelper.js b/src/server/backend/db/jsonDataHelper.js new file mode 100644 index 0000000..0bb9b3c --- /dev/null +++ b/src/server/backend/db/jsonDataHelper.js @@ -0,0 +1,20 @@ +/* +* libreevent - jsonDataHelper.js +* +* Created by Janis Hutz 07/16/2023, Licensed under the GPL V3 License +* https://janishutz.com, development@janishutz.com +* +* +*/ + +// IMPORTANT: Do not use this helper in any other context than in the jsondb.js file! +// It is specifically designed for that thing and therefore doesn't use any unnecessary resources! + + +class DataHelper { + constructor () { + + } +} + +module.exports = DataHelper; \ No newline at end of file diff --git a/src/server/backend/db/mysqldb.js b/src/server/backend/db/mysqldb.js index ba8c6c9..20da2f2 100644 --- a/src/server/backend/db/mysqldb.js +++ b/src/server/backend/db/mysqldb.js @@ -15,21 +15,22 @@ const path = require( 'path' ); // to the whitelist of the database class SQLDB { - constructor () { + constructor ( ) { this.sqlConnection = mysql.createConnection( JSON.parse( fs.readFileSync( path.join( __dirname + '/../../config/db.config.secret.json' ) ) ) ); } - connect () { + connect ( ) { this.sqlConnection.connect( function( err ) { if ( err ) { console.error( 'error connecting: ' + err.stack ); return; } + console.log( 'connected' ); return 'connection'; } ); } - disconnect () { + disconnect ( ) { this.sqlConnection.end(); } @@ -144,7 +145,6 @@ class SQLDB { } this.sqlConnection.query( command, ( error, results ) => { if ( error ) reject( error ); - console.log( results ); resolve( results ); } ); } ); diff --git a/src/server/backend/db/nedbDB.js b/src/server/backend/db/nedbDB.js new file mode 100644 index 0000000..e69de29 diff --git a/src/server/backend/token.js b/src/server/backend/token.js index 8e48919..de847c8 100644 --- a/src/server/backend/token.js +++ b/src/server/backend/token.js @@ -10,11 +10,11 @@ module.exports.generateToken = ( length ) => { let token = ''; - let min = 48; + let min = 45; let max = 122; 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 ) { + while ( ( 58 < randomNumber && randomNumber < 63 ) || ( 90 < randomNumber && randomNumber < 95 ) || ( 95 < randomNumber && randomNumber < 97 ) ) { randomNumber = Math.floor( Math.random() * ( max - min ) ) + min; } token += String.fromCharCode( randomNumber ); diff --git a/src/server/backend/userRoutes.js b/src/server/backend/userRoutes.js index 46e1f88..e809dba 100644 --- a/src/server/backend/userRoutes.js +++ b/src/server/backend/userRoutes.js @@ -24,6 +24,7 @@ module.exports = ( app, settings ) => { app.post( '/user/login', ( request, response ) => { if ( request.body.mail && request.body.password ) { pwdmanager.checkpassword( request.body.mail, request.body.password ).then( data => { + request.session.username = request.body.mail; if ( data ) { // TODO: Send mails if ( settings.twoFA === 'standard' ) { @@ -67,7 +68,7 @@ module.exports = ( app, settings ) => { let verified = twoFA.verifyEnhanced( request.body.token, request.body.code ); if ( verified ) { request.session.loggedInUser = true; - responseObjects[ request.query.token ].write( 'data: authenticated\n\n' ); + responseObjects[ request.body.token ].write( 'data: authenticated\n\n' ); response.send( 'ok' ); } else response.send( 'wrong' ); } ); @@ -83,4 +84,9 @@ module.exports = ( app, settings ) => { response.write( 'data: connected\n\n' ); responseObjects[ request.session.token ] = response; } ); + + app.get( '/user/logout', ( request, response ) => { + request.session.loggedInUser = false; + response.send( 'logoutOk' ); + } ); }; \ No newline at end of file diff --git a/src/server/config/settings.config.json b/src/server/config/settings.config.json index dc7f162..82aa545 100644 --- a/src/server/config/settings.config.json +++ b/src/server/config/settings.config.json @@ -1,5 +1,5 @@ { "init": false, - "twoFA": "standard", + "twoFA": "enhanced", "db": "mysql" } \ No newline at end of file diff --git a/src/server/package-lock.json b/src/server/package-lock.json index ea9f363..00316d8 100644 --- a/src/server/package-lock.json +++ b/src/server/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "GPL-3.0-or-later", "dependencies": { + "@seald-io/nedb": "^4.0.2", "bcrypt": "^5.0.1", "body-parser": "^1.20.2", "cookie-parser": "^1.4.6", @@ -139,6 +140,21 @@ "node-pre-gyp": "bin/node-pre-gyp" } }, + "node_modules/@seald-io/binary-search-tree": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@seald-io/binary-search-tree/-/binary-search-tree-1.0.3.tgz", + "integrity": "sha512-qv3jnwoakeax2razYaMsGI/luWdliBLHTdC6jU55hQt1hcFqzauH/HsBollQ7IR4ySTtYhT+xyHoijpA16C+tA==" + }, + "node_modules/@seald-io/nedb": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@seald-io/nedb/-/nedb-4.0.2.tgz", + "integrity": "sha512-gJ91fT1sgh2cLXYVcTSh7khZ8LdemI8+SojCdpZ5wy+DUQ4fSrEwGqOwbdV49NDs2BBO6GeBpSb8CnhG2IW1rw==", + "dependencies": { + "@seald-io/binary-search-tree": "^1.0.3", + "localforage": "^1.9.0", + "util": "^0.12.4" + } + }, "node_modules/@selderee/plugin-htmlparser2": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz", @@ -221,6 +237,17 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -782,6 +809,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -881,6 +916,17 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -903,6 +949,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -1009,6 +1069,11 @@ "node": ">=0.10.0" } }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1031,6 +1096,32 @@ "node": ">= 0.10" } }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -1039,6 +1130,38 @@ "node": ">=8" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -1058,6 +1181,22 @@ "url": "https://ko-fi.com/killymxi" } }, + "node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "dependencies": { + "lie": "3.1.1" + } + }, "node_modules/locate-path": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", @@ -1313,9 +1452,9 @@ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" }, "node_modules/node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -1979,6 +2118,18 @@ "node": ">= 0.8" } }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -2014,6 +2165,25 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/which-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.10.tgz", + "integrity": "sha512-uxoA5vLUfRPdjCuJ1h5LlYdmTLbYfums398v3WLkM+i/Wltl2/XyZpQWKbN++ck5L64SR/grOHqtXCUKmlZPNA==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", diff --git a/src/server/package.json b/src/server/package.json index 18a809b..d89597d 100644 --- a/src/server/package.json +++ b/src/server/package.json @@ -42,6 +42,7 @@ "yocto-queue": "^1.0.0" }, "dependencies": { + "@seald-io/nedb": "^4.0.2", "bcrypt": "^5.0.1", "body-parser": "^1.20.2", "cookie-parser": "^1.4.6", diff --git a/src/server/ui/en/2fa/2faEnhanced.html b/src/server/ui/en/2fa/2faEnhanced.html index db0aed9..17df742 100644 --- a/src/server/ui/en/2fa/2faEnhanced.html +++ b/src/server/ui/en/2fa/2faEnhanced.html @@ -71,7 +71,7 @@

Two-Factor Authen­tication

-

Please enter the code displayed on the login page down below to finish the Two-Factor Authentication.

+

Please enter the code displayed on the login page down below to finish the Two-Factor Authentication.


@@ -86,7 +86,17 @@