diff --git a/src/services/grpc/api/v2/register.ts b/src/services/grpc/api/v2/register.ts index 0e73572..d0da68a 100644 --- a/src/services/grpc/api/v2/register.ts +++ b/src/services/grpc/api/v2/register.ts @@ -6,7 +6,20 @@ import moment from 'moment'; import hcaptcha from 'hcaptcha'; import Mii from 'mii-js'; import { doesPNIDExist, connection as databaseConnection } from '@/database'; -import { nintendoPasswordHash, sendConfirmationEmail } from '@/util'; +import { + checkNNIDUsernameMinLength, + checkNNIDUsernameMaxLength, + checkNNIDUsernameValidCharacters, + checkNNIDUsernamePunctuationStart, + checkNNIDUsernamePunctuationEnd, + checkNNIDUsernameDuplicate, + checkNNIDPasswordMinLength, + checkNNIDPasswordMaxLength, + checkNNIDPasswordAtLeast2CharacterGroups, + checkNNIDPasswordRepeatCharacters, + nintendoPasswordHash, + sendConfirmationEmail +} from '@/util'; import { LOG_ERROR } from '@/logger'; import { PNID } from '@/models/pnid'; import { NEXAccount } from '@/models/nex-account'; @@ -19,17 +32,6 @@ import type { RegisterRequest, DeepPartial } from '@pretendonetwork/grpc/api/v2/ import type { HydratedNEXAccountDocument } from '@/types/mongoose/nex-account'; import type { HydratedPNIDDocument } from '@/types/mongoose/pnid'; -const PNID_VALID_CHARACTERS_REGEX = /^[\w\-.]*$/; -const PNID_PUNCTUATION_START_REGEX = /^[_\-.]/; -const PNID_PUNCTUATION_END_REGEX = /[_\-.]$/; -const PNID_PUNCTUATION_DUPLICATE_REGEX = /[_\-.]{2,}/; - -// * This sucks -const PASSWORD_WORD_OR_NUMBER_REGEX = /(?=.*[a-zA-Z])(?=.*\d).*/; -const PASSWORD_WORD_OR_PUNCTUATION_REGEX = /(?=.*[a-zA-Z])(?=.*[_\-.]).*/; -const PASSWORD_NUMBER_OR_PUNCTUATION_REGEX = /(?=.*\d)(?=.*[_\-.]).*/; -const PASSWORD_REPEATED_CHARACTER_REGEX = /(.)\1\1/; - const DEFAULT_MII_DATA = Buffer.from('AwAAQOlVognnx0GC2/uogAOzuI0n2QAAAEBEAGUAZgBhAHUAbAB0AAAAAAAAAEBAAAAhAQJoRBgmNEYUgRIXaA0AACkAUkhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGm9', 'base64'); export async function register(request: RegisterRequest): Promise> { @@ -65,27 +67,27 @@ export async function register(request: RegisterRequest): Promise 16) { + if (!checkNNIDUsernameMaxLength(username)) { throw new ServerError(Status.INVALID_ARGUMENT, 'Username is too long'); } - if (!PNID_VALID_CHARACTERS_REGEX.test(username)) { + if (!checkNNIDUsernameValidCharacters(username)) { throw new ServerError(Status.INVALID_ARGUMENT, 'Username contains invalid characters'); } - if (PNID_PUNCTUATION_START_REGEX.test(username)) { + if (!checkNNIDUsernamePunctuationStart(username)) { throw new ServerError(Status.INVALID_ARGUMENT, 'Username cannot begin with punctuation characters'); } - if (PNID_PUNCTUATION_END_REGEX.test(username)) { + if (!checkNNIDUsernamePunctuationEnd(username)) { throw new ServerError(Status.INVALID_ARGUMENT, 'Username cannot end with punctuation characters'); } - if (PNID_PUNCTUATION_DUPLICATE_REGEX.test(username)) { + if (!checkNNIDUsernameDuplicate(username)) { throw new ServerError(Status.INVALID_ARGUMENT, 'Two or more punctuation characters cannot be used in a row'); } @@ -109,7 +111,7 @@ export async function register(request: RegisterRequest): Promise 16) { + if (!checkNNIDPasswordMinLength(password) || !checkNNIDPasswordMaxLength(password)) { throw new ServerError(Status.INVALID_ARGUMENT, 'Password must be between 6 and 16 characters long'); } @@ -117,11 +119,11 @@ export async function register(request: RegisterRequest): Promise