Removed ph cookie, users now supply password for online files

This commit is contained in:
Jonathan Barrow
2022-07-16 09:44:28 -04:00
parent ecb07e7b02
commit 12d0a9206e
13 changed files with 170 additions and 35 deletions

View File

@@ -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}`);
}

View File

@@ -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());

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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'],