Загрузить файлы в «/»

This commit is contained in:
2025-11-06 11:52:28 +03:00
parent aea18b8a9d
commit fdee5b90f3
5 changed files with 295 additions and 0 deletions

96
validators.py Normal file
View File

@@ -0,0 +1,96 @@
# validators.py
"""
Модуль валидации данных пользователя
"""
import re
from typing import Tuple
from config import MIN_USERNAME_LENGTH, MIN_PASSWORD_LENGTH, MESSAGES, DEBUG_MODE
def debug_log(message: str) -> None:
"""Вывод отладочных сообщений"""
if DEBUG_MODE:
print(f"[DEBUG] {message}")
def validate_username(username: str) -> Tuple[bool, str]:
"""
Проверка логина на корректность
Args:
username: Логин пользователя
Returns:
Tuple[bool, str]: (валидность, сообщение об ошибке)
"""
debug_log(f"Проверка логина: '{username}'")
# Проверка на пустой логин
if not username or username.strip() == '':
debug_log("Ошибка: пустой логин")
return False, MESSAGES['error_empty_username']
# Проверка на минимальную длину
if len(username) < MIN_USERNAME_LENGTH:
debug_log(f"Ошибка: логин слишком короткий ({len(username)} символов)")
return False, MESSAGES['error_short_username']
debug_log("Логин прошел валидацию")
return True, ''
def validate_password(password: str) -> Tuple[bool, str]:
"""
Проверка пароля на соответствие требованиям:
- Минимум 8 символов
- Хотя бы одна латинская буква (a-z или A-Z)
- Хотя бы одна цифра (0-9)
- Любые другие символы разрешены
Args:
password: Пароль пользователя
Returns:
Tuple[bool, str]: (валидность, сообщение об ошибке)
"""
debug_log(f"Проверка пароля (длина: {len(password)})")
# Проверка минимальной длины
if len(password) < MIN_PASSWORD_LENGTH:
debug_log(f"Ошибка: пароль слишком короткий ({len(password)} символов)")
return False, MESSAGES['error_invalid_password_format']
# Проверка наличия латинских букв
if not re.search(r'[a-zA-Z]', password):
debug_log("Ошибка: пароль не содержит латинских букв")
return False, MESSAGES['error_invalid_password_format']
# Проверка наличия цифр
if not re.search(r'\d', password):
debug_log("Ошибка: пароль не содержит цифр")
return False, MESSAGES['error_invalid_password_format']
debug_log("Пароль прошел валидацию")
return True, ''
def validate_password_confirmation(password: str, password_confirm: str) -> Tuple[bool, str]:
"""
Проверка совпадения пароля и его подтверждения
Args:
password: Пароль
password_confirm: Подтверждение пароля
Returns:
Tuple[bool, str]: (валидность, сообщение об ошибке)
"""
debug_log("Проверка совпадения паролей")
if password != password_confirm:
debug_log("Ошибка: пароли не совпадают")
return False, MESSAGES['error_passwords_mismatch']
debug_log("Пароли совпадают")
return True, ''