# 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, ''