Always assign user render data if logged in

This commit is contained in:
Jonathan Barrow
2022-07-16 10:05:33 -04:00
parent 8d4c195ad4
commit d6713e8e73
11 changed files with 37 additions and 125 deletions

View File

@@ -1,21 +0,0 @@
const util = require('../util');
const database = require('../database');
async function pnidMiddleware(request, response, next) {
// Verify the user is logged in
if (!request.cookies.access_token || !request.cookies.refresh_token) {
return response.redirect(`/account/login?redirect=${request.originalUrl}`);
}
try {
request.account = await util.getUserAccountData(request, response);
request.pnid = await database.PNID.findOne({ pid: request.account.pid });
return next();
} catch (error) {
response.cookie('error_message', error.message, { domain: '.pretendo.network' });
return response.redirect('/account/login');
}
}
module.exports = pnidMiddleware;

View File

@@ -1,4 +1,5 @@
const util = require('../util');
const database = require('../database');
async function renderDataMiddleware(request, response, next) {
// Get user local
@@ -17,8 +18,22 @@ async function renderDataMiddleware(request, response, next) {
response.clearCookie('error_message', { domain: '.pretendo.network' });
response.locals.isLoggedIn = request.cookies.access_token && request.cookies.refresh_token;
return next();
if (response.locals.isLoggedIn) {
try {
response.locals.account = await util.getUserAccountData(request, response);
request.pnid = await database.PNID.findOne({ pid: response.locals.account.pid });
request.account = response.locals.account;
return next();
} catch (error) {
response.cookie('error_message', error.message, { domain: '.pretendo.network' });
return response.redirect('/account/login');
}
} else {
return next();
}
}
module.exports = renderDataMiddleware;

View File

@@ -0,0 +1,10 @@
async function requireLoginMiddleware(request, response, next) {
// Verify the user is logged in
if (!request.cookies.access_token || !request.cookies.refresh_token) {
return response.redirect(`/account/login?redirect=${request.originalUrl}`);
}
return next();
}
module.exports = requireLoginMiddleware;

View File

@@ -6,7 +6,7 @@ const AdmZip = require('adm-zip');
const Stripe = require('stripe');
const { REST: DiscordRest } = require('@discordjs/rest');
const { Routes: DiscordRoutes } = require('discord-api-types/v10');
const pnidMiddleware = require('../middleware/pnid');
const requireLoginMiddleware = require('../middleware/require-login');
const database = require('../database');
const cache = require('../cache');
const util = require('../util');
@@ -27,7 +27,7 @@ const discordOAuth = new DiscordOauth2({
version: 'v10'
});
router.get('/', pnidMiddleware, async (request, response) => {
router.get('/', requireLoginMiddleware, async (request, response) => {
// Setup the data to be sent to the handlebars renderer
const renderData = {};
@@ -145,7 +145,7 @@ router.get('/logout', async(_request, response) => {
response.redirect('/');
});
router.get('/connect/discord', pnidMiddleware, async (request, response) => {
router.get('/connect/discord', requireLoginMiddleware, async (request, response) => {
let tokens;
try {
// Attempt to get OAuth2 tokens
@@ -173,7 +173,7 @@ router.get('/connect/discord', pnidMiddleware, async (request, response) => {
}
});
router.post('/online-files', pnidMiddleware, async (request, response) => {
router.post('/online-files', requireLoginMiddleware, async (request, response) => {
const { account } = request;
const { password } = request.body;
@@ -265,7 +265,7 @@ router.get('/miieditor', async (request, response) => {
});
});
router.get('/upgrade', pnidMiddleware, async (request, response) => {
router.get('/upgrade', requireLoginMiddleware, async (request, response) => {
// Set user account info to render data
const { pnid } = request;
@@ -306,7 +306,7 @@ router.get('/upgrade', pnidMiddleware, async (request, response) => {
response.render('account/upgrade', renderData);
});
router.post('/stripe/checkout/:priceId', pnidMiddleware, async (request, response) => {
router.post('/stripe/checkout/:priceId', requireLoginMiddleware, async (request, response) => {
// Set user account info to render data
const { account } = request;
const pid = account.pid;
@@ -367,7 +367,7 @@ router.post('/stripe/checkout/:priceId', pnidMiddleware, async (request, respons
}
});
router.post('/stripe/unsubscribe', pnidMiddleware, async (request, response) => {
router.post('/stripe/unsubscribe', requireLoginMiddleware, async (request, response) => {
// Set user account info to render data
const { pnid } = request;

View File

@@ -1,17 +1,8 @@
const { Router } = require('express');
const util = require('../util');
const router = new Router();
router.get('/', async (request, response) => {
const renderData = {};
if (response.locals.isLoggedIn) {
const account = await util.getAccount(request, response);
renderData.account = account;
}
response.render('aprilfools', renderData);
response.render('aprilfools');
});
module.exports = router;

View File

@@ -1,5 +1,4 @@
const { Router } = require('express');
const util = require('../util');
const logger = require('../logger');
const router = new Router();
@@ -40,11 +39,6 @@ router.get('/', async (request, response) => {
postList
};
if (response.locals.isLoggedIn) {
const account = await util.getAccount(request, response);
renderData.account = account;
}
response.render('blog/blog', renderData);
});
@@ -72,11 +66,6 @@ router.get('/:slug', async (request, response, next) => {
postList,
};
if (response.locals.isLoggedIn) {
const account = await util.getAccount(request, response);
renderData.account = account;
}
// Get the name of the post from the URL
const postName = request.params.slug;

View File

@@ -1,5 +1,4 @@
const { Router } = require('express');
const util = require('../util');
const router = new Router();
const fs = require('fs');
@@ -15,11 +14,6 @@ router.get('/search', async (request, response) => {
currentPage: request.params.slug
};
if (response.locals.isLoggedIn) {
const account = await util.getAccount(request, response);
renderData.account = account;
}
response.render('docs/search', renderData);
});
@@ -28,11 +22,6 @@ router.get('/:slug', async (request, response, next) => {
currentPage: request.params.slug
};
if (response.locals.isLoggedIn) {
const account = await util.getAccount(request, response);
renderData.account = account;
}
// Get the name of the page from the URL
const pageName = request.params.slug;

View File

@@ -1,5 +1,4 @@
const { Router } = require('express');
const util = require('../util');
const { boards } = require('../../boards/boards.json');
const router = new Router();
@@ -11,11 +10,6 @@ router.get('/', async (request, response) => {
boards
};
if (response.locals.isLoggedIn) {
const account = await util.getAccount(request, response);
renderData.account = account;
}
const cache = await getTrelloCache();
// Builds the arrays of people for the special thanks section

View File

@@ -1,16 +1,8 @@
const { Router } = require('express');
const util = require('../util');
const router = new Router();
router.get('/', async (request, response) => {
const renderData = {};
if (response.locals.isLoggedIn) {
const account = await util.getAccount(request, response);
renderData.account = account;
}
response.render('localization', renderData);
response.render('localization');
});
module.exports = router;

View File

@@ -1,5 +1,4 @@
const { Router } = require('express');
const util = require('../util');
const { boards } = require('../../boards/boards.json');
const router = new Router();
@@ -10,11 +9,6 @@ router.get('/', async (request, response) => {
boards
};
if (response.locals.isLoggedIn) {
const account = await util.getAccount(request, response);
renderData.account = account;
}
const trelloCache = await getTrelloCache();
renderData.progressLists = trelloCache;
const stripeDonationCache = await getStripeDonationCache();

View File

@@ -335,46 +335,6 @@ async function handleStripeEvent(event) {
}
}
async function getAccount(request, response) {
// Attempt to get user data
let apiResponse = await apiGetRequest('/v1/user', {
'Authorization': `${request.cookies.token_type} ${request.cookies.access_token}`
});
if (apiResponse.statusCode !== 200) {
// Assume expired, refresh and retry request
apiResponse = await apiPostGetRequest('/v1/login', {}, {
refresh_token: request.cookies.refresh_token,
grant_type: 'refresh_token'
});
if (apiResponse.statusCode !== 200) {
// TODO: Error message
return response.status(apiResponse.statusCode).json({
error: 'Bad'
});
}
const tokens = apiResponse.body;
apiResponse = await apiGetRequest('/v1/user', {
'Authorization': `${tokens.token_type} ${tokens.access_token}`
});
}
// If still failed, something went horribly wrong
if (apiResponse.statusCode !== 200) {
// TODO: Error message
return response.status(apiResponse.statusCode).json({
error: 'Bad'
});
}
// Return user account info
const account = apiResponse.body;
return account;
}
module.exports = {
fullUrl,
getLocale,
@@ -387,6 +347,5 @@ module.exports = {
getUserAccountData,
updateDiscordConnection,
nintendoPasswordHash,
handleStripeEvent,
getAccount
handleStripeEvent
};