Compare commits

..

No commits in common. "809f1ebda549723dc780279a98514d22adf9ad63" and "42831d294c2b8a24d89008802b5d2789c28fcff7" have entirely different histories.

3 changed files with 14 additions and 22 deletions

View File

@ -1,5 +1,5 @@
[tool.bumpversion] [tool.bumpversion]
current_version = "1.2.16" current_version = "1.2.15"
commit = true commit = true
tag = true tag = true
tag_name = "{new_version}" tag_name = "{new_version}"

View File

@ -1 +1 @@
1.2.16 1.2.15

View File

@ -15,8 +15,6 @@ from ktvmanager.lib.checker import validate_account
from typing import Tuple from typing import Tuple
import json import json
import re import re
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import ec
from pywebpush import webpush, WebPushException from pywebpush import webpush, WebPushException
api_blueprint = Blueprint("api", __name__) api_blueprint = Blueprint("api", __name__)
@ -151,24 +149,18 @@ def login_route(username: str, password: str) -> Response:
def vapid_public_key(): def vapid_public_key():
"""Provides the VAPID public key in the correct format.""" """Provides the VAPID public key in the correct format."""
pem_key = current_app.config["VAPID_PUBLIC_KEY"] pem_key = current_app.config["VAPID_PUBLIC_KEY"]
try: # Use regex to robustly extract the base64 content from the PEM key
public_key = serialization.load_pem_public_key(pem_key.encode("utf-8")) match = re.search(r"-----BEGIN PUBLIC KEY-----(.*)-----END PUBLIC KEY-----", pem_key, re.DOTALL)
if not isinstance(public_key, ec.EllipticCurvePublicKey): if not match:
raise TypeError("VAPID public key is not an Elliptic Curve key") return jsonify({"error": "Could not parse VAPID public key from config"}), 500
# Get the raw, uncompressed public key bytes (65 bytes for P-256) # Join the split lines to remove all whitespace and newlines
raw_key = public_key.public_bytes( base64_key = "".join(match.group(1).split())
encoding=serialization.Encoding.X962,
format=serialization.PublicFormat.UncompressedPoint
)
# URL-safe base64 encode the raw key # Convert to URL-safe base64 and remove padding for the PushManager API
url_safe_key = base64.urlsafe_b64encode(raw_key).rstrip(b'=').decode('utf-8') url_safe_key = base64_key.replace('+', '-').replace('/', '_').rstrip('=')
return jsonify({"public_key": url_safe_key}) return jsonify({"public_key": url_safe_key})
except (ValueError, TypeError, AttributeError) as e:
current_app.logger.error(f"Error processing VAPID public key: {e}")
return jsonify({"error": "Could not process VAPID public key"}), 500
@api_blueprint.route("/save-subscription", methods=["POST"]) @api_blueprint.route("/save-subscription", methods=["POST"])