From 50c44019a54d606e458763a00c46c869a8202cc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Sun, 18 Aug 2019 12:42:22 +0200 Subject: [PATCH] python3: fix encoding/decoding of PWA private key (#35425) --- combo/apps/pwa/models.py | 2 +- combo/apps/pwa/views.py | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/combo/apps/pwa/models.py b/combo/apps/pwa/models.py index 05e8703c..997f784b 100644 --- a/combo/apps/pwa/models.py +++ b/combo/apps/pwa/models.py @@ -65,7 +65,7 @@ class PwaSettings(models.Model): vapid = Vapid() vapid.generate_keys() self.push_notifications_infos = { - 'private_key': vapid.private_pem(), + 'private_key': force_text(vapid.private_pem()), } elif not self.push_notifications: self.push_notifications_infos = {} diff --git a/combo/apps/pwa/views.py b/combo/apps/pwa/views.py index 09bac4fd..3dce08b5 100644 --- a/combo/apps/pwa/views.py +++ b/combo/apps/pwa/views.py @@ -21,6 +21,7 @@ from django.conf import settings from django.http import HttpResponse, HttpResponseForbidden, Http404, JsonResponse from django.template.loader import get_template, TemplateDoesNotExist +from django.utils.encoding import force_text, force_bytes from django.views.decorators.csrf import csrf_exempt from django.views.generic import TemplateView @@ -50,11 +51,12 @@ def js_response(request, template_name, **kwargs): if settings.PWA_VAPID_PUBLIK_KEY: # legacy pwa_vapid_public_key = settings.PWA_VAPID_PUBLIK_KEY else: - pwa_vapid_public_key = base64.urlsafe_b64encode( + pwa_vapid_public_key = force_text( + base64.urlsafe_b64encode( Vapid.from_pem(pwa_settings.push_notifications_infos['private_key'].encode('ascii') ).private_key.public_key().public_bytes( encoding=serialization.Encoding.X962, - format=serialization.PublicFormat.UncompressedPoint)).strip('=') + format=serialization.PublicFormat.UncompressedPoint)).strip(b'=')) context = { 'pwa_vapid_public_key': pwa_vapid_public_key, 'pwa_notification_badge_url': settings.PWA_NOTIFICATION_BADGE_URL,