Debug of Vapid Keys
This commit is contained in:
+16
-10
@@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user