From 581e7143f769d3c261e491deabf6d74680429228 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Tue, 1 Aug 2023 14:26:46 +0200 Subject: [PATCH] various small changes + almost complete ticket gen --- src/server/admin/adminRoutes.js | 9 ++++++ src/server/backend/api/getHandler.js | 4 ++- .../plugins/payments/stripe/stripeRoutes.js | 2 +- src/server/backend/tickets/ticketGenerator.js | 13 ++++++-- src/server/backend/userAPIRoutes.js | 4 +-- src/server/backend/userRoutes.js | 25 ++++++++++++++-- src/server/config/settings.config.json | 1 + src/webapp/main/notes.md | 5 ++-- .../main/src/components/sideCartView.vue | 4 ++- src/webapp/main/src/main.js | 13 +++++--- src/webapp/main/src/router/adminRoutes.js | 18 +++++------ src/webapp/main/src/router/index.js | 5 ++-- src/webapp/main/src/router/mainRoutes.js | 30 +++++++++---------- src/webapp/main/src/stores/userStore.js | 6 +++- src/webapp/main/src/views/admin/TwoFA.vue | 21 +++++++++++++ .../main/src/views/purchasing/OrderView.vue | 4 +-- 16 files changed, 118 insertions(+), 46 deletions(-) diff --git a/src/server/admin/adminRoutes.js b/src/server/admin/adminRoutes.js index 24048de..d090c49 100644 --- a/src/server/admin/adminRoutes.js +++ b/src/server/admin/adminRoutes.js @@ -14,6 +14,7 @@ const twoFA = new auth(); const path = require( 'path' ); let responseObjects = {}; +let authOk = {}; module.exports = ( app, settings ) => { /* @@ -85,6 +86,14 @@ module.exports = ( app, settings ) => { responseObjects[ request.session.token ] = response; } ); + app.get( '/admin/2fa/ping', ( request, response ) => { + if ( authOk[ request.session.token ] === 'ok' ) { + response.send( { 'status': 'ok' } ); + } else { + response.send( '' ); + } + } ); + app.get( '/test/login', ( request, response ) => { request.session.loggedInAdmin = true; response.send( 'Logged in' ); diff --git a/src/server/backend/api/getHandler.js b/src/server/backend/api/getHandler.js index 323fc6a..1554a19 100644 --- a/src/server/backend/api/getHandler.js +++ b/src/server/backend/api/getHandler.js @@ -14,7 +14,7 @@ class GETHandler { } - handleCall ( call, query, session ) { + handleCall ( call, query, session, settings ) { return new Promise( ( resolve, reject ) => { if ( call === 'getSeatplan' ) { db.getJSONDataSimple( 'seatplan', query.location ).then( data => { @@ -40,6 +40,8 @@ class GETHandler { } else { reject( { 'code': 400, 'message': 'Bad request, missing event query' } ); } + } else if ( call === 'getName' ) { + resolve( { 'name': settings.name } ); } } ); } diff --git a/src/server/backend/plugins/payments/stripe/stripeRoutes.js b/src/server/backend/plugins/payments/stripe/stripeRoutes.js index 51f1f19..47c2218 100644 --- a/src/server/backend/plugins/payments/stripe/stripeRoutes.js +++ b/src/server/backend/plugins/payments/stripe/stripeRoutes.js @@ -19,7 +19,7 @@ module.exports = ( app, settings ) => { 'success_url': settings.yourDomain + '/payments/success', 'cancel_url': settings.yourDomain + '/payments/canceled', 'submit_type': 'book', - 'customer_email': req.body.customer.mail + 'customer_email': req.body.mail }; for ( let item in req.body.products ) { diff --git a/src/server/backend/tickets/ticketGenerator.js b/src/server/backend/tickets/ticketGenerator.js index a39707a..6dba778 100644 --- a/src/server/backend/tickets/ticketGenerator.js +++ b/src/server/backend/tickets/ticketGenerator.js @@ -14,22 +14,31 @@ const db = require( '../db/db.js' ); class TicketGenerator { constructor () { this.ticketQueue = {}; + this.jobId = 0; this.isRunning = false; } + // TODO: Save to disk in case of crash of server / reboot / whatever + // and continue processing once back online generateTicket ( event, data ) { - + this.ticketQueue [ this.jobId ] = { 'event': event, 'data': data }; + this.jobId += 1; + this.queueHandler(); } // TODO: Maybe move to subprocesses queueHandler () { if ( !this.isRunning ) { this.isRunning = true; - this.ticketGenerator( this.ticketQueue[ Object.keys( this.ticketQueue )[ 0 ] ] ).then( res => { + this.ticketGenerator( this.ticketQueue[ this.jobId ][ 'event' ], this.ticketQueue[ this.jobId ][ 'data' ] ).then( pdf => { + console.log( pdf ); // TODO: Maybe write to disk this.isRunning = false; + this.queueHandler(); } ).catch( error => { + console.error( '[ PDF GENERATOR ] ERROR: ' + error ); this.isRunning = false; + this.queueHandler(); // TODO: Add to FAILED db } ); } diff --git a/src/server/backend/userAPIRoutes.js b/src/server/backend/userAPIRoutes.js index c05af2a..179ae95 100644 --- a/src/server/backend/userAPIRoutes.js +++ b/src/server/backend/userAPIRoutes.js @@ -14,11 +14,11 @@ const getHandler = new geth(); const path = require( 'path' ); // settings is missing in arguments which shouldn't pose any problem -module.exports = ( app ) => { +module.exports = ( app, settings ) => { // Add specific routes here to have them be checked first to not get general handling app.get( '/getAPI/:call', ( req, res ) => { - getHandler.handleCall( req.params.call, req.query, req.session ).then( data => { + getHandler.handleCall( req.params.call, req.query, req.session, settings ).then( data => { if ( req.params.call === 'getReservedSeats' ) { let dat = data; dat[ 'reserved' ] = postHandler.getReservedSeats( req.query.event ); diff --git a/src/server/backend/userRoutes.js b/src/server/backend/userRoutes.js index e809dba..41b3ef2 100644 --- a/src/server/backend/userRoutes.js +++ b/src/server/backend/userRoutes.js @@ -14,6 +14,7 @@ const twoFA = new auth(); const path = require( 'path' ); let responseObjects = {}; +let authOk = {}; module.exports = ( app, settings ) => { app.post( '/api/reserveTicket', ( request, response ) => { @@ -55,7 +56,11 @@ module.exports = ( app, settings ) => { let tokType = twoFA.verifySimple( request.query.token ); if ( tokType === 'standard' ) { request.session.loggedInUser = true; - responseObjects[ request.query.token ].write( 'data: authenticated\n\n' ); + if ( responseObjects[ request.query.token ] ) { + responseObjects[ request.query.token ].write( 'data: authenticated\n\n' ); + } else { + authOk[ request.query.token ] = 'ok'; + } response.sendFile( path.join( __dirname + '/../ui/en/2fa/2faSimple.html' ) ); } else if ( tokType === 'enhanced' ) { response.sendFile( path.join( __dirname + '/../ui/en/2fa/2faEnhanced.html' ) ); @@ -68,7 +73,11 @@ module.exports = ( app, settings ) => { let verified = twoFA.verifyEnhanced( request.body.token, request.body.code ); if ( verified ) { request.session.loggedInUser = true; - responseObjects[ request.body.token ].write( 'data: authenticated\n\n' ); + if ( responseObjects[ request.body.token ] ) { + responseObjects[ request.body.token ].write( 'data: authenticated\n\n' ); + } else { + authOk[ request.body.token ] = 'ok'; + } response.send( 'ok' ); } else response.send( 'wrong' ); } ); @@ -85,8 +94,20 @@ module.exports = ( app, settings ) => { responseObjects[ request.session.token ] = response; } ); + app.get( '/user/2fa/ping', ( request, response ) => { + if ( authOk[ request.session.token ] === 'ok' ) { + response.send( { 'status': 'ok' } ); + } else { + response.send( '' ); + } + } ); + app.get( '/user/logout', ( request, response ) => { request.session.loggedInUser = false; response.send( 'logoutOk' ); } ); + + app.post( '/user/signup', ( request, response ) => { + response.send( 'ok' ); + } ); }; \ No newline at end of file diff --git a/src/server/config/settings.config.json b/src/server/config/settings.config.json index a23ffdd..d6df282 100644 --- a/src/server/config/settings.config.json +++ b/src/server/config/settings.config.json @@ -3,5 +3,6 @@ "twoFA": "enhanced", "db": "mysql", "payments": "stripe", + "name": "libreevent", "yourDomain": "http://localhost:8081" } \ No newline at end of file diff --git a/src/webapp/main/notes.md b/src/webapp/main/notes.md index 61b0cf6..9fe969d 100644 --- a/src/webapp/main/notes.md +++ b/src/webapp/main/notes.md @@ -1,6 +1,4 @@ # Account view: -- set page title based on settings - - make pricing groups changeable in UI (event categories) - Fix text field overflow (text too big for box) @@ -8,6 +6,7 @@ - Implement Permission system +- Seat numbering -- add webpack to project website to decrease file size \ No newline at end of file +- add webpack (or any other minifying tool) to project website to decrease file size (OPTIONAL) \ No newline at end of file diff --git a/src/webapp/main/src/components/sideCartView.vue b/src/webapp/main/src/components/sideCartView.vue index 43eda01..980badd 100644 --- a/src/webapp/main/src/components/sideCartView.vue +++ b/src/webapp/main/src/components/sideCartView.vue @@ -8,7 +8,7 @@ -->