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