From 02da4c10cd1d629d4086597de6bec473c125d88a Mon Sep 17 00:00:00 2001 From: Jonathan Barrow Date: Sun, 10 Jul 2022 12:22:15 -0400 Subject: [PATCH] Moved cookie messages to middleware --- src/middleware/locale.js | 13 ----------- src/middleware/render-data.js | 22 +++++++++++++++++++ src/routers/account.js | 37 +++++++++++--------------------- src/server.js | 4 ++-- views/account/account.handlebars | 8 +++---- 5 files changed, 40 insertions(+), 44 deletions(-) delete mode 100644 src/middleware/locale.js create mode 100644 src/middleware/render-data.js diff --git a/src/middleware/locale.js b/src/middleware/locale.js deleted file mode 100644 index 8843caf..0000000 --- a/src/middleware/locale.js +++ /dev/null @@ -1,13 +0,0 @@ -const util = require('../util'); - -async function localeMiddleware(request, response, next) { - const reqLocale = request.locale; - const locale = util.getLocale(reqLocale.region, reqLocale.language); - - response.locals.locale = locale; - response.locals.localeString = reqLocale.toString(); - - return next(); -} - -module.exports = localeMiddleware; \ No newline at end of file diff --git a/src/middleware/render-data.js b/src/middleware/render-data.js new file mode 100644 index 0000000..8e2a384 --- /dev/null +++ b/src/middleware/render-data.js @@ -0,0 +1,22 @@ +const util = require('../util'); + +async function renderDataMiddleware(request, response, next) { + // Get user local + const reqLocale = request.locale; + const locale = util.getLocale(reqLocale.region, reqLocale.language); + + response.locals.locale = locale; + response.locals.localeString = reqLocale.toString(); + + // Get message cookies + response.locals.success_message = request.cookies.success_message; + response.locals.error_message = request.cookies.error_message; + + // Reset message cookies + response.clearCookie('success_message', { domain: '.pretendo.network' }); + response.clearCookie('error_message', { domain: '.pretendo.network' }); + + return next(); +} + +module.exports = renderDataMiddleware; \ No newline at end of file diff --git a/src/routers/account.js b/src/routers/account.js index 61bf36d..0918d67 100644 --- a/src/routers/account.js +++ b/src/routers/account.js @@ -31,14 +31,7 @@ router.get('/', async (request, response) => { } // Setup the data to be sent to the handlebars renderer - const renderData = { - success: request.cookies.success, - error: request.cookies.error - }; - - // Reset message cookies - response.clearCookie('success', { domain: '.pretendo.network' }); - response.clearCookie('error', { domain: '.pretendo.network' }); + const renderData = {}; // Check for Stripe messages const { upgrade_success } = request.query; @@ -201,13 +194,7 @@ router.get('/', async (request, response) => { }); router.get('/login', async (request, response) => { - const renderData = { - error: request.cookies.error - }; - - response.clearCookie('error', { domain: '.pretendo.network' }); - - response.render('account/login', renderData); + response.render('account/login'); }); router.post('/login', async (request, response) => { @@ -220,7 +207,7 @@ router.post('/login', async (request, response) => { }); if (apiResponse.statusCode !== 200) { - response.cookie('error', apiResponse.body.error, { domain: '.pretendo.network' }); + response.cookie('error_message', apiResponse.body.error, { domain: '.pretendo.network' }); return response.redirect('/account/login'); } @@ -251,13 +238,11 @@ router.post('/login', async (request, response) => { router.get('/register', async (request, response) => { const renderData = { - error: request.cookies.error, email: request.cookies.email, username: request.cookies.username, mii_name: request.cookies.mii_name, }; - response.clearCookie('error', { domain: '.pretendo.network' }); response.clearCookie('email', { domain: '.pretendo.network' }); response.clearCookie('username', { domain: '.pretendo.network' }); response.clearCookie('mii_name', { domain: '.pretendo.network' }); @@ -277,7 +262,7 @@ router.post('/register', async (request, response) => { }); if (apiResponse.statusCode !== 200) { - response.cookie('error', apiResponse.body.error, { domain: '.pretendo.network' }); + response.cookie('error_message', apiResponse.body.error, { domain: '.pretendo.network' }); return response.redirect('/account/register'); } @@ -287,7 +272,6 @@ router.post('/register', async (request, response) => { response.cookie('access_token', tokens.access_token, { domain: '.pretendo.network' }); response.cookie('token_type', tokens.token_type, { domain: '.pretendo.network' }); - response.clearCookie('error', { domain: '.pretendo.network' }); response.clearCookie('email', { domain: '.pretendo.network' }); response.clearCookie('username', { domain: '.pretendo.network' }); response.clearCookie('mii_name', { domain: '.pretendo.network' }); @@ -314,7 +298,7 @@ router.get('/connect/discord', async (request, response) => { grantType: 'authorization_code', }); } catch (error) { - response.cookie('error', 'Invalid Discord authorization code. Please try again', { domain: '.pretendo.network' }); + response.cookie('error_message', 'Invalid Discord authorization code. Please try again', { domain: '.pretendo.network' }); return response.redirect('/account'); } @@ -371,7 +355,9 @@ router.get('/connect/discord', async (request, response) => { } } - response.cookie('success', 'Discord account linked successfully', { domain: '.pretendo.network' }).redirect('/account'); + response.cookie('success_message', 'Discord account linked successfully', { domain: '.pretendo.network' }); + + response.redirect('/account'); }); router.get('/online-files', async (request, response) => { @@ -662,7 +648,7 @@ router.post('/stripe/checkout/:priceId', async (request, response) => { const pnid = await database.PNID.findOne({ pid }); if (pnid.get('access_level') >= 2) { - response.cookie('error', 'Staff members do not need to purchase tiers', { domain: '.pretendo.network' }); + response.cookie('error_message', 'Staff members do not need to purchase tiers', { domain: '.pretendo.network' }); return response.redirect('/account'); } @@ -684,7 +670,8 @@ router.post('/stripe/checkout/:priceId', async (request, response) => { } catch (error) { // Maybe we need a dedicated error page? // Or handle this as not cookies? - response.cookie('error', error.message, { domain: '.pretendo.network' }); + response.cookie('error_message', error.message, { domain: '.pretendo.network' }); + return response.redirect('/account'); } }); @@ -756,7 +743,7 @@ router.post('/stripe/unsubscribe', async (request, response) => { } catch (error) { logger.error(`Error canceling old user subscription | ${pnid.get('connections.stripe.customer_id')}, ${pid}, ${subscriptionId} | - ${error.message}`); - response.cookie('error', 'Error canceling subscription! Contact support if issue persists', { domain: '.pretendo.network' }); + response.cookie('error_message', 'Error canceling subscription! Contact support if issue persists', { domain: '.pretendo.network' }); return response.redirect('/account'); } diff --git a/src/server.js b/src/server.js index b7a2d00..cfa0735 100644 --- a/src/server.js +++ b/src/server.js @@ -7,7 +7,7 @@ const expressLocale = require('express-locale'); const cookieParser = require('cookie-parser'); const Stripe = require('stripe'); const redirectMiddleware = require('./middleware/redirect'); -const localeMiddleware = require('./middleware/locale'); +const renderDataMiddleware = require('./middleware/render-data'); const database = require('./database'); const util = require('./util'); const logger = require('./logger'); @@ -67,7 +67,7 @@ app.use(expressLocale({ 'default': 'en-US' })); app.use(redirectMiddleware); -app.use(localeMiddleware); +app.use(renderDataMiddleware); logger.info('Setting up static public folder'); app.use(express.static('public')); diff --git a/views/account/account.handlebars b/views/account/account.handlebars index 35d05ab..d530e91 100644 --- a/views/account/account.handlebars +++ b/views/account/account.handlebars @@ -156,18 +156,18 @@ -{{#if success}} +{{#if success_message}} {{/if}} -{{#if error}} +{{#if error_message}} {{/if}}