From 733cbf2dbb3e0ea219bfaa3ce3f930b3817af851 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Thu, 7 Sep 2023 08:40:21 +0200 Subject: [PATCH] user account page done (- styling) --- src/server/backend/db/mysqldb.js | 2 +- src/server/backend/userRoutes.js | 36 ++- src/webapp/main/src/stores/backendStore.js | 1 - .../main/src/views/user/AccountView.vue | 284 +++++++++++++----- 4 files changed, 238 insertions(+), 85 deletions(-) diff --git a/src/server/backend/db/mysqldb.js b/src/server/backend/db/mysqldb.js index 00b12b8..91ef1d3 100644 --- a/src/server/backend/db/mysqldb.js +++ b/src/server/backend/db/mysqldb.js @@ -150,7 +150,7 @@ class SQLDB { command = 'UPDATE ' + table + ' SET '; let updatedValues = ''; for ( let value in operation.newValues ) { - updatedValues += value + ' = ' + this.sqlConnection.escape( operation.newValues[ value ] ) + ', '; + updatedValues += value + ' = ' + this.sqlConnection.escape( String( operation.newValues[ value ] ) ) + ', '; } command += updatedValues.slice( 0, updatedValues.length - 2 ); command += ' WHERE ' + operation.property + ' = ' + this.sqlConnection.escape( operation.searchQuery ); diff --git a/src/server/backend/userRoutes.js b/src/server/backend/userRoutes.js index 9b3f5f8..eb08328 100644 --- a/src/server/backend/userRoutes.js +++ b/src/server/backend/userRoutes.js @@ -41,7 +41,6 @@ module.exports = ( app, settings ) => { response.status( 500 ).send( { 'data': 'There was an error reading data from the database. If this error persists, please contact the administrators', 'status': false } ); } ); } else { - console.log( 'unauthorised' ); response.status( 403 ).sendFile( path.join( __dirname + '/../ui/en/errors/403.html' ) ); } } ); @@ -84,7 +83,7 @@ module.exports = ( app, settings ) => { } } ); } else { - response.send( 'missingCredentials' ); + response.status( 400 ).send( 'missingCredentials' ); } } ); @@ -101,7 +100,7 @@ module.exports = ( app, settings ) => { } else if ( tokType === 'enhanced' ) { response.sendFile( path.join( __dirname + '/../ui/en/2fa/2faEnhanced.html' ) ); } else { - response.sendFile( path.join( __dirname + '/../ui/en/2fa/2faInvalid.html' ) ); + response.status( 403 ).sendFile( path.join( __dirname + '/../ui/en/2fa/2faInvalid.html' ) ); } } ); @@ -117,7 +116,7 @@ module.exports = ( app, settings ) => { authOk[ request.body.token ] = 'ok'; } response.send( 'ok' ); - } else response.send( 'wrong' ); + } else response.status( 403 ).send( 'wrong' ); } ); app.get( '/user/2fa/check', ( request, response ) => { @@ -148,12 +147,16 @@ module.exports = ( app, settings ) => { } ); app.get( '/user/resendEmail', ( req, res ) => { - ( async () => { - let tok = generator.generateToken( 60 ); - mailTokens[ tok ] = req.session.username; - mailManager.sendMail( req.session.username, await twoFA.generateSignupEmail( tok, settings.yourDomain, settings.name ), 'Confirm your email', settings.mailSender ); - } )(); - res.send( 'sent' ); + if ( req.session.username ) { + ( async () => { + let tok = generator.generateToken( 60 ); + mailTokens[ tok ] = req.session.username; + mailManager.sendMail( req.session.username, await twoFA.generateSignupEmail( tok, settings.yourDomain, settings.name ), 'Confirm your email', settings.mailSender ); + } )(); + res.send( 'sent' ); + } else { + res.status( 403 ).send( 'unauthorised' ); + } } ); app.post( '/user/signup', bodyParser.json(), ( request, response ) => { @@ -202,7 +205,7 @@ module.exports = ( app, settings ) => { response.sendFile( path.join( __dirname + '/../ui/en/signup/disallowTwoFA.html' ) ); } } else { - response.sendFile( path.join( __dirname + '/../ui/en/signup/invalid.html' ) ); + response.status( 400 ).sendFile( path.join( __dirname + '/../ui/en/signup/invalid.html' ) ); } } ); @@ -214,7 +217,16 @@ module.exports = ( app, settings ) => { response.send( 'ok' ); } } else { - response.send( 'unauthorised' ); + response.status( 403 ).send( 'unauthorised' ); + } + } ); + + app.post( '/user/settings', bodyParser.json(), ( req, res ) => { + if ( req.session.username ) { + db.writeDataSimple( 'users', 'email', req.session.username, req.body ); + res.send( 'ok' ); + } else { + res.status( 403 ).send( 'unauthorised' ); } } ); diff --git a/src/webapp/main/src/stores/backendStore.js b/src/webapp/main/src/stores/backendStore.js index ce8fdfd..1dfd314 100644 --- a/src/webapp/main/src/stores/backendStore.js +++ b/src/webapp/main/src/stores/backendStore.js @@ -12,7 +12,6 @@ import { defineStore } from "pinia"; export const useBackendStore = defineStore ( 'backend', { state: () => ( { 'guestPurchase': false, 'guestPurchaseAllowed': false } ), getters: { - getVisitedSetupPages: ( state ) => state.visitedSetupPages, getIsGuestPurchase: ( state ) => state.guestPurchase, getIsGuestPurchaseAllowed: ( state ) => state.guestPurchaseAllowed, }, diff --git a/src/webapp/main/src/views/user/AccountView.vue b/src/webapp/main/src/views/user/AccountView.vue index 9350f2a..7955169 100644 --- a/src/webapp/main/src/views/user/AccountView.vue +++ b/src/webapp/main/src/views/user/AccountView.vue @@ -1,45 +1,79 @@