Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 37 additions & 23 deletions src/middleware/console-status-verification.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@ import type express from 'express';
async function consoleStatusVerificationMiddleware(request: express.Request, response: express.Response, next: express.NextFunction): Promise<void> {
if (!request.certificate || !request.certificate.valid) {
response.status(400).send(xmlbuilder.create({
error: {
code: '0110',
message: 'Unlinked device'
errors: {
error: {
code: '0110',
message: 'Unlinked device'
}
}
}).end());

Expand All @@ -20,9 +22,11 @@ async function consoleStatusVerificationMiddleware(request: express.Request, res

if (!deviceIDHeader) {
response.status(400).send(xmlbuilder.create({
error: {
code: '0002',
message: 'deviceId format is invalid'
errors: {
error: {
code: '0002',
message: 'deviceId format is invalid'
}
}
}).end());

Expand All @@ -33,9 +37,11 @@ async function consoleStatusVerificationMiddleware(request: express.Request, res

if (isNaN(deviceID)) {
response.status(400).send(xmlbuilder.create({
error: {
code: '0002',
message: 'deviceId format is invalid'
errors: {
error: {
code: '0002',
message: 'deviceId format is invalid'
}
}
}).end());

Expand All @@ -47,10 +53,12 @@ async function consoleStatusVerificationMiddleware(request: express.Request, res
if (deviceID !== certificateDeviceID) {
// TODO - Change this to a different error
response.status(400).send(xmlbuilder.create({
error: {
cause: 'Bad Request',
code: '1600',
message: 'Unable to process request'
errors: {
error: {
cause: 'Bad Request',
code: '1600',
message: 'Unable to process request'
}
}
}).end());

Expand All @@ -74,9 +82,11 @@ async function consoleStatusVerificationMiddleware(request: express.Request, res
// * compare against. We are not so lucky
if (!serialNumber) {
response.status(400).send(xmlbuilder.create({
error: {
code: '0002',
message: 'serialNumber format is invalid'
errors: {
error: {
code: '0002',
message: 'serialNumber format is invalid'
}
}
}).end());

Expand All @@ -96,9 +106,11 @@ async function consoleStatusVerificationMiddleware(request: express.Request, res
// * know that serial tampering happened on the 3DS if this fails
// * to find a device document.
response.status(400).send(xmlbuilder.create({
error: {
code: '0002',
message: 'serialNumber format is invalid'
errors: {
error: {
code: '0002',
message: 'serialNumber format is invalid'
}
}
}).end());

Expand Down Expand Up @@ -127,10 +139,12 @@ async function consoleStatusVerificationMiddleware(request: express.Request, res
if (device.serial !== serialNumber) {
// TODO - Change this to a different error
response.status(400).send(xmlbuilder.create({
error: {
cause: 'Bad Request',
code: '1600',
message: 'Unable to process request'
errors: {
error: {
cause: 'Bad Request',
code: '1600',
message: 'Unable to process request'
}
}
}).end());

Expand Down
68 changes: 41 additions & 27 deletions src/services/nnas/routes/oauth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,12 @@ router.post('/access_token/generate', deviceCertificateMiddleware, consoleStatus

if (!['password', 'refresh_token'].includes(grantType)) {
response.status(400).send(xmlbuilder.create({
error: {
cause: 'grant_type',
code: '0004',
message: 'Invalid Grant Type'
errors: {
error: {
cause: 'grant_type',
code: '0004',
message: 'Invalid Grant Type'
}
}
}).end());

Expand All @@ -40,10 +42,12 @@ router.post('/access_token/generate', deviceCertificateMiddleware, consoleStatus
if (grantType === 'password') {
if (!username || username.trim() === '') {
response.status(400).send(xmlbuilder.create({
error: {
cause: 'user_id',
code: '0002',
message: 'user_id format is invalid'
errors: {
error: {
cause: 'user_id',
code: '0002',
message: 'user_id format is invalid'
}
}
}).end());

Expand All @@ -52,10 +56,12 @@ router.post('/access_token/generate', deviceCertificateMiddleware, consoleStatus

if (!password || password.trim() === '') {
response.status(400).send(xmlbuilder.create({
error: {
cause: 'password',
code: '0002',
message: 'password format is invalid'
errors: {
error: {
cause: 'password',
code: '0002',
message: 'password format is invalid'
}
}
}).end());

Expand All @@ -79,10 +85,12 @@ router.post('/access_token/generate', deviceCertificateMiddleware, consoleStatus
} else {
if (!refreshToken || refreshToken.trim() === '') {
response.status(400).send(xmlbuilder.create({
error: {
cause: 'refresh_token',
code: '0106',
message: 'Invalid Refresh Token'
errors: {
error: {
cause: 'refresh_token',
code: '0106',
message: 'Invalid Refresh Token'
}
}
}).end());

Expand All @@ -94,21 +102,25 @@ router.post('/access_token/generate', deviceCertificateMiddleware, consoleStatus

if (!pnid) {
response.status(400).send(xmlbuilder.create({
error: {
cause: 'refresh_token',
code: '0106',
message: 'Invalid Refresh Token'
errors: {
error: {
cause: 'refresh_token',
code: '0106',
message: 'Invalid Refresh Token'
}
}
}).end());

return;
}
} catch {
response.status(400).send(xmlbuilder.create({
error: {
cause: 'refresh_token',
code: '0106',
message: 'Invalid Refresh Token'
errors: {
error: {
cause: 'refresh_token',
code: '0106',
message: 'Invalid Refresh Token'
}
}
}).end());

Expand All @@ -121,9 +133,11 @@ router.post('/access_token/generate', deviceCertificateMiddleware, consoleStatus
// * 0143 is the "The link to this Nintendo Network ID has been temporarliy removed" error,
// * maybe that is a better error to use here?
response.status(400).send(xmlbuilder.create({
error: {
code: '0112',
message: pnid.username
errors: {
error: {
code: '0112',
message: pnid.username
}
}
}).end());

Expand Down
20 changes: 12 additions & 8 deletions src/services/nnas/routes/people.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,12 @@ router.post('/', ratelimit, deviceCertificateMiddleware, async (request: express
if (!request.certificate || !request.certificate.valid) {
// TODO - Change this to a different error
response.status(400).send(xmlbuilder.create({
error: {
cause: 'Bad Request',
code: '1600',
message: 'Unable to process request'
errors: {
error: {
cause: 'Bad Request',
code: '1600',
message: 'Unable to process request'
}
}
}).end());

Expand Down Expand Up @@ -205,10 +207,12 @@ router.post('/', ratelimit, deviceCertificateMiddleware, async (request: express
await session.abortTransaction();

response.status(400).send(xmlbuilder.create({
error: {
cause: 'Bad Request',
code: '1600',
message: 'Unable to process request'
errors: {
error: {
cause: 'Bad Request',
code: '1600',
message: 'Unable to process request'
}
}
}).end());

Expand Down
Loading