diff --git a/Web/push_notifications.py b/Web/push_notifications.py index 22528b0..b1a0d0b 100644 --- a/Web/push_notifications.py +++ b/Web/push_notifications.py @@ -20,38 +20,44 @@ logger = logging.getLogger(__name__) # VAPID keys for push notifications VAPID_PUBLIC_KEY = os.getenv('VAPID_PUBLIC_KEY', '') VAPID_PRIVATE_KEY = os.getenv('VAPID_PRIVATE_KEY', '') -VAPID_SUBJECT = os.getenv('VAPID_SUBJECT', f'mailto:admin@{os.getenv("SERVER_NAME", "localhost")}') +VAPID_SUBJECT = os.getenv('VAPID_SUBJECT', f'mailto:support@invario-software.de') +# VAPID keys file paths VAPID_PRIVATE_PEM = os.path.join(os.path.dirname(__file__), 'vapid_private.pem') VAPID_PUBLIC_PEM = os.path.join(os.path.dirname(__file__), 'vapid_public.pem') -# Auto-generate VAPID keys if none are provided -if not VAPID_PUBLIC_KEY or not VAPID_PRIVATE_KEY: - try: - from py_vapid import Vapid, b64urlencode - from cryptography.hazmat.primitives import serialization - +# Load or auto-generate VAPID keys +try: + from py_vapid import Vapid, b64urlencode + from cryptography.hazmat.primitives import serialization + + if not os.path.exists(VAPID_PRIVATE_PEM) or not os.path.exists(VAPID_PUBLIC_PEM): vapid = Vapid() - if not os.path.exists(VAPID_PRIVATE_PEM): - vapid.generate_keys() - vapid.save_key(VAPID_PRIVATE_PEM) - vapid.save_public_key(VAPID_PUBLIC_PEM) - logger.info("Auto-generated new VAPID keys") - else: - vapid = Vapid.from_file(VAPID_PRIVATE_PEM) - - raw_pub = vapid.public_key.public_bytes( - serialization.Encoding.X962, - serialization.PublicFormat.UncompressedPoint - ) - - VAPID_PUBLIC_KEY = b64urlencode(raw_pub).decode('utf-8') - VAPID_PRIVATE_KEY = VAPID_PRIVATE_PEM - except Exception as e: - logger.error(f'Could not load or generate VAPID keys: {e}') + vapid.generate_keys() + vapid.save_key(VAPID_PRIVATE_PEM) + vapid.save_public_key(VAPID_PUBLIC_PEM) + logger.info("Auto-generated new VAPID keys") + else: + vapid = Vapid.from_file(VAPID_PRIVATE_PEM) + + # Extract public key in standard uncompressed point format encoded in URL-safe base64 + raw_pub = vapid.public_key.public_bytes( + serialization.Encoding.X962, + serialization.PublicFormat.UncompressedPoint + ) + + VAPID_PUBLIC_KEY = b64urlencode(raw_pub).decode('utf-8') + VAPID_PRIVATE_KEY = VAPID_PRIVATE_PEM # pywebpush accepts the file path to the private PEM + +except Exception as e: + logger.error(f'Could not load or generate VAPID keys: {e}') + VAPID_PUBLIC_KEY = os.getenv('VAPID_PUBLIC_KEY', '') + VAPID_PRIVATE_KEY = os.getenv('VAPID_PRIVATE_KEY', '') + +VAPID_SUBJECT = os.getenv('VAPID_SUBJECT', 'mailto:support@invario-software.de') # Push service endpoint (typically Firebase or Web Push Service) -FCM_API_KEY = os.getenv('FCM_API_KEY', '') # Firebase API key +FCM_API_KEY = os.getenv('FCM_API_KEY', '') def _get_username_hash(username): diff --git a/Web/templates/library_table.html b/Web/templates/library_table.html index 6296c5b..bc1d773 100644 --- a/Web/templates/library_table.html +++ b/Web/templates/library_table.html @@ -1371,8 +1371,8 @@ await loadLibraryItems(); // Daten neu laden // renderTable(); // Ggf. Tabelle neu rendern } else { - closeEditLibraryModal(); await loadLibraryItems(); + closeEditLibraryModal(); } } catch (error) { console.error('Update failed:', error);