fix correct VAPID key loading and public key assignment when PEM files exist

This commit is contained in:
2026-07-28 23:21:35 +02:00
parent ad14499df0
commit b037434e89
2 changed files with 32 additions and 26 deletions
+28 -22
View File
@@ -20,38 +20,44 @@ logger = logging.getLogger(__name__)
# VAPID keys for push notifications # VAPID keys for push notifications
VAPID_PUBLIC_KEY = os.getenv('VAPID_PUBLIC_KEY', '') VAPID_PUBLIC_KEY = os.getenv('VAPID_PUBLIC_KEY', '')
VAPID_PRIVATE_KEY = os.getenv('VAPID_PRIVATE_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_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') VAPID_PUBLIC_PEM = os.path.join(os.path.dirname(__file__), 'vapid_public.pem')
# Auto-generate VAPID keys if none are provided # Load or auto-generate VAPID keys
if not VAPID_PUBLIC_KEY or not VAPID_PRIVATE_KEY: try:
try: from py_vapid import Vapid, b64urlencode
from py_vapid import Vapid, b64urlencode from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives import serialization
if not os.path.exists(VAPID_PRIVATE_PEM) or not os.path.exists(VAPID_PUBLIC_PEM):
vapid = Vapid() vapid = Vapid()
if not os.path.exists(VAPID_PRIVATE_PEM): vapid.generate_keys()
vapid.generate_keys() vapid.save_key(VAPID_PRIVATE_PEM)
vapid.save_key(VAPID_PRIVATE_PEM) vapid.save_public_key(VAPID_PUBLIC_PEM)
vapid.save_public_key(VAPID_PUBLIC_PEM) logger.info("Auto-generated new VAPID keys")
logger.info("Auto-generated new VAPID keys") else:
else: vapid = Vapid.from_file(VAPID_PRIVATE_PEM)
vapid = Vapid.from_file(VAPID_PRIVATE_PEM)
raw_pub = vapid.public_key.public_bytes( # Extract public key in standard uncompressed point format encoded in URL-safe base64
serialization.Encoding.X962, raw_pub = vapid.public_key.public_bytes(
serialization.PublicFormat.UncompressedPoint serialization.Encoding.X962,
) serialization.PublicFormat.UncompressedPoint
)
VAPID_PUBLIC_KEY = b64urlencode(raw_pub).decode('utf-8') VAPID_PUBLIC_KEY = b64urlencode(raw_pub).decode('utf-8')
VAPID_PRIVATE_KEY = VAPID_PRIVATE_PEM 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}') 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) # 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): def _get_username_hash(username):
+1 -1
View File
@@ -1371,8 +1371,8 @@
await loadLibraryItems(); // Daten neu laden await loadLibraryItems(); // Daten neu laden
// renderTable(); // Ggf. Tabelle neu rendern // renderTable(); // Ggf. Tabelle neu rendern
} else { } else {
closeEditLibraryModal();
await loadLibraryItems(); await loadLibraryItems();
closeEditLibraryModal();
} }
} catch (error) { } catch (error) {
console.error('Update failed:', error); console.error('Update failed:', error);