proxy to backend
This commit is contained in:
parent
b274bf12d3
commit
33c8af61ca
67
app.py
67
app.py
@ -9,7 +9,6 @@ from typing import Dict, Any, Tuple, Union
|
|||||||
import sys
|
import sys
|
||||||
import redis
|
import redis
|
||||||
import json
|
import json
|
||||||
from pywebpush import webpush, WebPushException
|
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
|
|
||||||
from lib.datetime import filter_accounts_next_30_days, filter_accounts_expired
|
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:
|
except requests.exceptions.RequestException as e:
|
||||||
return jsonify({"error": str(e)}), 502
|
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'])
|
@app.route('/send-test-notification', methods=['POST'])
|
||||||
def send_test_notification():
|
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"):
|
if not session.get("logged_in"):
|
||||||
return jsonify({'error': 'Unauthorized'}), 401
|
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:
|
try:
|
||||||
subscriptions = get_push_subscriptions()
|
response = requests.post(
|
||||||
except Exception as e:
|
backend_url,
|
||||||
print(f"Error getting push subscriptions: {e}")
|
auth=requests.auth.HTTPBasicAuth(username, password),
|
||||||
return jsonify({"error": "Could not retrieve push subscriptions from the database."}), 500
|
json=request.get_json()
|
||||||
|
)
|
||||||
if not subscriptions:
|
return Response(response.content, status=response.status_code, mimetype=response.headers['Content-Type'])
|
||||||
return jsonify({"message": "No push subscriptions found."}), 404
|
except requests.exceptions.RequestException as e:
|
||||||
|
return jsonify({"error": str(e)}), 502
|
||||||
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)."})
|
|
||||||
|
|
||||||
@app.route("/home")
|
@app.route("/home")
|
||||||
@cache.cached(timeout=60, key_prefix=make_cache_key)
|
@cache.cached(timeout=60, key_prefix=make_cache_key)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user