diff --git a/src/middleware/authentication.ts b/src/middleware/authentication.ts new file mode 100644 index 0000000..fbe8ad1 --- /dev/null +++ b/src/middleware/authentication.ts @@ -0,0 +1,11 @@ +import { getNEXDataByPID } from '@/util'; +import type express from 'express'; + +export default async function authenticationMiddleware(request: express.Request, response: express.Response, next: express.NextFunction): Promise { + if (request.pid) { + // TODO - Get users PNIDs + request.nexAccount = await getNEXDataByPID(request.pid); + } + + return next(); +} diff --git a/src/server.ts b/src/server.ts index da94cd9..a77c9ee 100644 --- a/src/server.ts +++ b/src/server.ts @@ -6,6 +6,7 @@ import RequestException from '@/request-exception'; import { LOG_INFO, LOG_SUCCESS } from '@/logger'; import { config } from '@/config-manager'; import parseUserAgentMiddleware from '@/middleware/parse-user-agent'; +import authenticationMiddleware from '@/middleware/authentication'; import nppl from '@/services/nppl'; import npts from '@/services/npts'; import npdi from '@/services/npdi'; @@ -28,6 +29,7 @@ app.use(express.urlencoded({ })); app.use(parseUserAgentMiddleware); +app.use(authenticationMiddleware); app.use(nppl); app.use(npts); diff --git a/src/services/spr.ts b/src/services/spr.ts index 3a7d0c6..207e770 100644 --- a/src/services/spr.ts +++ b/src/services/spr.ts @@ -3,7 +3,7 @@ import express from 'express'; import subdomain from 'express-subdomain'; import Dicer from 'dicer'; import { getDuplicateCECData, getRandomCECData } from '@/database'; -import { getFriends, getNEXDataByPID } from '@/util'; +import { getFriends } from '@/util'; import { CECData } from '@/models/cec-data'; import { CECSlot } from '@/models/cec-slot'; import { SendMode } from '@/types/common/spr-slot'; @@ -70,19 +70,13 @@ spr.post('/relay/0', multipartParser, async (request, response) => { return; } - if (!request.pid) { - response.sendStatus(400); - return; - } - - const nexAccount = await getNEXDataByPID(request.pid); - if (!nexAccount) { + if (!request.pid || !request.nexAccount) { response.sendStatus(400); return; } // * Check that the account is a 3DS and isn't banned - if (!nexAccount.friendCode || nexAccount.accessLevel < 0) { + if (!request.nexAccount.friendCode || request.nexAccount.accessLevel < 0) { response.sendStatus(400); return; } diff --git a/src/types/express.d.ts b/src/types/express.d.ts index 936a4fe..f47a006 100644 --- a/src/types/express.d.ts +++ b/src/types/express.d.ts @@ -1,6 +1,11 @@ -declare namespace Express { - interface Request { - files?: Record; - pid: number; +import type { GetNEXDataResponse } from '@pretendonetwork/grpc/account/get_nex_data_rpc'; + +declare global { + namespace Express { + interface Request { + files?: Record; + pid: number; + nexAccount: GetNEXDataResponse | null; + } } }