Files
tbcmap/validators.py

97 lines
3.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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, ''