From 411ba4920358aef3f221910150d926a99e34a5ae Mon Sep 17 00:00:00 2001 From: Kit La Touche Date: Wed, 23 Jul 2025 21:34:32 -0400 Subject: Wire together notifs --- src/push/handlers/mod.rs | 19 ++++++++++++++++--- ui/routes/+layout.svelte | 12 ++++++++---- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/push/handlers/mod.rs b/src/push/handlers/mod.rs index 05249c2..afa76e0 100644 --- a/src/push/handlers/mod.rs +++ b/src/push/handlers/mod.rs @@ -35,10 +35,14 @@ pub async fn echo( Json(echo): Json, ) -> Result<(), crate::error::Internal> { // Look this up from a subscription record? Or get it from the client and trust? - let endpoint = "https://updates.push.services.mozilla.com/wpush/v1/..."; + let endpoint = echo.endpoint; // Get these from client: - let p256dh = "key_from_browser_as_base64"; - let auth = "auth_from_browser_as_base64"; + let p256dh = echo.keys.p256dh; + let auth = echo.keys.auth; + + println!("endpoint: {:?}", endpoint); + println!("p256dh: {:?}", p256dh); + println!("auth: {:?}", auth); // You would likely get this by deserializing a browser `pushSubscription` object. let subscription_info = SubscriptionInfo::new(endpoint, p256dh, auth); @@ -63,7 +67,16 @@ pub async fn echo( } +#[derive(serde::Deserialize)] +pub struct Keys { + pub p256dh: String, + pub auth: String, +} + #[derive(serde::Deserialize)] pub struct Echo { pub msg: String, + pub endpoint: String, + pub expirationTime: Option, + pub keys: Keys, } diff --git a/ui/routes/+layout.svelte b/ui/routes/+layout.svelte index 0910c16..a1f8d84 100644 --- a/ui/routes/+layout.svelte +++ b/ui/routes/+layout.svelte @@ -6,6 +6,8 @@ import logo from '$lib/assets/logo.png'; /* ==================== Start subscription library-esque ==================== */ + let subscriptionJson = $state(null); + function doSubscribe() { navigator.serviceWorker.ready .then(async(registration) => { @@ -23,12 +25,11 @@ applicationServerKey: convertedVapidKey }); }).then((subscription) => { - debugger; - console.debug("Subscribed", subscription.endpoint); + subscriptionJson = JSON.parse(JSON.stringify(subscription)); return fetch("/api/register", { method: "post", headers: { "Content-type": "application/json" }, - body: JSON.stringify({ subscription: subscription }) + body: JSON.stringify(subscriptionJson), }); }); } @@ -54,7 +55,10 @@ fetch("/api/echo", { method: "post", headers: { "Content-type": "application/json" }, - body: JSON.stringify({ msg: "oople doople" }) + body: JSON.stringify({ + ...subscriptionJson, + msg: "oople doople", + }) }); } -- cgit v1.2.3