""" 密码处理器委托层 此模块作为 Domain 层 (packages.domain.auth.password_hasher) 和 Application 层之间的委托层, 隔离 Domain 层对 bcrypt 库的直接依赖。 使用方式: from packages.application.auth.password_handler import PasswordHandler, get_password_handler password_handler = PasswordHandler() hashed = password_handler.hash_password("my_secure_password") is_valid = password_handler.verify_password("my_secure_password", hashed) """ from typing import Optional, Tuple from packages.application.auth.password_hasher import PasswordHasher, PasswordValidator class PasswordHandler: """ 密码处理器委托类 委托给 packages.domain.auth.password_hasher 进行实际的密码哈希操作, 此层仅负责配置和封装,不直接依赖 bcrypt 库。 """ def __init__(self, rounds: int = 12): """ 初始化密码处理器 Args: rounds: bcrypt cost factor(默认 12,推荐范围 10-14) """ self._hasher = PasswordHasher(rounds=rounds) self._validator = PasswordValidator( min_length=8, require_uppercase=True, require_lowercase=True, require_digit=True, require_special=False, ) def hash_password(self, password: str) -> str: """ 哈希密码 Args: password: 明文密码 Returns: bcrypt 哈希字符串 Raises: ValueError: 密码为空 """ return self._hasher.hash_password(password) def verify_password(self, password: str, hashed_password: str) -> bool: """ 验证密码 Args: password: 明文密码 hashed_password: 存储的哈希密码 Returns: True 如果密码正确,否则 False """ return self._hasher.verify_password(password, hashed_password) def needs_rehash(self, hashed_password: str) -> bool: """ 检查哈希是否需要重新计算 Args: hashed_password: 存储的哈希密码 Returns: True 如果需要重新哈希 """ return self._hasher.needs_rehash(hashed_password) def validate_strength(self, password: str) -> Tuple[bool, Optional[str]]: """ 验证密码强度 Args: password: 明文密码 Returns: (是否有效, 错误信息) """ return self._validator.validate(password) # 默认处理器实例 _default_handler: Optional[PasswordHandler] = None def configure_password_handler(rounds: int = 12) -> PasswordHandler: """ 配置全局密码处理器 Args: rounds: bcrypt cost factor Returns: 配置好的 PasswordHandler 实例 """ global _default_handler _default_handler = PasswordHandler(rounds=rounds) return _default_handler def get_password_handler() -> PasswordHandler: """ 获取全局密码处理器 Returns: PasswordHandler 实例 """ global _default_handler if _default_handler is None: _default_handler = PasswordHandler() return _default_handler