From b998f754a85bfa20032e34af01972f7f4f009be9 Mon Sep 17 00:00:00 2001 From: Jonathan Barrow Date: Fri, 25 Aug 2023 20:55:37 -0400 Subject: [PATCH] Added support for BOSS permissions --- package-lock.json | 8 +-- package.json | 2 +- .../account/exchange-token-for-user-data.ts | 62 +++++++++++++++++++ src/services/grpc/account/get-user-data.ts | 8 ++- src/services/grpc/account/implementation.ts | 4 +- src/types/common/permission-flags.ts | 6 ++ 6 files changed, 83 insertions(+), 7 deletions(-) create mode 100644 src/services/grpc/account/exchange-token-for-user-data.ts diff --git a/package-lock.json b/package-lock.json index 1c21acf..23b4daf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "2.0.0", "license": "ISC", "dependencies": { - "@pretendonetwork/grpc": "^1.0.1", + "@pretendonetwork/grpc": "^1.0.2", "aws-sdk": "^2.978.0", "bcrypt": "^5.0.0", "buffer-crc32": "^0.2.13", @@ -400,9 +400,9 @@ } }, "node_modules/@pretendonetwork/grpc": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@pretendonetwork/grpc/-/grpc-1.0.1.tgz", - "integrity": "sha512-qNsZ//+U22KYTYZyjb4J2CnGUyGfYF35bG1D334WNvq4M2ubvVutWZp98ur5/fVW3g5Af6Eq2IuBwFO9xRhQ1w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pretendonetwork/grpc/-/grpc-1.0.2.tgz", + "integrity": "sha512-g78VP+/wY4VIlQ5EXP5lPzXK1uVflrM3ZA0PW1NZi88EaJRqNPVkYmb6iW+FM0j/lxlu07UcwqLJSHsy9eU01Q==", "dependencies": { "long": "^5.2.1", "protobufjs": "^7.2.3" diff --git a/package.json b/package.json index 7129596..bd38d9c 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ }, "homepage": "https://github.com/PretendoNetwork/account#readme", "dependencies": { - "@pretendonetwork/grpc": "^1.0.1", + "@pretendonetwork/grpc": "^1.0.2", "aws-sdk": "^2.978.0", "bcrypt": "^5.0.0", "buffer-crc32": "^0.2.13", diff --git a/src/services/grpc/account/exchange-token-for-user-data.ts b/src/services/grpc/account/exchange-token-for-user-data.ts new file mode 100644 index 0000000..386ff64 --- /dev/null +++ b/src/services/grpc/account/exchange-token-for-user-data.ts @@ -0,0 +1,62 @@ +import { Status, ServerError } from 'nice-grpc'; +import { ExchangeTokenForUserDataRequest } from '@pretendonetwork/grpc/account/exchange_token_for_user_data'; +import { GetUserDataResponse } from '@pretendonetwork/grpc/account/get_user_data_rpc'; +import { getPNIDByTokenAuth } from '@/database'; +import { HydratedPNIDDocument } from '@/types/mongoose/pnid'; +import { PNID_PERMISSION_FLAGS } from '@/types/common/permission-flags'; +import { config } from '@/config-manager'; + +export async function exchangeTokenForUserData(request: ExchangeTokenForUserDataRequest): Promise { + if (!request.token.trim()) { + throw new ServerError(Status.INVALID_ARGUMENT, 'Invalid token'); + } + + const pnid: HydratedPNIDDocument | null = await getPNIDByTokenAuth(request.token); + + if (!pnid) { + throw new ServerError(Status.INVALID_ARGUMENT, 'Invalid token'); + } + + return { + deleted: pnid.deleted, + pid: pnid.pid, + username: pnid.username, + accessLevel: pnid.access_level, + serverAccessLevel: pnid.server_access_level, + mii: { + name: pnid.mii.name, + data: pnid.mii.data, + url: `${config.cdn.base_url}/mii/${pnid.pid}/standard.tga`, + }, + creationDate: pnid.creation_date, + birthdate: pnid.birthdate, + gender: pnid.gender, + country: pnid.country, + language: pnid.language, + emailAddress: pnid.email.address, + tierName: pnid.connections.stripe.tier_name, + permissions: { + bannedAllPermanently: pnid.hasPermission(PNID_PERMISSION_FLAGS.BANNED_ALL_PERMANENTLY), + bannedAllTemporarily: pnid.hasPermission(PNID_PERMISSION_FLAGS.BANNED_ALL_TEMPORARILY), + betaAccess: pnid.hasPermission(PNID_PERMISSION_FLAGS.BETA_ACCESS), + accessAdminPanel: pnid.hasPermission(PNID_PERMISSION_FLAGS.ACCESS_ADMIN_PANEL), + createServerConfigs: pnid.hasPermission(PNID_PERMISSION_FLAGS.CREATE_SERVER_CONFIGS), + modifyServerConfigs: pnid.hasPermission(PNID_PERMISSION_FLAGS.MODIFY_SERVER_CONFIGS), + deployServer: pnid.hasPermission(PNID_PERMISSION_FLAGS.DEPLOY_SERVER), + modifyPnids: pnid.hasPermission(PNID_PERMISSION_FLAGS.MODIFY_PNIDS), + modifyNexAccounts: pnid.hasPermission(PNID_PERMISSION_FLAGS.MODIFY_NEX_ACCOUNTS), + modifyConsoles: pnid.hasPermission(PNID_PERMISSION_FLAGS.MODIFY_CONSOLES), + banPnids: pnid.hasPermission(PNID_PERMISSION_FLAGS.BAN_PNIDS), + banNexAccounts: pnid.hasPermission(PNID_PERMISSION_FLAGS.BAN_NEX_ACCOUNTS), + banConsoles: pnid.hasPermission(PNID_PERMISSION_FLAGS.BAN_CONSOLES), + moderateMiiverse: pnid.hasPermission(PNID_PERMISSION_FLAGS.MODERATE_MIIVERSE), + createApiKeys: pnid.hasPermission(PNID_PERMISSION_FLAGS.CREATE_API_KEYS), + createBossTasks: pnid.hasPermission(PNID_PERMISSION_FLAGS.CREATE_BOSS_TASKS), + updateBossTasks: pnid.hasPermission(PNID_PERMISSION_FLAGS.UPDATE_BOSS_TASKS), + deleteBossTasks: pnid.hasPermission(PNID_PERMISSION_FLAGS.DELETE_BOSS_TASKS), + uploadBossFiles: pnid.hasPermission(PNID_PERMISSION_FLAGS.UPLOAD_BOSS_FILES), + updateBossFiles: pnid.hasPermission(PNID_PERMISSION_FLAGS.UPDATE_BOSS_FILES), + deleteBossFiles: pnid.hasPermission(PNID_PERMISSION_FLAGS.DELETE_BOSS_FILES) + } + }; +} \ No newline at end of file diff --git a/src/services/grpc/account/get-user-data.ts b/src/services/grpc/account/get-user-data.ts index c1a9d9b..3a7709b 100644 --- a/src/services/grpc/account/get-user-data.ts +++ b/src/services/grpc/account/get-user-data.ts @@ -48,7 +48,13 @@ export async function getUserData(request: GetUserDataRequest): Promise