diff --git a/routes/api.py b/routes/api.py index a71bac8..3c16d43 100644 --- a/routes/api.py +++ b/routes/api.py @@ -14,6 +14,7 @@ from ktvmanager.lib.auth import requires_basic_auth, check_login from ktvmanager.lib.checker import validate_account from typing import Tuple import json +import re from pywebpush import webpush, WebPushException api_blueprint = Blueprint("api", __name__) @@ -146,11 +147,16 @@ def login_route(username: str, password: str) -> Response: @api_blueprint.route("/vapid-public-key", methods=["GET"]) def vapid_public_key(): - """Provides the VAPID public key.""" - public_key = current_app.config["VAPID_PUBLIC_KEY"] - # Clean up the key by removing headers, footers, and all whitespace - public_key = "".join(public_key.replace("-----BEGIN PUBLIC KEY-----", "").replace("-----END PUBLIC KEY-----", "").split()) - return jsonify({"public_key": public_key}) + """Provides the VAPID public key in the correct format.""" + pem_key = current_app.config["VAPID_PUBLIC_KEY"] + # Use regex to robustly extract the base64 content from the PEM key + match = re.search(r"-----BEGIN PUBLIC KEY-----(.*)-----END PUBLIC KEY-----", pem_key, re.DOTALL) + if not match: + return jsonify({"error": "Could not parse VAPID public key from config"}), 500 + + # Join the split lines to remove all whitespace and newlines + base64_key = "".join(match.group(1).split()) + return jsonify({"public_key": base64_key}) @api_blueprint.route("/save-subscription", methods=["POST"])