Skip to content

Commit 5624f1e

Browse files
committed
fix(consts): refine Profile name and username regexes
1 parent 85cd08c commit 5624f1e

File tree

2 files changed

+41
-4
lines changed

2 files changed

+41
-4
lines changed

packages/consts/src/consts.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ export const USERNAME = {
116116

117117
// Regex matching a potentially allowed username. The numbers must match MIN and MAX!
118118
// Note that username must also pass isForbiddenUser() test to be allowed!
119-
REGEX: /^[a-zA-Z0-9_-]{3,30}$/,
119+
REGEX: /^[a-zA-Z0-9_.-]{3,30}$/,
120120
};
121121

122122
export const EMAIL = {
@@ -133,8 +133,8 @@ export const PROFILE_NAME = {
133133
MIN_LENGTH: 3,
134134
MAX_LENGTH: 50,
135135

136-
// Regex to prohibit anything that could potentially form an URL or email address.
137-
REGEX: /^[^/.@><]*$/,
136+
// Prohibits usage of @, <, > and :// in the name
137+
REGEX: /^(?!.*:\/\/)[^@><]*$/,
138138
};
139139

140140
/**

test/consts.test.ts

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,56 @@
1-
import { USERNAME, APIFY_ID_REGEX, ACTOR_ENV_VARS, ENV_VARS, APIFY_ENV_VARS, LOCAL_ACTOR_ENV_VARS, LOCAL_APIFY_ENV_VARS, LOCAL_ENV_VARS } from '@apify/consts';
1+
import {
2+
USERNAME,
3+
APIFY_ID_REGEX,
4+
ACTOR_ENV_VARS,
5+
ENV_VARS,
6+
APIFY_ENV_VARS,
7+
LOCAL_ACTOR_ENV_VARS,
8+
LOCAL_APIFY_ENV_VARS,
9+
LOCAL_ENV_VARS,
10+
PROFILE_NAME,
11+
} from '@apify/consts';
212
import { cryptoRandomObjectId } from '@apify/utilities';
313

414
describe('consts', () => {
515
describe('USERNAME', () => {
616
it('REGEX works as expected', () => {
717
expect(USERNAME.REGEX.test('anonymous')).toBe(true);
818
expect(USERNAME.REGEX.test('---')).toBe(true);
19+
expect(USERNAME.REGEX.test('john.doe')).toBe(true);
920
expect(USERNAME.REGEX.test('john')).toBe(true);
1021
expect(USERNAME.REGEX.test('john-doe')).toBe(true);
1122
expect(USERNAME.REGEX.test('JOHN_doe')).toBe(true);
23+
expect(USERNAME.REGEX.test('favicon.icox')).toBe(true);
24+
expect(USERNAME.REGEX.test('xfavicon.ico')).toBe(true);
1225
expect(USERNAME.REGEX.test('karl12345')).toBe(true);
1326
expect(USERNAME.REGEX.test('45678')).toBe(true);
1427
});
1528
});
1629

30+
describe('PROFILE_NAME', () => {
31+
it('REGEX works as expected', () => {
32+
// Valid cases
33+
expect(PROFILE_NAME.REGEX.test('John Doe')).toBe(true);
34+
expect(PROFILE_NAME.REGEX.test('Anonymous')).toBe(true);
35+
expect(PROFILE_NAME.REGEX.test('John123')).toBe(true);
36+
expect(PROFILE_NAME.REGEX.test('John-Doe')).toBe(true);
37+
expect(PROFILE_NAME.REGEX.test('Org_Example')).toBe(true);
38+
expect(PROFILE_NAME.REGEX.test(':/JohnDoe')).toBe(true);
39+
expect(PROFILE_NAME.REGEX.test(':/a/Simple.Name')).toBe(true);
40+
expect(PROFILE_NAME.REGEX.test('John:/Doe/')).toBe(true);
41+
expect(PROFILE_NAME.REGEX.test('Simple:.//Name')).toBe(true);
42+
expect(PROFILE_NAME.REGEX.test('Joh////:/n-Doe')).toBe(true);
43+
expect(PROFILE_NAME.REGEX.test('user:name')).toBe(true);
44+
45+
// Invalid cases
46+
expect(PROFILE_NAME.REGEX.test('user@name')).toBe(false);
47+
expect(PROFILE_NAME.REGEX.test('user>name')).toBe(false);
48+
expect(PROFILE_NAME.REGEX.test('user<name')).toBe(false);
49+
expect(PROFILE_NAME.REGEX.test('example://test')).toBe(false);
50+
expect(PROFILE_NAME.REGEX.test('example://////test')).toBe(false);
51+
});
52+
});
53+
1754
describe('APIFY_ID_REGEX', () => {
1855
it('matches testing apify IDs', () => {
1956
const testingStrings = {

0 commit comments

Comments
 (0)