Compare commits
No commits in common. "809f1ebda549723dc780279a98514d22adf9ad63" and "42831d294c2b8a24d89008802b5d2789c28fcff7" have entirely different histories.
809f1ebda5
...
42831d294c
@ -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}"
|
||||||
|
@ -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"])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user