"""Utility functions""" from cryptography.fernet import Fernet, InvalidToken from app.config import settings import base64 def get_cipher(): """Get Fernet cipher for encryption""" # Use first 32 bytes of encryption key, base64 encoded key = settings.encryption_key.encode()[:32] # Pad to 32 bytes if needed key = key.ljust(32, b'0') # Base64 encode for Fernet key_b64 = base64.urlsafe_b64encode(key) return Fernet(key_b64) def encrypt_token(token: str) -> str: """Encrypt API token""" cipher = get_cipher() return cipher.encrypt(token.encode()).decode() def decrypt_token(encrypted_token: str) -> str: """Decrypt API token Raises: ValueError: If token cannot be decrypted (wrong encryption key) """ cipher = get_cipher() try: return cipher.decrypt(encrypted_token.encode()).decode() except InvalidToken: raise ValueError( "Не удалось расшифровать API токен. " "Возможно, ключ шифрования (ENCRYPTION_KEY) был изменен. " "Пожалуйста, обновите API токен для этого репозитория." )