Debug of Vapid Keys

This commit is contained in:
2026-07-29 13:35:15 +02:00
parent 8e6dd17243
commit 5a2d703bc7
2 changed files with 26 additions and 16 deletions
+16 -10
View File
@@ -122,29 +122,33 @@ def get_user_subscriptions(username):
def save_push_subscription(username, subscription_obj): def save_push_subscription(username, subscription_obj):
"""Save a new push subscription for a user with field-level encryption.""" import traceback # Hilft uns, Fehler genau zu sehen
try: try:
print("--- DEBUG PUSH PAYLOAD ---")
print(subscription_obj)
endpoint = subscription_obj.get('endpoint') endpoint = subscription_obj.get('endpoint')
keys = subscription_obj.get('keys', {}) keys = subscription_obj.get('keys', {})
if not endpoint or not keys.get('p256dh') or not keys.get('auth'): if not endpoint or not keys.get('p256dh') or not keys.get('auth'):
logger.warning(f'Invalid subscription object for {username}: missing endpoint or keys') print(
f"DEBUG FEHLER: Keys fehlen! Endpoint: {bool(endpoint)}, p256dh: {bool(keys.get('p256dh'))}, auth: {bool(keys.get('auth'))}")
return False return False
client = MongoClient(cfg.MONGODB_HOST, cfg.MONGODB_PORT) client = MongoClient(cfg.MONGODB_HOST, cfg.MONGODB_PORT)
db = client[cfg.MONGODB_DB] db = client[cfg.MONGODB_DB]
subs_col = get_push_subscriptions_collection(db) subs_col = get_push_subscriptions_collection(db)
# Create unique hash of subscription using plaintext data to avoid duplicates # Create unique hash of subscription using plaintext data to avoid duplicates
sub_hash = hashlib.shake_256( sub_hash = hashlib.shake_256(
f"{username}:{endpoint}".encode('utf-8') f"{username}:{endpoint}".encode('utf-8')
).hexdigest() ).hexdigest()
# Check if subscription already exists by Hash # Check if subscription already exists by Hash
existing = subs_col.find_one({ existing = subs_col.find_one({
'SubscriptionHash': sub_hash 'SubscriptionHash': sub_hash
}) })
if existing: if existing:
subs_col.update_one( subs_col.update_one(
{'_id': existing['_id']}, {'_id': existing['_id']},
@@ -156,10 +160,10 @@ def save_push_subscription(username, subscription_obj):
logger.info('Updated existing push subscription') logger.info('Updated existing push subscription')
client.close() client.close()
return True return True
# Format keys as JSON string for your encrypt_text module # Format keys as JSON string for your encrypt_text module
keys_str = json.dumps(subscription_obj.get('keys', {})) keys_str = json.dumps(subscription_obj.get('keys', {}))
# Save new subscription, encrypting sensitive fields # Save new subscription, encrypting sensitive fields
subscription_doc = { subscription_doc = {
'UsernameHash': _get_username_hash(username), 'UsernameHash': _get_username_hash(username),
@@ -172,14 +176,16 @@ def save_push_subscription(username, subscription_obj):
'LastUsed': datetime.datetime.now(), 'LastUsed': datetime.datetime.now(),
'UserAgent': subscription_obj.get('userAgent', ''), 'UserAgent': subscription_obj.get('userAgent', ''),
} }
subs_col.insert_one(subscription_doc) subs_col.insert_one(subscription_doc)
logger.info('Saved new encrypted push subscription') logger.info('Saved new encrypted push subscription')
client.close() client.close()
return True return True
except Exception as e: except Exception as e:
logger.error(f'Error saving push subscription: {e}') print(f"DEBUG ABSTURZ in save_push_subscription: {e}")
traceback.print_exc()
return False return False
+10 -6
View File
@@ -161,15 +161,19 @@ class PushNotificationManager {
try { try {
const subscription = await this.serviceWorkerRegistration.pushManager.getSubscription(); const subscription = await this.serviceWorkerRegistration.pushManager.getSubscription();
if (!subscription) { if (!subscription) {
console.warn('No active push subscription'); return true;
return true; // Bereits deaktiviert
} }
// Best-Effort: Dem Server Bescheid geben (wir ignorieren absichtlich, // Best-Effort: Server benachrichtigen (Eigener try/catch Block!)
// falls der Server das Abo nicht mehr kennt) try {
await this.removeSubscriptionFromServer(subscription); await this.removeSubscriptionFromServer(subscription);
} catch (serverError) {
// Fehler vom Server ignorieren wir absichtlich.
// Das Skript läuft weiter, statt hier abzubrechen!
console.warn('Server-Abmeldung fehlgeschlagen, lösche lokal trotzdem:', serverError);
}
// WICHTIG: Das Abo im Browser immer zwingend löschen! // WICHTIG: Das hier wird jetzt garantiert ausgeführt
await subscription.unsubscribe(); await subscription.unsubscribe();
return true; return true;