From 33c8af61caab0c41a8e86b57c2e412edec69ec18 Mon Sep 17 00:00:00 2001 From: Karl Date: Fri, 18 Jul 2025 16:18:18 +0100 Subject: [PATCH] proxy to backend --- app.py | 67 ++++++++++++---------------------------------------------- 1 file changed, 13 insertions(+), 54 deletions(-) diff --git a/app.py b/app.py index 8949d29..261c7a2 100644 --- a/app.py +++ b/app.py @@ -9,7 +9,6 @@ from typing import Dict, Any, Tuple, Union import sys import redis import json -from pywebpush import webpush, WebPushException import mysql.connector from lib.datetime import filter_accounts_next_30_days, filter_accounts_expired @@ -135,65 +134,25 @@ def proxy_save_subscription(): except requests.exceptions.RequestException as e: return jsonify({"error": str(e)}), 502 -def get_db_connection(): - # This is a simplified version for demonstration. - # In a real application, you would use a connection pool. - return mysql.connector.connect( - host=app.config["DBHOST"], - user=app.config["DBUSER"], - password=app.config["DBPASS"], - database=app.config["DATABASE"], - port=app.config["DBPORT"], - ) - -def get_push_subscriptions(): - conn = get_db_connection() - cursor = conn.cursor(dictionary=True) - cursor.execute("SELECT * FROM push_subscriptions") - subscriptions = cursor.fetchall() - cursor.close() - conn.close() - return subscriptions - -def send_notification(subscription_info, message_body): - try: - webpush( - subscription_info=subscription_info, - data=message_body, - vapid_private_key=app.config["VAPID_PRIVATE_KEY"], - vapid_claims={"sub": app.config["VAPID_CLAIM_EMAIL"]}, - ) - except WebPushException as ex: - print(f"Web push error: {ex}") - # You might want to remove the subscription if it's invalid - if ex.response and ex.response.status_code == 410: - print("Subscription is no longer valid, removing from DB.") - # Add logic to remove the subscription from your database - @app.route('/send-test-notification', methods=['POST']) def send_test_notification(): - """Sends a test push notification to all users.""" + """Proxies the request to send a test notification to the backend.""" if not session.get("logged_in"): return jsonify({'error': 'Unauthorized'}), 401 + backend_url = f"{app.config['BASE_URL']}/send-test-notification" + credentials = base64.b64decode(session["auth_credentials"]).decode() + username, password = credentials.split(":", 1) + try: - subscriptions = get_push_subscriptions() - except Exception as e: - print(f"Error getting push subscriptions: {e}") - return jsonify({"error": "Could not retrieve push subscriptions from the database."}), 500 - - if not subscriptions: - return jsonify({"message": "No push subscriptions found."}), 404 - - message_body = json.dumps({"title": "KTVManager", "body": "Ktv Test"}) - - for sub in subscriptions: - try: - send_notification(json.loads(sub['subscription_json']), message_body) - except Exception as e: - print(f"Error sending notification to subscription ID {sub.get('id', 'N/A')}: {e}") - - return jsonify({"message": f"Test notification sent to {len(subscriptions)} subscription(s)."}) + response = requests.post( + backend_url, + auth=requests.auth.HTTPBasicAuth(username, password), + json=request.get_json() + ) + return Response(response.content, status=response.status_code, mimetype=response.headers['Content-Type']) + except requests.exceptions.RequestException as e: + return jsonify({"error": str(e)}), 502 @app.route("/home") @cache.cached(timeout=60, key_prefix=make_cache_key)