setup app complete

This commit is contained in:
2023-09-08 16:26:37 +02:00
parent 809a05c864
commit defaafdd54
12 changed files with 172 additions and 45 deletions

View File

@@ -9,13 +9,11 @@
const db = require( '../../backend/db/db.js' );
const pwdmanager = require( '../pwdmanager.js' );
const fs = require( 'fs' );
const path = require( 'path' );
const pm = require( '../../backend/plugins/manager.js' );
const spm = require( '../startPageManager.js' );
const startPageManager = new spm();
const letters = [ ',', '{' ];
class POSTHandler {
constructor ( settings ) {
@@ -154,18 +152,7 @@ class POSTHandler {
this.settings[ 'currency' ] = data.currency;
this.settings[ 'payments' ] = data.payments;
this.settings[ 'ticketTimeout' ] = data.ticketTimeout;
const settingsString = JSON.stringify( this.settings );
let settingsToSave = '';
for ( let letter in settingsString ) {
if ( letters.includes( settingsString[ letter ] ) ) {
settingsToSave += settingsString[ letter ] + '\n\t';
} else if ( settingsString[ letter ] === '}' ) {
settingsToSave += '\n' + settingsString[ letter ];
} else {
settingsToSave += settingsString[ letter ];
}
}
fs.writeFileSync( path.join( __dirname + '/../../config/settings.config.json' ), settingsToSave );
db.saveSettings( this.settings );
db.getJSONData( 'events' ).then( dat => {
let updated = dat;
for ( let event in updated ) {

View File

@@ -39,7 +39,8 @@ module.exports = ( app ) => {
if ( tickets[ event ] ) {
if ( tickets[ event ][ ticket ] ) {
if ( !tickets[ event ][ ticket ][ 'invalidated' ] ) {
// TODO: invalidate ticket!
tickets[ event ][ ticket ][ 'invalidated' ] = true;
db.writeDataSimple( 'orders', 'order_name', req.body.ticketID.slice( 0, req.body.ticketID.indexOf( '_' ) ), { 'tickets': JSON.stringify( tickets ) } );
res.send( 'ticketValid' );
} else {
res.send( 'ticketInvalid' );

View File

@@ -11,6 +11,7 @@ let createSSRApp = require( 'vue' ).createSSRApp;
let renderToString = require( 'vue/server-renderer' ).renderToString;
const fs = require( 'fs' );
const path = require( 'path' );
const db = require( '../backend/db/db.js' );
class StartPageManager {
constructor ( settings ) {
@@ -42,7 +43,7 @@ class StartPageManager {
setActiveStartPage( startPageName ) {
this.settings[ 'startPage' ] = startPageName;
fs.writeFileSync( path.join( __dirname + '/../config/settings.config.json' ), JSON.stringify( this.settings ) );
db.saveSettings( this.settings );
}
async renderStartPage( startPageName ) {

View File

@@ -15,6 +15,7 @@ const cookieParser = require( 'cookie-parser' );
const http = require( 'http' );
const fs = require( 'fs' );
const token = require( './backend/token.js' );
const db = require( './backend/db/db.js' );
console.log( `
@@ -58,7 +59,12 @@ if ( settings.setupDone ) {
} );
}
// TODO: If no init, initialize DB.
if ( !settings.init ) {
db.initDB();
let mutSettings = settings;
mutSettings[ 'init' ] = true;
db.saveSettings( mutSettings );
}
// Set up static routes for static file serving (performance wise not

View File

@@ -14,6 +14,8 @@ const settings = JSON.parse( fs.readFileSync( path.join( __dirname + '/../../con
const dbRef = { 'user': 'libreevent_users', 'admin': 'libreevent_admin', 'order': 'libreevent_orders', 'users': 'libreevent_users', 'orders': 'libreevent_orders', 'temp': 'libreevent_temp' };
const letters = [ ',', '{' ];
let dbh;
if ( settings.db === 'mysql' ) {
@@ -26,6 +28,14 @@ if ( settings.db === 'mysql' ) {
dbh.connect();
}
module.exports.initDB = () => {
( async() => {
console.log( '[ DB ] Setting up...' );
await dbh.setupDB();
console.log( '[ DB ] Setting up complete!' );
} )();
};
module.exports.getDataSimple = ( db, column, searchQuery ) => {
return new Promise( ( resolve, reject ) => {
dbh.query( { 'command': 'getFilteredData', 'property': column, 'searchQuery': searchQuery }, dbRef[ db ] ).then( data => {
@@ -185,6 +195,21 @@ module.exports.deleteJSONDataSimple = ( db, identifier ) => {
} );
};
module.exports.saveSettings = ( settings ) => {
const settingsString = JSON.stringify( settings );
let settingsToSave = '';
for ( let letter in settingsString ) {
if ( letters.includes( settingsString[ letter ] ) ) {
settingsToSave += settingsString[ letter ] + '\n\t';
} else if ( settingsString[ letter ] === '}' ) {
settingsToSave += '\n' + settingsString[ letter ];
} else {
settingsToSave += settingsString[ letter ];
}
}
fs.writeFileSync( path.join( __dirname + '/../../config/settings.config.json' ), settingsToSave );
};
const gc = () => {
// this function acts as the database garbage collector. TicketTimeout can be changed from the GUI.
this.getData( 'temp' ).then( tempData => {

View File

@@ -22,7 +22,10 @@ class JSONDB {
let data = {};
try {
JSON.parse( fs.readFileSync( path.join( __dirname + '/data/db.json' ) ) );
} catch ( err ) {}
} catch ( err ) {
console.error( '[ JSON-DB ] CRITICAL INITIALIZATION FAILURE!' + err );
throw ( 'JSONDB failed to start!' );
}
this.db = data[ 'db' ] ?? { 'libreevent_temp': {}, 'libreevent_admin': {}, 'libreevent_orders': {}, 'libreevent_users': {} };
this.dbIndex = data[ 'index' ] ?? { 'libreevent_temp': 0, 'libreevent_admin': 0, 'libreevent_orders': 0, 'libreevent_users': 0 };
this.db[ 'libreevent_temp' ] = {};

View File

@@ -1,17 +1,17 @@
{
"init":false,
"setupDone": true,
"twoFA":"enforce",
"twoFAMode":"enhanced",
"db":"mysql",
"payments":"stripe",
"name":"libreevent",
"yourDomain":"http://localhost:8080",
"mailSender":"libreevent <info@libreevent.janishutz.com>",
"maxTickets":10,
"currency":"CHF",
"gcInterval":300,
"ticketTimeout":900,
"startPage":"default",
"version":"1.0.0"
"init":true,
"setupDone":true,
"twoFA":"enforce",
"twoFAMode":"enhanced",
"db":"mysql",
"payments":"stripe",
"name":"libreevent",
"yourDomain":"http://localhost:8080",
"mailSender":"libreevent <no-reply@libreevent.janishutz.com>",
"maxTickets":10,
"currency":"CHF",
"gcInterval":300,
"ticketTimeout":900,
"startPage":"default",
"version":"1.0.0"
}

View File

@@ -7,7 +7,9 @@
*
*/
let db = null;
// let db = null;
let db = require( '../backend/db/db.js' );
const pwm = require( '../admin/pwdmanager.js' );
const fs = require( 'fs' );
const path = require( 'path' );
const bodyParser = require( 'body-parser' );
@@ -30,7 +32,38 @@ module.exports = ( app, settings ) => {
if ( req.session.setupKeyOk ) {
res.send( 'ok' );
} else {
res.status( 403 ).send( 'not authorized' );
res.status( 403 ).send( 'unauthorized' );
}
} );
app.post( '/setup/saveBasicSettings', bodyParser.json(), ( req, res ) => {
if ( req.session.setupKeyOk ) {
fs.writeFileSync( path.join( __dirname + '/../config/db.config.json' ), JSON.stringify( req.body.db ) );
fs.writeFileSync( path.join( __dirname + '/../config/mail.config.json' ), JSON.stringify( req.body.email ) );
if ( db === null ) {
db = require( '../backend/db/db.js' );
}
let updatedSettings = settings;
updatedSettings[ 'name' ] = req.body.websiteName;
updatedSettings[ 'mailSender' ] = req.body.mailDisplay;
db.saveSettings( updatedSettings );
res.send( 'ok' );
} else {
res.status( 403 ).send( 'unauthorized' );
}
} );
app.post( '/setup/saveRootAccount', bodyParser.json(), ( req, res ) => {
if ( req.session.setupKeyOk ) {
pwm.hashPassword( req.body.password ).then( hash => {
db.writeJSONData( 'rootAccount', { 'pass': hash, 'email': req.body.mail } );
let updatedSettings = settings;
updatedSettings[ 'setupDone' ] = true;
db.saveSettings( updatedSettings );
res.send( 'ok' );
} );
} else {
res.status( 403 ).send( 'unauthorized' );
}
} );