fix correct VAPID key loading and public key assignment when PEM files exist
This commit is contained in:
@@ -20,19 +20,19 @@ 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)
|
||||||
@@ -40,18 +40,24 @@ if not VAPID_PUBLIC_KEY or not VAPID_PRIVATE_KEY:
|
|||||||
else:
|
else:
|
||||||
vapid = Vapid.from_file(VAPID_PRIVATE_PEM)
|
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(
|
raw_pub = vapid.public_key.public_bytes(
|
||||||
serialization.Encoding.X962,
|
serialization.Encoding.X962,
|
||||||
serialization.PublicFormat.UncompressedPoint
|
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:
|
except Exception as e:
|
||||||
logger.error(f'Could not load or generate VAPID keys: {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):
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user