From: Chris Fulljames Date: Sat, 12 Jul 2025 16:07:21 +0000 (-0400) Subject: Add automatic push renewal (untested) X-Git-Url: https://littlesong.place/gitweb/?a=commitdiff_plain;h=d4769c2383f23aeca1f9bf54ab45ed4a42c51144;p=littlesongplace.git Add automatic push renewal (untested) --- diff --git a/src/littlesongplace/push_notifications.py b/src/littlesongplace/push_notifications.py index 59e55a6..1cd1960 100644 --- a/src/littlesongplace/push_notifications.py +++ b/src/littlesongplace/push_notifications.py @@ -35,6 +35,27 @@ def subscribe(): return {"status": "success", "subid": row["subid"]} +@bp.post("/update-subscription/") +@auth.requires_login +def update_subscription(subid): + if not request.json: + # Request must contain valid subscription JSON + abort(400) + + row = db.query( + """ + UPDATE users_push_subscriptions + SET subscription = ? + WHERE subid = ? AND userid = ? + RETURNING subid + """, + [json.dumps(request.json), subid, g.userid], expect_one=True) + db.commit() + + current_app.logger.info(f"{g.username} updated push subscription") + + return {"status": "success", "subid": row["subid"]} + @bp.get("/settings") @auth.requires_login def get_settings(): diff --git a/src/littlesongplace/static/service.js b/src/littlesongplace/static/service.js index 30da09d..f1e53e2 100644 --- a/src/littlesongplace/static/service.js +++ b/src/littlesongplace/static/service.js @@ -6,4 +6,20 @@ self.addEventListener("push", (event) => { } }); +self.addEventListener("pushsubscriptionchanged", (event) => { + console.log("Subscription expired"); + event.waitUntil( + self.registration.pushManager.subscribe({ userVisibleOnly: true }) + .then((subscription) => { + console.log("Register new subscription"); + const subid = window.localStorage.getItem("subid"); + return fetch(`/push-notifications/update-subscription/${subid}`, { + method: "post", + headers: {"Content-Type": "application/json"}, + body: JSON.stringify(subscription) + }); + }); + ); +}); + // TODO: handle notificationclick event