mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-18 21:16:47 +00:00
feat(notifications): Web Push delivers notifications to every device, even with TREK closed
A fourth built-in channel next to email, webhook and ntfy. Browsers register per device, the server encrypts per RFC 8291 and signs per RFC 8292 with node:crypto and sends only to known push services through the SSRF guard. The event matrix decides per category what arrives by push; admins switch the channel on under Notifications. VAPID keys come from the environment or are generated once, only while neither stored row exists, and kept encrypted. A pair that does not decrypt or match is never overwritten and never swapped for another one: push stays off with an error in the log and every device stays registered until the key is fixed. The subject is VAPID_SUBJECT, then an https APP_URL, then the project URL. Only chat messages collapse into one notification per trip, and a replacement still alerts. A 403 removes a device only after three failures in a row; 404 and 410 remove it at once. Password change, reset and an admin setting a password drop the user's devices with the other credentials. The request log redacts subscriptions and endpoints, boot errors print *** for every secret variable, and logout forgets the device with a plain fetch so an expired session cannot redirect midway. Addresses discussion #894.
This commit is contained in:
@@ -125,6 +125,19 @@ const settings: TranslationStrings = {
|
||||
'settings.notificationPreferences.testFailed': 'Test failed.',
|
||||
'settings.notificationPreferences.pluginConfigured': 'Configured. Manage credentials on the plugin’s settings page.',
|
||||
'settings.notificationPreferences.ntfy': 'Ntfy',
|
||||
'settings.notificationPreferences.push': 'Push',
|
||||
'settings.webPush.title': 'Push notifications on this device',
|
||||
'settings.webPush.hint':
|
||||
'Shows TREK notifications on this device even while TREK is closed. Which events arrive follows the Push column.',
|
||||
'settings.webPush.enable': 'Turn on for this device',
|
||||
'settings.webPush.disable': 'Turn off for this device',
|
||||
'settings.webPush.enabled': 'On for this device',
|
||||
'settings.webPush.unsupported': 'This browser cannot receive push notifications.',
|
||||
'settings.webPush.insecure': 'Push needs TREK to be opened over HTTPS.',
|
||||
'settings.webPush.iosInstall': 'On iPhone and iPad, add TREK to the Home Screen first and open it from there.',
|
||||
'settings.webPush.denied':
|
||||
'Notifications are blocked for TREK in this browser. Allow them in the browser settings, then try again.',
|
||||
'settings.webPush.failed': 'Push could not be turned on for this device.',
|
||||
'settings.notificationPreferences.noChannels':
|
||||
'No notification channels are configured. Ask an admin to set up email or webhook notifications.',
|
||||
'settings.webhookUrl.label': 'Webhook URL',
|
||||
|
||||
Reference in New Issue
Block a user