Update username max/min lengths
This commit is contained in:
parent
a024ee4b96
commit
fbd7292663
3 changed files with 21 additions and 18 deletions
|
@ -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 },
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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', () => {
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue