Merge pull request #182 from DaniElectra/token-scope-fix
Some checks failed
Build and Publish Docker Image / Build and Publish Docker Image (amd64) (push) Has been cancelled
Build and Publish Docker Image / Build and Publish Docker Image (arm64) (push) Has been cancelled

This commit is contained in:
Jonathan Barrow
2025-06-08 19:00:08 -04:00
committed by GitHub
2 changed files with 16 additions and 10 deletions

View File

@@ -104,12 +104,17 @@ export async function getPNIDByBasicAuth(token: string): Promise<HydratedPNIDDoc
return pnid;
}
export async function getPNIDByTokenAuth(token: string): Promise<HydratedPNIDDocument | null> {
export async function getPNIDByTokenAuth(token: string, allowedTypes?: number[]): Promise<HydratedPNIDDocument | null> {
verifyConnected();
try {
const decryptedToken = decryptToken(Buffer.from(token, 'hex'));
const unpackedToken = unpackToken(decryptedToken);
if (allowedTypes && !allowedTypes.includes(unpackedToken.system_type)) {
return null;
}
const pnid = await getPNIDByPID(unpackedToken.pid);
if (pnid) {
@@ -221,8 +226,8 @@ export async function getServerByGameServerID(gameServerID: string, accessMode:
for (const mode of searchModes) {
const server = servers.find(s => s.access_mode === mode);
if (server) {
return server;
if (server) {
return server;
}
}
@@ -239,8 +244,8 @@ export async function getServerByTitleID(titleID: string, accessMode: string): P
for (const mode of searchModes) {
const server = servers.find(s => s.access_mode === mode);
if (server) {
return server;
if (server) {
return server;
}
}
@@ -257,8 +262,8 @@ export async function getServerByClientID(clientID: string, accessMode: string):
for (const mode of searchModes) {
const server = servers.find(s => s.access_mode === mode);
if (server) {
return server;
if (server) {
return server;
}
}
@@ -312,4 +317,4 @@ export async function removePNIDConnectionDiscord(pnid: HydratedPNIDDocument): P
app: 'api',
status: 200
};
}
}

View File

@@ -23,7 +23,8 @@ async function PNIDMiddleware(request: express.Request, response: express.Respon
if (type === 'Basic' && request.path.includes('v1/api/people/@me/devices')) {
pnid = await getPNIDByBasicAuth(token);
} else if (type === 'Bearer') {
pnid = await getPNIDByTokenAuth(token);
// TODO - This "accepted types list" is mostly a hack. Change this
pnid = await getPNIDByTokenAuth(token, [1, 2]);
}
if (!pnid) {
@@ -84,4 +85,4 @@ async function PNIDMiddleware(request: express.Request, response: express.Respon
return next();
}
export default PNIDMiddleware;
export default PNIDMiddleware;