Update username max/min lengths

This commit is contained in:
Scott Nonnenberg 2021-11-15 14:18:46 -08:00 committed by GitHub
parent a024ee4b96
commit fbd7292663
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 18 deletions

View file

@ -36,6 +36,7 @@ import {
} from './conversation/conversation-details/ConversationDetailsIcon'; } from './conversation/conversation-details/ConversationDetailsIcon';
import { Spinner } from './Spinner'; import { Spinner } from './Spinner';
import { UsernameSaveState } from '../state/ducks/conversationsEnums'; import { UsernameSaveState } from '../state/ducks/conversationsEnums';
import { MAX_USERNAME, MIN_USERNAME } from '../types/Username';
export enum EditState { export enum EditState {
None = 'None', None = 'None',
@ -124,26 +125,24 @@ function getUsernameInvalidKey(
return undefined; return undefined;
} }
const min = 3; if (username.length < MIN_USERNAME) {
if (username.length < min) {
return { return {
key: 'ProfileEditor--username--check-character-min', key: 'ProfileEditor--username--check-character-min',
replacements: { min }, replacements: { min: MIN_USERNAME },
}; };
} }
if (!/^[0-9a-z_]+$/.test(username)) { if (!/^[0-9a-z_]+$/.test(username)) {
return { key: 'ProfileEditor--username--check-characters' }; return { key: 'ProfileEditor--username--check-characters' };
} }
if (/^[0-9]/.test(username)) { if (!/^[a-z_]/.test(username)) {
return { key: 'ProfileEditor--username--check-starting-character' }; return { key: 'ProfileEditor--username--check-starting-character' };
} }
const max = 25; if (username.length > MAX_USERNAME) {
if (username.length > max) {
return { return {
key: 'ProfileEditor--username--check-character-max', key: 'ProfileEditor--username--check-character-max',
replacements: { max }, replacements: { max: MAX_USERNAME },
}; };
} }

View file

@ -12,20 +12,20 @@ describe('Username', () => {
it('matches invalid username searches', () => { it('matches invalid username searches', () => {
assert.strictEqual(getUsernameFromSearch('username!'), 'username!'); assert.strictEqual(getUsernameFromSearch('username!'), 'username!');
assert.strictEqual(getUsernameFromSearch('1username'), '1username'); assert.strictEqual(getUsernameFromSearch('1username'), '1username');
assert.strictEqual(getUsernameFromSearch('us'), 'us'); assert.strictEqual(getUsernameFromSearch('use'), 'use');
assert.strictEqual( assert.strictEqual(
getUsernameFromSearch('username901234567890123456'), getUsernameFromSearch('username9012345678901234567'),
'username901234567890123456' 'username9012345678901234567'
); );
}); });
it('matches valid username searches', () => { it('matches valid username searches', () => {
assert.strictEqual(getUsernameFromSearch('username_34'), 'username_34'); assert.strictEqual(getUsernameFromSearch('username_34'), 'username_34');
assert.strictEqual(getUsernameFromSearch('u5ername'), 'u5ername'); assert.strictEqual(getUsernameFromSearch('u5ername'), 'u5ername');
assert.strictEqual(getUsernameFromSearch('use'), 'use'); assert.strictEqual(getUsernameFromSearch('user'), 'user');
assert.strictEqual( assert.strictEqual(
getUsernameFromSearch('username90123456789012345'), getUsernameFromSearch('username901234567890123456'),
'username90123456789012345' 'username901234567890123456'
); );
}); });
@ -57,15 +57,16 @@ describe('Username', () => {
it('does not match invalid username searches', () => { it('does not match invalid username searches', () => {
assert.isFalse(isValidUsername('username!')); assert.isFalse(isValidUsername('username!'));
assert.isFalse(isValidUsername('1username')); assert.isFalse(isValidUsername('1username'));
assert.isFalse(isValidUsername('us')); assert.isFalse(isValidUsername('use'));
assert.isFalse(isValidUsername('username901234567890123456')); assert.isFalse(isValidUsername('username9012345678901234567'));
}); });
it('matches valid usernames', () => { it('matches valid usernames', () => {
assert.isTrue(isValidUsername('username_34')); assert.isTrue(isValidUsername('username_34'));
assert.isTrue(isValidUsername('u5ername')); assert.isTrue(isValidUsername('u5ername'));
assert.isTrue(isValidUsername('use')); assert.isTrue(isValidUsername('_username'));
assert.isTrue(isValidUsername('username90123456789012345')); assert.isTrue(isValidUsername('user'));
assert.isTrue(isValidUsername('username901234567890123456'));
}); });
it('does not match valid and invalid usernames with @ prefix or suffix', () => { it('does not match valid and invalid usernames with @ prefix or suffix', () => {

View file

@ -1,8 +1,11 @@
// Copyright 2021 Signal Messenger, LLC // Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-License-Identifier: AGPL-3.0-only
export const MAX_USERNAME = 26;
export const MIN_USERNAME = 4;
export function isValidUsername(searchTerm: string): boolean { export function isValidUsername(searchTerm: string): boolean {
return /^[a-z][0-9a-z_]{2,24}$/.test(searchTerm); return /^[a-z_][0-9a-z_]{3,25}$/.test(searchTerm);
} }
export function getUsernameFromSearch(searchTerm: string): string | undefined { export function getUsernameFromSearch(searchTerm: string): string | undefined {