fix(push): fix VAPID key format and add regenerate endpoint + UI button
This commit is contained in:
@@ -428,6 +428,28 @@ const notifySecurityAlerts = ref(true);
|
||||
const savingNotifications = ref(false);
|
||||
const notificationsSaved = ref(false);
|
||||
|
||||
// VAPID key reset (admin)
|
||||
const vapidResetting = ref(false);
|
||||
const vapidResetMsg = ref("");
|
||||
const vapidResetError = ref(false);
|
||||
|
||||
async function resetVapidKeys() {
|
||||
if (!confirm("This will regenerate VAPID keys and clear all push subscriptions. You will need to re-enable notifications afterwards. Continue?")) return;
|
||||
vapidResetting.value = true;
|
||||
vapidResetMsg.value = "";
|
||||
vapidResetError.value = false;
|
||||
try {
|
||||
await apiPost("/api/push/reset-vapid", {});
|
||||
vapidResetMsg.value = "Keys regenerated. Please re-enable notifications in this browser.";
|
||||
pushStore.checkSubscription();
|
||||
} catch {
|
||||
vapidResetError.value = true;
|
||||
vapidResetMsg.value = "Reset failed — check server logs.";
|
||||
} finally {
|
||||
vapidResetting.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
// CalDAV settings (per-user)
|
||||
const caldav = ref({
|
||||
caldav_url: "",
|
||||
@@ -1882,6 +1904,22 @@ function formatUserDate(iso: string): string {
|
||||
Notifications are blocked. Allow them in your browser site settings to re-enable.
|
||||
</p>
|
||||
</template>
|
||||
<template v-if="authStore.isAdmin">
|
||||
<div class="field-divider" style="margin: 1rem 0;" />
|
||||
<p class="section-desc">
|
||||
If push notifications fail due to a corrupted or misformatted VAPID key, regenerate
|
||||
the key pair here. All existing subscriptions will be cleared — you will need to
|
||||
re-enable notifications in this browser afterwards.
|
||||
</p>
|
||||
<div class="actions" style="margin-top: 0.5rem;">
|
||||
<button class="btn-danger" :disabled="vapidResetting" @click="resetVapidKeys">
|
||||
{{ vapidResetting ? 'Regenerating…' : 'Regenerate VAPID Keys' }}
|
||||
</button>
|
||||
</div>
|
||||
<p v-if="vapidResetMsg" :class="vapidResetError ? 'field-error' : 'field-hint'" style="margin-top: 0.5rem;">
|
||||
{{ vapidResetMsg }}
|
||||
</p>
|
||||
</template>
|
||||
</section>
|
||||
|
||||
<section class="settings-section">
|
||||
|
||||
Reference in New Issue
Block a user