From 8f8a46d17d2f1ac909c8c96c668e727e1e4032e1 Mon Sep 17 00:00:00 2001 From: vvzvlad Date: Mon, 10 Feb 2025 05:37:33 +0300 Subject: [PATCH] Refactor URL signing key management into a class-based approach --- url_signer.py | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/url_signer.py b/url_signer.py index a27df0c..0eefca7 100644 --- a/url_signer.py +++ b/url_signer.py @@ -6,37 +6,35 @@ from config import get_settings Config = get_settings() -SECRET_FILE = "data/media_digest.key" -_signing_key = None +class KeyManager: + SECRET_FILE = "data/media_digest.key" + signing_key = None -def get_or_create_signing_key() -> str: - """ - Get existing signing key from memory, secret file or generate a new one - """ - global _signing_key - - if _signing_key is not None: - return _signing_key + @classmethod + def get_or_create_signing_key(cls) -> str: + """ + Get existing signing key from memory, secret file or generate a new one + """ + if cls.signing_key is not None: + return cls.signing_key - if os.path.exists(SECRET_FILE): - with open(SECRET_FILE, 'r', encoding='utf-8') as f: - _signing_key = f.read().strip() - return _signing_key - - # Generate new key if file doesn't exist - _signing_key = secrets.token_hex(32) - - # Save to file - with open(SECRET_FILE, 'w', encoding='utf-8') as f: - f.write(_signing_key) + if os.path.exists(cls.SECRET_FILE): + with open(cls.SECRET_FILE, 'r', encoding='utf-8') as f: + cls.signing_key = f.read().strip() + return cls.signing_key - return _signing_key + cls.signing_key = secrets.token_hex(32) # Generate new key if file doesn't exist + + with open(cls.SECRET_FILE, 'w', encoding='utf-8') as f: + f.write(cls.signing_key) # Save to file + + return cls.signing_key def generate_media_digest(url: str) -> str: """ Generate short HMAC digest (first 8 chars) for media URL using SHA1 """ - signing_key = get_or_create_signing_key() + signing_key = KeyManager.get_or_create_signing_key() message = url.encode('utf-8') key = signing_key.encode('utf-8')