from pydantic import BaseModel import sqlite3 from pywebpush import webpush class PushSubscriptionData(BaseModel): endpoint: str 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, keys_p256dh TEXT NOT NULL, keys_auth TEXT NOT NULL );""") # --- subscribe def subscribe(data: PushSubscriptionData): cursor.execute("SELECT * FROM subscriptions WHERE endpoint = ?", (data.endpoint,)) row = cursor.fetchall() if len(row) > 0: return data.endpoint cursor.execute(""" INSERT INTO subscriptions (endpoint, keys_p256dh, keys_auth) VALUES (?, ?, ?)""", (data.endpoint, data.keys["p256dh"], data.keys["auth"])) conn.commit() return data.endpoint # --- send notification # ---- not used yet 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)