diff --git a/frigate/api/notification.py b/frigate/api/notification.py index 76197d436..de4e5770c 100644 --- a/frigate/api/notification.py +++ b/frigate/api/notification.py @@ -3,6 +3,7 @@ import logging import os +from cryptography.hazmat.primitives import serialization from flask import ( Blueprint, current_app, @@ -11,7 +12,7 @@ from flask import ( request, ) from peewee import DoesNotExist -from py_vapid import Vapid01 +from py_vapid import Vapid01, utils from frigate.const import CONFIG_DIR from frigate.models import User @@ -30,7 +31,10 @@ def get_vapid_pub_key(): ) key = Vapid01.from_file(os.path.join(CONFIG_DIR, "notifications.pem")) - return jsonify(key.public_key), 200 + raw_pub = key.public_key.public_bytes( + serialization.Encoding.X962, serialization.PublicFormat.UncompressedPoint + ) + return jsonify(utils.b64urlencode(raw_pub)), 200 @NotificationBp.route("/notifications/register", methods=["POST"]) diff --git a/web/src/views/settings/NotificationsSettingsView.tsx b/web/src/views/settings/NotificationsSettingsView.tsx index b1d6bad4a..449a80e81 100644 --- a/web/src/views/settings/NotificationsSettingsView.tsx +++ b/web/src/views/settings/NotificationsSettingsView.tsx @@ -13,6 +13,12 @@ const NOTIFICATION_SERVICE_WORKER = "notifications-worker.ts"; export default function NotificationView() { const { data: config } = useSWR("config"); + // notification key handling + + const { data: publicKey } = useSWR( + config?.notifications?.enabled ? "notifications/pubkey" : null, + ); + // notification state const [notificationsSubscribed, setNotificationsSubscribed] =