mirror of
https://github.com/PretendoNetwork/website.git
synced 2026-08-28 11:36:53 -05:00
Removed ph cookie, users now supply password for online files
This commit is contained in:
@@ -3,7 +3,7 @@ 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 || !request.cookies.ph) {
|
||||
if (!request.cookies.access_token || !request.cookies.refresh_token) {
|
||||
return response.redirect(`/account/login?redirect=${request.originalUrl}`);
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,6 @@ const logger = require('../logger');
|
||||
const config = require('../../config.json');
|
||||
|
||||
const { Router } = express;
|
||||
const aesKey = Buffer.from(config.aes_key, 'hex');
|
||||
|
||||
const stripe = new Stripe(config.stripe.secret_key);
|
||||
const router = new Router();
|
||||
@@ -48,7 +47,7 @@ router.get('/', pnidMiddleware, async (request, response) => {
|
||||
renderData.tierLevel = pnid.get('connections.stripe.tier_level');
|
||||
renderData.account = account;
|
||||
renderData.isTester = account.access_level > 0;
|
||||
renderData.isLoggedIn = request.cookies.access_token && request.cookies.refresh_token && request.cookies.ph;
|
||||
renderData.isLoggedIn = request.cookies.access_token && request.cookies.refresh_token;
|
||||
|
||||
// Check if a Discord account is linked to the PNID
|
||||
if (account.connections.discord.id && account.connections.discord.id.trim() !== '') {
|
||||
@@ -67,7 +66,7 @@ router.get('/', pnidMiddleware, async (request, response) => {
|
||||
renderData.discordAuthURL = discordAuthURL;
|
||||
}
|
||||
|
||||
renderData.isLoggedIn = request.cookies.access_token && request.cookies.refresh_token && request.cookies.ph;
|
||||
renderData.isLoggedIn = request.cookies.access_token && request.cookies.refresh_token;
|
||||
|
||||
response.render('account/account', renderData);
|
||||
});
|
||||
@@ -86,18 +85,6 @@ router.post('/login', async (request, response) => {
|
||||
response.cookie('access_token', tokens.access_token, { domain: '.pretendo.network' });
|
||||
response.cookie('token_type', tokens.token_type, { domain: '.pretendo.network' });
|
||||
|
||||
const account = await util.getUserAccountData(request, response);
|
||||
|
||||
const hashedPassword = util.nintendoPasswordHash(password, account.pid);
|
||||
const hashedPasswordBuffer = Buffer.from(hashedPassword, 'hex');
|
||||
|
||||
const cipher = crypto.createCipheriv('aes-256-cbc', aesKey, Buffer.alloc(16));
|
||||
|
||||
let encryptedBody = cipher.update(hashedPasswordBuffer);
|
||||
encryptedBody = Buffer.concat([encryptedBody, cipher.final()]);
|
||||
|
||||
response.cookie('ph', encryptedBody.toString('hex'), { domain: '.pretendo.network' });
|
||||
|
||||
response.redirect(request.redirect || '/account');
|
||||
|
||||
} catch (error) {
|
||||
@@ -157,7 +144,6 @@ router.get('/logout', async(_request, response) => {
|
||||
response.clearCookie('refresh_token', { domain: '.pretendo.network' });
|
||||
response.clearCookie('access_token', { domain: '.pretendo.network' });
|
||||
response.clearCookie('token_type', { domain: '.pretendo.network' });
|
||||
response.clearCookie('ph', { domain: '.pretendo.network' });
|
||||
|
||||
response.redirect('/');
|
||||
});
|
||||
@@ -190,13 +176,11 @@ router.get('/connect/discord', pnidMiddleware, async (request, response) => {
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/online-files', pnidMiddleware, async (request, response) => {
|
||||
router.post('/online-files', pnidMiddleware, async (request, response) => {
|
||||
const { account } = request;
|
||||
const { password } = request.body;
|
||||
|
||||
const decipher = crypto.createDecipheriv('aes-256-cbc', aesKey, Buffer.alloc(16));
|
||||
|
||||
let decryptedPasswordHash = decipher.update(Buffer.from(request.cookies.ph, 'hex'));
|
||||
decryptedPasswordHash = Buffer.concat([decryptedPasswordHash, decipher.final()]);
|
||||
const hashedPassword = util.nintendoPasswordHash(password, account.pid);
|
||||
|
||||
const miiNameBuffer = Buffer.alloc(0x16);
|
||||
const miiName = Buffer.from(account.mii.name, 'utf16le').swap16();
|
||||
@@ -218,7 +202,7 @@ router.get('/online-files', pnidMiddleware, async (request, response) => {
|
||||
accountDat += 'SimpleAddressId=0\n';
|
||||
accountDat += `PrincipalId=${account.pid.toString(16)}\n`;
|
||||
accountDat += 'IsPasswordCacheEnabled=1\n';
|
||||
accountDat += `AccountPasswordCache=${decryptedPasswordHash.toString('hex')}`;
|
||||
accountDat += `AccountPasswordCache=${hashedPassword}`;
|
||||
|
||||
const onlineFiles = new AdmZip();
|
||||
|
||||
@@ -227,7 +211,7 @@ router.get('/online-files', pnidMiddleware, async (request, response) => {
|
||||
onlineFiles.addFile('seeprom.bin', Buffer.alloc(0x200)); // nulled SEEPROM
|
||||
|
||||
response.status(200);
|
||||
response.set('Content-Disposition', 'attachment; filename="Online Files.zip');
|
||||
response.set('Content-Disposition', 'attachment; filename="Cemu Pretendo Online Files.zip');
|
||||
response.set('Content-Type', 'application/zip');
|
||||
|
||||
response.end(onlineFiles.toBuffer());
|
||||
|
||||
@@ -6,7 +6,7 @@ router.get('/', async (request, response) => {
|
||||
|
||||
const renderData = {};
|
||||
|
||||
renderData.isLoggedIn = request.cookies.access_token && request.cookies.refresh_token && request.cookies.ph;
|
||||
renderData.isLoggedIn = request.cookies.access_token && request.cookies.refresh_token;
|
||||
|
||||
if (renderData.isLoggedIn) {
|
||||
const account = await util.getAccount(request, response);
|
||||
|
||||
@@ -40,7 +40,7 @@ router.get('/', async (request, response) => {
|
||||
postList
|
||||
};
|
||||
|
||||
renderData.isLoggedIn = request.cookies.access_token && request.cookies.refresh_token && request.cookies.ph;
|
||||
renderData.isLoggedIn = request.cookies.access_token && request.cookies.refresh_token;
|
||||
|
||||
if (renderData.isLoggedIn) {
|
||||
const account = await util.getAccount(request, response);
|
||||
@@ -74,7 +74,7 @@ router.get('/:slug', async (request, response, next) => {
|
||||
postList,
|
||||
};
|
||||
|
||||
renderData.isLoggedIn = request.cookies.access_token && request.cookies.refresh_token && request.cookies.ph;
|
||||
renderData.isLoggedIn = request.cookies.access_token && request.cookies.refresh_token;
|
||||
|
||||
if (renderData.isLoggedIn) {
|
||||
const account = await util.getAccount(request, response);
|
||||
|
||||
@@ -15,7 +15,7 @@ router.get('/search', async (request, response) => {
|
||||
currentPage: request.params.slug
|
||||
};
|
||||
|
||||
renderData.isLoggedIn = request.cookies.access_token && request.cookies.refresh_token && request.cookies.ph;
|
||||
renderData.isLoggedIn = request.cookies.access_token && request.cookies.refresh_token;
|
||||
|
||||
if (renderData.isLoggedIn) {
|
||||
const account = await util.getAccount(request, response);
|
||||
@@ -30,7 +30,7 @@ router.get('/:slug', async (request, response, next) => {
|
||||
currentPage: request.params.slug
|
||||
};
|
||||
|
||||
renderData.isLoggedIn = request.cookies.access_token && request.cookies.refresh_token && request.cookies.ph;
|
||||
renderData.isLoggedIn = request.cookies.access_token && request.cookies.refresh_token;
|
||||
|
||||
if (renderData.isLoggedIn) {
|
||||
const account = await util.getAccount(request, response);
|
||||
|
||||
@@ -11,7 +11,7 @@ router.get('/', async (request, response) => {
|
||||
boards
|
||||
};
|
||||
|
||||
renderData.isLoggedIn = request.cookies.access_token && request.cookies.refresh_token && request.cookies.ph;
|
||||
renderData.isLoggedIn = request.cookies.access_token && request.cookies.refresh_token;
|
||||
|
||||
if (renderData.isLoggedIn) {
|
||||
const account = await util.getAccount(request, response);
|
||||
|
||||
@@ -5,7 +5,7 @@ const router = new Router();
|
||||
router.get('/', async (request, response) => {
|
||||
const renderData = {};
|
||||
|
||||
renderData.isLoggedIn = request.cookies.access_token && request.cookies.refresh_token && request.cookies.ph;
|
||||
renderData.isLoggedIn = request.cookies.access_token && request.cookies.refresh_token;
|
||||
|
||||
if (renderData.isLoggedIn) {
|
||||
const account = await util.getAccount(request, response);
|
||||
|
||||
@@ -10,7 +10,7 @@ router.get('/', async (request, response) => {
|
||||
boards
|
||||
};
|
||||
|
||||
renderData.isLoggedIn = request.cookies.access_token && request.cookies.refresh_token && request.cookies.ph;
|
||||
renderData.isLoggedIn = request.cookies.access_token && request.cookies.refresh_token;
|
||||
|
||||
if (renderData.isLoggedIn) {
|
||||
const account = await util.getAccount(request, response);
|
||||
|
||||
@@ -20,7 +20,10 @@ const stripe = new Stripe(config.stripe.secret_key);
|
||||
|
||||
logger.info('Setting up Middleware');
|
||||
app.use(morgan('dev'));
|
||||
app.use(express.urlencoded({ extended: true }));
|
||||
app.use(express.json());
|
||||
app.use(express.urlencoded({
|
||||
extended: true
|
||||
}));
|
||||
app.use(cookieParser());
|
||||
app.use(expressLocale({
|
||||
'priority': ['cookie', 'accept-language', 'map', 'default'],
|
||||
|
||||
Reference in New Issue
Block a user