From 550e2b4373d80b67d1d3286c606c6cf74e51a191 Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Fri, 8 Mar 2024 12:48:42 +0100 Subject: [PATCH] Link: Fix incorrent parsing for invite links (#4342) --- src/components/common/UsernameInput.tsx | 6 +++--- src/util/deepLinkParser.ts | 5 +---- src/util/username.ts | 10 ++++++---- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/components/common/UsernameInput.tsx b/src/components/common/UsernameInput.tsx index f44492f3a..b500a35de 100644 --- a/src/components/common/UsernameInput.tsx +++ b/src/components/common/UsernameInput.tsx @@ -7,7 +7,7 @@ import { getActions } from '../../global'; import { TME_LINK_PREFIX } from '../../config'; import { debounce } from '../../util/schedulers'; import { - isUsernameValid, MAX_USERNAME_LENGTH, MIN_USERNAME_LENGTH, USERNAME_REGEX, + isUsernameValid, MAX_USERNAME_LENGTH, MIN_UPDATE_USERNAME_LENGTH, USERNAME_REGEX, } from '../../util/username'; import useLang from '../../hooks/useLang'; @@ -53,7 +53,7 @@ const UsernameInput: FC = ({ return []; } - if (username.length < MIN_USERNAME_LENGTH) { + if (username.length < MIN_UPDATE_USERNAME_LENGTH) { return [undefined, lang(`${langPrefix}InvalidShort`)]; } if (username.length > MAX_USERNAME_LENGTH) { @@ -92,7 +92,7 @@ const UsernameInput: FC = ({ setUsername(newUsername); - const isValid = newUsername === '' ? true : isUsernameValid(newUsername); + const isValid = newUsername === '' ? true : isUsernameValid(newUsername, true); if (!isValid) return; onChange?.(newUsername); diff --git a/src/util/deepLinkParser.ts b/src/util/deepLinkParser.ts index a59e4c988..8d8fddcb3 100644 --- a/src/util/deepLinkParser.ts +++ b/src/util/deepLinkParser.ts @@ -2,6 +2,7 @@ import type { ThreadId } from '../types'; import { RE_TG_LINK, RE_TME_LINK } from '../config'; import { ensureProtocol } from './ensureProtocol'; +import { isUsernameValid } from './username'; export type DeepLinkMethod = 'resolve' | 'login' | 'passport' | 'settings' | 'join' | 'addstickers' | 'addemoji' | 'setlanguage' | 'addtheme' | 'confirmphone' | 'socks' | 'proxy' | 'privatepost' | 'bg' | 'share' | 'msg' | 'msg_url' | @@ -492,7 +493,3 @@ function getPathParams(url: URL) { function getQueryParams(url: URL) { return Object.fromEntries(url.searchParams); } - -function isUsernameValid(username: string) { - return /^\D([a-zA-Z0-9_]){1,64}$/.test(username); -} diff --git a/src/util/username.ts b/src/util/username.ts index e4ff590a8..174597319 100644 --- a/src/util/username.ts +++ b/src/util/username.ts @@ -1,9 +1,11 @@ -export const MIN_USERNAME_LENGTH = 5; +export const MIN_USERNAME_LENGTH = 3; // Some bots have 3-letter usernames +export const MIN_UPDATE_USERNAME_LENGTH = 5; // 4 letter usernames are only available on Fragment export const MAX_USERNAME_LENGTH = 32; -export const USERNAME_REGEX = /^\D([a-zA-Z0-9_]+)$/; +export const USERNAME_REGEX = /^[a-zA-Z]\w+$/; -export function isUsernameValid(username: string) { - return username.length >= MIN_USERNAME_LENGTH +export function isUsernameValid(username: string, isUpdating?: boolean) { + const minUsernameLength = isUpdating ? MIN_UPDATE_USERNAME_LENGTH : MIN_USERNAME_LENGTH; + return username.length >= minUsernameLength && username.length <= MAX_USERNAME_LENGTH && USERNAME_REGEX.test(username); }