notification support

This commit is contained in:
Karl 2025-07-17 16:22:56 +01:00
parent 1e36958279
commit 2f68a82c33
3 changed files with 36 additions and 10 deletions

22
app.py
View File

@ -6,6 +6,7 @@ import requests.auth
import os
import base64
from typing import Dict, Any, Tuple, Union
from pywebpush import webpush, WebPushException
from lib.datetime import filter_accounts_next_30_days, filter_accounts_expired
from lib.reqs import (get_urls, get_user_accounts, add_user_account,
@ -90,6 +91,27 @@ def index() -> Union[Response, str]:
return redirect(url_for("home"))
return render_template("index.html")
@app.route('/vapid-public-key')
def vapid_public_key():
"""Provides the VAPID public key to the client."""
return jsonify({'public_key': app.config['VAPID_PUBLIC_KEY']})
@app.route('/save-subscription', methods=['POST'])
def save_subscription():
"""Saves a push notification subscription."""
if not session.get("logged_in"):
return jsonify({'error': 'Unauthorized'}), 401
subscription_data = request.get_json()
if not subscription_data:
return jsonify({'error': 'No subscription data received'}), 400
# Here you would typically save the subscription to a database
# For this example, we'll just store it in the session
session['push_subscription'] = subscription_data
print(f"Subscription saved for user: {session['username']}")
return jsonify({'success': True})
@app.route("/home")
@cache.cached(timeout=60)
def home() -> str:

Binary file not shown.

View File

@ -74,7 +74,10 @@
}
function subscribeUser(registration) {
const applicationServerKey = urlB64ToUint8Array('{{ config.VAPID_PUBLIC_KEY }}');
fetch('http://localhost:3001/vapid-public-key')
.then(response => response.json())
.then(data => {
const applicationServerKey = urlB64ToUint8Array(data.public_key);
registration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: applicationServerKey
@ -84,6 +87,7 @@
}).catch(function(err) {
console.log('Failed to subscribe the user: ', err);
});
});
}
function saveSubscription(subscription) {