summaryrefslogtreecommitdiff
path: root/backend/notif.py
diff options
context:
space:
mode:
authoraltaf-creator <dev@altafcreator.com>2025-12-29 20:25:08 +0800
committeraltaf-creator <dev@altafcreator.com>2025-12-29 20:25:08 +0800
commit9080a0c516378dbb94c5178fbc26a8131a530263 (patch)
tree5f3aff1737d00ab01852daea742f1c5dfe982b1d /backend/notif.py
parent37b76b0f4c8e65b35bbbc617bcbff7a5d637ac3e (diff)
new notif everything
Diffstat (limited to 'backend/notif.py')
-rw-r--r--backend/notif.py59
1 files changed, 59 insertions, 0 deletions
diff --git a/backend/notif.py b/backend/notif.py
new file mode 100644
index 0000000..59bb3c3
--- /dev/null
+++ b/backend/notif.py
@@ -0,0 +1,59 @@
+from pydantic import BaseModel
+import sqlite3
+from pywebpush import webpush
+
+
+class PushSubscriptionData(BaseModel):
+ endpoint: str
+ expirationTime: float
+ keys: object
+
+
+conn = sqlite3.connect("db.db", check_same_thread=False)
+cursor = conn.cursor()
+
+f = open("private_key.pem", "r")
+PRIVATE_VAPID_KEY = f.read()
+f.close()
+
+cursor.execute("""
+CREATE TABLE IF NOT EXISTS subscriptions (
+ endpoint TEXT PRIMARY KEY,
+ expiration_time REAL NOT NULL,
+ keys_p256dh TEXT NOT NULL,
+ keys_auth TEXT NOT NULL
+);""")
+
+
+# --- subscribe
+def subscribe(data: PushSubscriptionData):
+ cursor.execute("""
+ INSERT INTO subscriptions (endpoint, expiration_time, keys_p256dh, keys_auth)
+ VALUES (?, ?, ?, ?)""", (data.endpoint, data.expirationTime, data.keys["p256dh"], data.keys["auth"]))
+ conn.commit()
+ return data.endpoint
+
+
+# --- send notification
+def send_notification(endpoint: str):
+ cursor.execute("SELECT * FROM subscriptions WHERE endpoint = ?", (endpoint,))
+ row = cursor.fetchall()[0]
+ subscription_info = {
+ "endpoint": endpoint,
+ "keys": {
+ "p256dh": row[2],
+ "auth": row[3],
+ },
+ }
+
+ try:
+ webpush(
+ subscription_info=subscription_info,
+ data="Hello, world!",
+ vapid_private_key=PRIVATE_VAPID_KEY,
+ vapid_claims={
+ "sub": "mailto:dev@altafcreator.com",
+ },
+ )
+ except Exception as exception:
+ print(exception)