mirror of
https://github.com/PretendoNetwork/website.git
synced 2026-08-23 00:57:21 -05:00
Always assign user render data if logged in
This commit is contained in:
@@ -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;
|
||||
@@ -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;
|
||||
10
src/middleware/require-login.js
Normal file
10
src/middleware/require-login.js
Normal 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;
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
43
src/util.js
43
src/util.js
@@ -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
|
||||
};
|
||||
Reference in New Issue
Block a user