From b6a7b4084063c12778dfe6481b8981cb5b978ad8 Mon Sep 17 00:00:00 2001 From: Jonathan Barrow Date: Sun, 10 Jul 2022 09:33:19 -0400 Subject: [PATCH] Moved redirect check to middleware --- src/middleware/redirect.js | 9 +++++++++ src/routers/account.js | 14 ++------------ src/server.js | 37 ++++++++++++++++++------------------- 3 files changed, 29 insertions(+), 31 deletions(-) create mode 100644 src/middleware/redirect.js diff --git a/src/middleware/redirect.js b/src/middleware/redirect.js new file mode 100644 index 0000000..ce7f653 --- /dev/null +++ b/src/middleware/redirect.js @@ -0,0 +1,9 @@ +async function redirectMiddleware(request, response, next) { + if (request.method === 'POST') { + request.redirect = request.body.redirect?.startsWith('/') ? request.body.redirect : null; + } + + return next(); +} + +module.exports = redirectMiddleware; \ No newline at end of file diff --git a/src/routers/account.js b/src/routers/account.js index 202ebd5..52502b2 100644 --- a/src/routers/account.js +++ b/src/routers/account.js @@ -220,7 +220,6 @@ router.get('/login', async (request, response) => { router.post('/login', async (request, response) => { const { username, password } = request.body; - let { redirect } = request.body; let apiResponse = await util.apiPostGetRequest('/v1/login', {}, { username, @@ -255,11 +254,7 @@ router.post('/login', async (request, response) => { response.cookie('ph', encryptedBody.toString('hex'), { domain: '.pretendo.network' }); - if (!redirect.startsWith('/')) { - redirect = null; - } - - response.redirect(redirect || '/account'); + response.redirect(request.redirect || '/account'); }); router.get('/register', async (request, response) => { @@ -290,7 +285,6 @@ router.get('/register', async (request, response) => { router.post('/register', async (request, response) => { const { email, username, mii_name, password, password_confirm, 'h-captcha-response': hCaptchaResponse } = request.body; - let { redirect } = request.body; response.cookie('email', email, { domain: '.pretendo.network' }); response.cookie('username', username, { domain: '.pretendo.network' }); @@ -316,11 +310,7 @@ router.post('/register', async (request, response) => { response.clearCookie('username', { domain: '.pretendo.network' }); response.clearCookie('mii_name', { domain: '.pretendo.network' }); - if (!redirect.startsWith('/')) { - redirect = null; - } - - response.redirect(redirect || '/account'); + response.redirect(request.redirect || '/account'); }); router.get('/logout', async(_request, response) => { diff --git a/src/server.js b/src/server.js index 4e42444..d4b344b 100644 --- a/src/server.js +++ b/src/server.js @@ -6,9 +6,10 @@ const morgan = require('morgan'); const expressLocale = require('express-locale'); const cookieParser = require('cookie-parser'); const Stripe = require('stripe'); -const logger = require('./logger'); +const redirectMiddleware = require('./middleware/redirect'); const database = require('./database'); const util = require('./util'); +const logger = require('./logger'); const config = require('../config.json'); const defaultLocale = require('../locales/US_en.json'); @@ -19,25 +20,7 @@ const stripe = new Stripe(config.stripe.secret_key); logger.info('Setting up Middleware'); app.use(morgan('dev')); app.use(express.urlencoded({ extended: true })); - -logger.info('Setting up static public folder'); -app.use(express.static('public')); - -logger.info('Importing page routers'); -const routers = { - home: require('./routers/home'), - faq: require('./routers/faq'), - docs: require('./routers/docs'), - progress: require('./routers/progress'), - account: require('./routers/account'), - blog: require('./routers/blog'), - localization: require('./routers/localization'), - aprilfools: require('./routers/aprilfools') -}; - app.use(cookieParser()); - -// Locale express middleware setup app.use(expressLocale({ 'priority': ['cookie', 'accept-language', 'map', 'default'], cookie: { name: 'preferredLocale' }, @@ -82,6 +65,22 @@ app.use(expressLocale({ ], 'default': 'en-US' })); +app.use(redirectMiddleware); + +logger.info('Setting up static public folder'); +app.use(express.static('public')); + +logger.info('Importing page routers'); +const routers = { + home: require('./routers/home'), + faq: require('./routers/faq'), + docs: require('./routers/docs'), + progress: require('./routers/progress'), + account: require('./routers/account'), + blog: require('./routers/blog'), + localization: require('./routers/localization'), + aprilfools: require('./routers/aprilfools') +}; app.use('/', routers.home); app.use('/faq', routers.faq);