Загрузить файлы в «/»
This commit is contained in:
96
validators.py
Normal file
96
validators.py
Normal 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, ''
|
||||
|
||||
Reference in New Issue
Block a user