release nouri 0.5.0 shopping rhythm pwa and reminders
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
from typing import Any
|
||||
|
||||
from flask import current_app
|
||||
|
||||
|
||||
def push_is_configured() -> bool:
|
||||
return bool(
|
||||
current_app.config.get("VAPID_PUBLIC_KEY")
|
||||
and current_app.config.get("VAPID_PRIVATE_KEY")
|
||||
and current_app.config.get("VAPID_SUBJECT")
|
||||
)
|
||||
|
||||
|
||||
def push_public_key() -> str | None:
|
||||
return current_app.config.get("VAPID_PUBLIC_KEY") or None
|
||||
|
||||
|
||||
def send_push_message(subscription: dict[str, Any], *, title: str, body: str, url: str) -> tuple[bool, str | None]:
|
||||
if not push_is_configured():
|
||||
return False, "Push ist noch nicht konfiguriert."
|
||||
|
||||
try:
|
||||
from pywebpush import WebPushException, webpush
|
||||
except Exception:
|
||||
return False, "Die Push-Bibliothek ist noch nicht installiert."
|
||||
|
||||
payload = json.dumps(
|
||||
{
|
||||
"title": title,
|
||||
"body": body,
|
||||
"url": url,
|
||||
"icon": "/static/brand/pwa-192.png",
|
||||
"badge": "/static/brand/pwa-badge.png",
|
||||
}
|
||||
)
|
||||
|
||||
try:
|
||||
webpush(
|
||||
subscription_info=subscription,
|
||||
data=payload,
|
||||
vapid_private_key=current_app.config["VAPID_PRIVATE_KEY"],
|
||||
vapid_claims={"sub": current_app.config["VAPID_SUBJECT"]},
|
||||
)
|
||||
except WebPushException as exc: # pragma: no cover - depends on live push endpoint
|
||||
return False, str(exc)
|
||||
|
||||
return True, None
|
||||
Reference in New Issue
Block a user