from passlib.context import CryptContext # Password hashing context pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") def get_password_hash(password: str) -> str: """ Hash a plain text password """ # Truncate password to 72 bytes if needed (bcrypt limitation) if len(password.encode('utf-8')) > 72: password = password.encode('utf-8')[:72].decode('utf-8', errors='ignore') return pwd_context.hash(password) def verify_password(plain_password: str, hashed_password: str) -> bool: """ Verify a plain text password against its hash """ # Truncate password to 72 bytes if needed (bcrypt limitation) if len(plain_password.encode('utf-8')) > 72: plain_password = plain_password.encode('utf-8')[:72].decode('utf-8', errors='ignore') return pwd_context.verify(plain_password, hashed_password)