From 50cf596e9d52233765d57c847bf05853a0a10cb1 Mon Sep 17 00:00:00 2001 From: Frank Sauerburger <frank@sauerburger.com> Date: Mon, 1 Mar 2021 19:20:27 +0100 Subject: [PATCH] Fix case-sensitivity of WKD mail addresses --- app/pgp/models.py | 16 +++++++++++++--- app/wkd/views.py | 2 +- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/app/pgp/models.py b/app/pgp/models.py index bc3c13b..ae2baf0 100644 --- a/app/pgp/models.py +++ b/app/pgp/models.py @@ -1,10 +1,15 @@ import re +from string import ascii_uppercase, ascii_lowercase import hashlib from django.db import models import pgpy from . import zbase32 +lower_trans = str.maketrans(ascii_uppercase, ascii_lowercase) +def lower(value): + return value.translate(lower_trans) + class PublicKey(models.Model): email = models.CharField(max_length=128) armor = models.TextField() @@ -26,9 +31,14 @@ class PublicKey(models.Model): return domain.lower() def set_wkdid(self): - local, domain = self.email.rsplit("@", 1) - digest = hashlib.sha1(local.lower().encode()).digest() - self.wkdid = zbase32.encode(digest).decode() + self.wkdid = self.encode_wkd_local(self.email) + + @staticmethod + def encode_wkd_local(email): + local, domain = email.rsplit("@", 1) + local = lower(local) + digest = hashlib.sha1(local.encode()).digest() + return zbase32.encode(digest).decode() def save(self, *args, **kwds): if not self.keyid: diff --git a/app/wkd/views.py b/app/wkd/views.py index 678b9fc..40d6245 100644 --- a/app/wkd/views.py +++ b/app/wkd/views.py @@ -21,7 +21,7 @@ def lookup(request, zbase, domain=None): publickey = get_object_or_404(models.PublicKey, wkdid=zbase, - email__endswith=f"@{domain}") + email__iendswith=f"@{domain}") if not request.user.has_perm("pgp.view_publickey", publickey): raise Http404() -- GitLab