diff --git a/app/pgp/models.py b/app/pgp/models.py index bc3c13b288817694d62a4b8347629aaf01bc042d..ae2baf0305a66d83b88fd34112d0be8d767ce194 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 678b9fc54cf97bac90bb7dd5ffab9f72097f94bc..40d624578fc1eb61b045da6904e0cdfc7d03aecb 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()