Make notifications config only

This commit is contained in:
Nicolas Mowen 2024-07-20 13:24:20 -06:00
parent 6fbab846af
commit 242c254cce
4 changed files with 15 additions and 28 deletions

View File

@ -26,6 +26,9 @@ class WebPushClient(Communicator): # type: ignore[misc]
self.claim_headers = None self.claim_headers = None
self.web_pushers: list[WebPusher] = [] self.web_pushers: list[WebPusher] = []
if not self.config.notifications.email:
logger.warning("Email must be provided for push notifications to be sent.")
# Pull keys from PEM or generate if they do not exist # Pull keys from PEM or generate if they do not exist
self.vapid = Vapid01.from_file(os.path.join(CONFIG_DIR, "notifications.pem")) self.vapid = Vapid01.from_file(os.path.join(CONFIG_DIR, "notifications.pem"))
@ -44,12 +47,15 @@ class WebPushClient(Communicator): # type: ignore[misc]
self.send_message(json.loads(payload)) self.send_message(json.loads(payload))
def send_message(self, payload: dict[str, any]) -> None: def send_message(self, payload: dict[str, any]) -> None:
if not self.config.notifications.email:
return
# check for valid claim or create new one # check for valid claim or create new one
now = datetime.datetime.now().timestamp() now = datetime.datetime.now().timestamp()
if self.claim is None or self.claim["exp"] < now: if self.claim is None or self.claim["exp"] < now:
# create new claim # create new claim
self.claim = { self.claim = {
"sub": "mailto:test@example.com", "sub": f"mailto:{self.config.notifications.email}",
"aud": "https://fcm.googleapis.com", "aud": "https://fcm.googleapis.com",
"exp": ( "exp": (
datetime.datetime.now() + datetime.timedelta(hours=1) datetime.datetime.now() + datetime.timedelta(hours=1)

View File

@ -171,8 +171,8 @@ class AuthConfig(FrigateBaseModel):
class NotificationConfig(FrigateBaseModel): class NotificationConfig(FrigateBaseModel):
enabled: bool = Field(default=False, title="Enable notifications") enabled: bool = Field(default=False, title="Enable notifications")
base_url: Optional[str] = Field( email: Optional[str] = Field(
default=None, title="Base url for notification link and image." default=None, title="Email required for push."
) )

View File

@ -60,13 +60,17 @@ export default function Settings() {
const settingsViews = useMemo(() => { const settingsViews = useMemo(() => {
const views = [...allSettingsViews]; const views = [...allSettingsViews];
if (!("Notification" in window) || !window.isSecureContext) { if (
!("Notification" in window) ||
!window.isSecureContext ||
!config?.notifications.enabled
) {
const index = views.indexOf("notifications"); const index = views.indexOf("notifications");
views.splice(index, 1); views.splice(index, 1);
} }
return views; return views;
}, []); }, [config]);
// TODO: confirm leave page // TODO: confirm leave page
const [unsavedChanges, setUnsavedChanges] = useState(false); const [unsavedChanges, setUnsavedChanges] = useState(false);

View File

@ -1,8 +1,6 @@
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import Heading from "@/components/ui/heading"; import Heading from "@/components/ui/heading";
import { Label } from "@/components/ui/label";
import { Toaster } from "@/components/ui/sonner"; import { Toaster } from "@/components/ui/sonner";
import { Switch } from "@/components/ui/switch";
import { FrigateConfig } from "@/types/frigateConfig"; import { FrigateConfig } from "@/types/frigateConfig";
import axios from "axios"; import axios from "axios";
import { useCallback, useEffect, useState } from "react"; import { useCallback, useEffect, useState } from "react";
@ -69,27 +67,6 @@ export default function NotificationView() {
Notification Settings Notification Settings
</Heading> </Heading>
<div className="mt-2 space-y-6">
<div className="space-y-3">
<div className="flex flex-row items-center justify-start gap-2">
<Switch
id="auto-live"
checked={config?.notifications?.enabled}
onCheckedChange={() => {}}
/>
<Label className="cursor-pointer" htmlFor="auto-live">
Notifications
</Label>
</div>
<div className="my-2 text-sm text-muted-foreground">
<p>
Enable notifications for Frigate alerts. This requires Frigate
to be externally accessible.
</p>
</div>
</div>
</div>
{config?.notifications.enabled && ( {config?.notifications.enabled && (
<div className="mt-2 space-y-6"> <div className="mt-2 space-y-6">
<div className="space-y-3"> <div className="space-y-3">