diff --git a/src/services/api/routes/v1/login.ts b/src/services/api/routes/v1/login.ts index 2efed2a..519883e 100644 --- a/src/services/api/routes/v1/login.ts +++ b/src/services/api/routes/v1/login.ts @@ -2,6 +2,7 @@ import express from 'express'; import bcrypt from 'bcrypt'; import { getPNIDByUsername, getPNIDByTokenAuth } from '@/database'; import { nintendoPasswordHash, generateToken } from '@/util'; +import { TokenType } from '@/types/common/token-types'; import { config } from '@/config-manager'; import { LOG_ERROR } from '@/logger'; import type { HydratedPNIDDocument } from '@/types/mongoose/pnid'; @@ -112,7 +113,7 @@ router.post('/', async (request: express.Request, response: express.Response): P const accessTokenOptions = { system_type: 0x3, // * API - token_type: 0x1, // * OAuth Access + token_type: TokenType.OAuthAccess, pid: pnid.pid, access_level: pnid.access_level, title_id: BigInt(0), @@ -121,7 +122,7 @@ router.post('/', async (request: express.Request, response: express.Response): P const refreshTokenOptions = { system_type: 0x3, // * API - token_type: 0x2, // * OAuth Refresh + token_type: TokenType.OAuthRefresh, pid: pnid.pid, access_level: pnid.access_level, title_id: BigInt(0), diff --git a/src/services/api/routes/v1/register.ts b/src/services/api/routes/v1/register.ts index e1dc4bc..b112a1e 100644 --- a/src/services/api/routes/v1/register.ts +++ b/src/services/api/routes/v1/register.ts @@ -7,6 +7,7 @@ import hcaptcha from 'hcaptcha'; import Mii from 'mii-js'; import { doesPNIDExist, connection as databaseConnection } from '@/database'; import { nintendoPasswordHash, sendConfirmationEmail, generateToken } from '@/util'; +import { TokenType } from '@/types/common/token-types'; import { LOG_ERROR } from '@/logger'; import { PNID } from '@/models/pnid'; import { NEXAccount } from '@/models/nex-account'; @@ -369,7 +370,7 @@ router.post('/', async (request: express.Request, response: express.Response): P const accessTokenOptions = { system_type: 0x3, // * API - token_type: 0x1, // * OAuth Access + token_type: TokenType.OAuthAccess, pid: pnid.pid, access_level: pnid.access_level, title_id: BigInt(0), @@ -378,7 +379,7 @@ router.post('/', async (request: express.Request, response: express.Response): P const refreshTokenOptions = { system_type: 0x3, // * API - token_type: 0x2, // * OAuth Refresh + token_type: TokenType.OAuthRefresh, pid: pnid.pid, access_level: pnid.access_level, title_id: BigInt(0), diff --git a/src/services/grpc/api/login.ts b/src/services/grpc/api/login.ts index f8c75bd..8f91049 100644 --- a/src/services/grpc/api/login.ts +++ b/src/services/grpc/api/login.ts @@ -2,6 +2,7 @@ import { Status, ServerError } from 'nice-grpc'; import bcrypt from 'bcrypt'; import { getPNIDByUsername, getPNIDByTokenAuth } from '@/database'; import { nintendoPasswordHash, generateToken } from '@/util'; +import { TokenType } from '@/types/common/token-types'; import { config } from '@/config-manager'; import type { LoginRequest, LoginResponse, DeepPartial } from '@pretendonetwork/grpc/api/login_rpc'; import type { HydratedPNIDDocument } from '@/types/mongoose/pnid'; @@ -56,7 +57,7 @@ export async function login(request: LoginRequest): Promise { const tokenOptions = { system_type: 0x2, // * 3DS - token_type: 0x3, // * NEX token + token_type: TokenType.NEX, pid: pid, access_level: 0, title_id: BigInt(parseInt(titleID, 16)), diff --git a/src/services/nnas/routes/oauth.ts b/src/services/nnas/routes/oauth.ts index 7be251b..bef8e60 100644 --- a/src/services/nnas/routes/oauth.ts +++ b/src/services/nnas/routes/oauth.ts @@ -5,6 +5,7 @@ import deviceCertificateMiddleware from '@/middleware/device-certificate'; import consoleStatusVerificationMiddleware from '@/middleware/console-status-verification'; import { getPNIDByTokenAuth, getPNIDByUsername } from '@/database'; import { generateToken } from '@/util'; +import { TokenType } from '@/types/common/token-types'; import { config } from '@/config-manager'; import { Device } from '@/models/device'; @@ -153,14 +154,14 @@ router.post('/access_token/generate', deviceCertificateMiddleware, consoleStatus const accessTokenOptions = { system_type: 0x1, // * WiiU - token_type: 0x1, // * OAuth Access + token_type: TokenType.OAuthAccess, pid: pnid.pid, expire_time: BigInt(Date.now() + (3600 * 1000)) }; const refreshTokenOptions = { system_type: 0x1, // * WiiU - token_type: 0x2, // * OAuth Refresh + token_type: TokenType.OAuthRefresh, pid: pnid.pid, expire_time: BigInt(Date.now() + (3600 * 1000)) }; diff --git a/src/services/nnas/routes/provider.ts b/src/services/nnas/routes/provider.ts index 72f8f1f..16adbf8 100644 --- a/src/services/nnas/routes/provider.ts +++ b/src/services/nnas/routes/provider.ts @@ -2,6 +2,7 @@ import express from 'express'; import xmlbuilder from 'xmlbuilder'; import { getServerByClientID, getServerByGameServerID } from '@/database'; import { generateToken, getValueFromHeaders, getValueFromQueryString } from '@/util'; +import { TokenType } from '@/types/common/token-types'; import { NEXAccount } from '@/models/nex-account'; const router = express.Router(); @@ -91,7 +92,7 @@ router.get('/service_token/@me', async (request: express.Request, response: expr const tokenOptions = { system_type: server.device, - token_type: 0x4, // * Service token + token_type: TokenType.IndependentService, pid: pnid.pid, access_level: pnid.access_level, title_id: BigInt(parseInt(titleID, 16)), @@ -214,7 +215,7 @@ router.get('/nex_token/@me', async (request: express.Request, response: express. const tokenOptions = { system_type: server.device, - token_type: 0x3, // * nex token, + token_type: TokenType.NEX, pid: pnid.pid, access_level: pnid.access_level, title_id: BigInt(parseInt(titleID, 16)), @@ -239,4 +240,4 @@ router.get('/nex_token/@me', async (request: express.Request, response: express. }).end()); }); -export default router; +export default router; diff --git a/src/types/common/token-types.ts b/src/types/common/token-types.ts new file mode 100644 index 0000000..24b081d --- /dev/null +++ b/src/types/common/token-types.ts @@ -0,0 +1,8 @@ +// TODO - Maybe this shouldn't be in the `types` folder, since it's also actual data? +export enum TokenType { + OAuthAccess = 1, + OAuthRefresh = 2, + NEX = 3, + IndependentService = 4, + PasswordReset = 5 +} diff --git a/src/util.ts b/src/util.ts index 339d484..f621e82 100644 --- a/src/util.ts +++ b/src/util.ts @@ -5,6 +5,7 @@ import fs from 'fs-extra'; import bufferCrc32 from 'buffer-crc32'; import { crc32 } from 'crc'; import { sendMail } from '@/mailer'; +import { TokenType } from '@/types/common/token-types'; import { config, disabledFeatures } from '@/config-manager'; import type { ParsedQs } from 'qs'; import type mongoose from 'mongoose'; @@ -240,7 +241,7 @@ export async function sendEmailConfirmedParentalControlsEmail(pnid: mongoose.Hyd export async function sendForgotPasswordEmail(pnid: mongoose.HydratedDocument): Promise { const tokenOptions = { system_type: 0xF, // * API - token_type: 0x5, // * Password reset + token_type: TokenType.PasswordReset, pid: pnid.pid, access_level: pnid.access_level, title_id: BigInt(0),