This commit is contained in:
unknown 2025-10-23 04:24:32 +03:00
parent a014acd35d
commit d4981b23de
3 changed files with 23 additions and 3 deletions

View File

@ -157,6 +157,7 @@ def validate_username(value: str,
field_name: str = "login", field_name: str = "login",
with_httpexception=False, with_httpexception=False,
need_back=False, need_back=False,
is_bot=False,
min_length=3, min_length=3,
max_length=32, max_length=32,
error_status_code: int = status.HTTP_401_UNAUTHORIZED, error_status_code: int = status.HTTP_401_UNAUTHORIZED,
@ -169,7 +170,7 @@ def validate_username(value: str,
- no consecutive underscores - no consecutive underscores
- only [A-Za-z0-9_] - only [A-Za-z0-9_]
""" """
valid, result = core_validate_username(value, field_name, need_back=True, min_length=min_length, max_length=max_length) valid, result = core_validate_username(value, field_name, need_back=True, is_bot=is_bot, min_length=min_length, max_length=max_length)
if not valid: if not valid:
if with_httpexception: if with_httpexception:
raise HTTPException(status_code=error_status_code, detail=error_detail) raise HTTPException(status_code=error_status_code, detail=error_detail)

View File

@ -3,6 +3,7 @@ import re
def validate_username(value: str, def validate_username(value: str,
field_name: str = "login", field_name: str = "login",
need_back=False, need_back=False,
is_bot=False,
min_length=3, min_length=3,
max_length=32) -> str: max_length=32) -> str:
""" """
@ -38,7 +39,25 @@ def validate_username(value: str,
msg = f"{field_name.capitalize()} must contain only English letters, digits, and underscores" msg = f"{field_name.capitalize()} must contain only English letters, digits, and underscores"
return (False, msg) if need_back else False return (False, msg) if need_back else False
return (True, value.lower()) if need_back else value.lower() val_lower = value.lower()
# Проверка окончания имени в зависимости от is_bot
if is_bot and not val_lower.endswith("bot"):
msg = f"{field_name.capitalize()} must end with 'bot' for bot accounts"
return (False, msg) if need_back else False
if not is_bot and val_lower.endswith("bot"):
msg = f"{field_name.capitalize()} must not end with 'bot' for non-bot accounts"
return (False, msg) if need_back else False
# Если заканчивается на 'bot', то перед ним должно быть >=3 символов (кроме '_')
if val_lower.endswith("bot"):
prefix = re.sub(r'_+', '', val_lower[:-3]) # убираем все подчёркивания
if len(prefix) < 3:
msg = f"{field_name.capitalize()} must contain at least 3 non-underscore characters before 'bot'"
return (False, msg) if need_back else False
return (True, val_lower) if need_back else val_lower
def validate_password(value: str, def validate_password(value: str,

View File

@ -1,6 +1,6 @@
[project] [project]
name = "common-lib" name = "common-lib"
version = "0.0.34" version = "0.0.35"
description = "Библиотека общих компонентов для микросервисов yobble" description = "Библиотека общих компонентов для микросервисов yobble"
authors = [{ name = "cheykrym", email = "you@example.com" }] authors = [{ name = "cheykrym", email = "you@example.com" }]
license = "MIT" license = "MIT"