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]
current_version = "1.2.16"
current_version = "1.2.15"
commit = true
tag = true
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
import json
import re
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import ec
from pywebpush import webpush, WebPushException
api_blueprint = Blueprint("api", __name__)
@ -151,24 +149,18 @@ def login_route(username: str, password: str) -> Response:
def vapid_public_key():
"""Provides the VAPID public key in the correct format."""
pem_key = current_app.config["VAPID_PUBLIC_KEY"]
try:
public_key = serialization.load_pem_public_key(pem_key.encode("utf-8"))
if not isinstance(public_key, ec.EllipticCurvePublicKey):
raise TypeError("VAPID public key is not an Elliptic Curve key")
# Get the raw, uncompressed public key bytes (65 bytes for P-256)
raw_key = public_key.public_bytes(
encoding=serialization.Encoding.X962,
format=serialization.PublicFormat.UncompressedPoint
)
# URL-safe base64 encode the raw key
url_safe_key = base64.urlsafe_b64encode(raw_key).rstrip(b'=').decode('utf-8')
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
# 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())
# Convert to URL-safe base64 and remove padding for the PushManager API
url_safe_key = base64_key.replace('+', '-').replace('/', '_').rstrip('=')
return jsonify({"public_key": url_safe_key})
@api_blueprint.route("/save-subscription", methods=["POST"])