40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
from cryptography.fernet import Fernet
|
|
from flask import Flask
|
|
|
|
|
|
class SimpleEncryption:
|
|
def __init__(self, app: Flask = None):
|
|
self.app = app
|
|
self.fernet = None
|
|
if app is not None:
|
|
self.init_app(app)
|
|
|
|
def init_app(self, app: Flask):
|
|
self.app = app
|
|
encryption_key = app.config.get('API_ENCRYPTION_KEY')
|
|
if not encryption_key:
|
|
raise ValueError("ENCRYPTION_KEY is not set in the app configuration")
|
|
self.fernet = Fernet(encryption_key.encode())
|
|
|
|
# Optionally log the initialization (similar to your current setup)
|
|
app.logger.info('SimpleEncryption initialized')
|
|
|
|
def encrypt_api_key(self, api_key: str) -> str:
|
|
if not self.fernet:
|
|
raise RuntimeError("SimpleEncryption is not initialized. Call init_app first.")
|
|
return self.fernet.encrypt(api_key.encode()).decode()
|
|
|
|
def decrypt_api_key(self, encrypted_api_key: str) -> str:
|
|
if not self.fernet:
|
|
raise RuntimeError("SimpleEncryption is not initialized. Call init_app first.")
|
|
return self.fernet.decrypt(encrypted_api_key.encode()).decode()
|
|
|
|
@staticmethod
|
|
def generate_key() -> str:
|
|
"""Generate a new Fernet key."""
|
|
return Fernet.generate_key().decode()
|
|
|
|
# Usage:
|
|
# from common.utils.simple_encryption import simple_encryption
|
|
# simple_encryption.init_app(app)
|