From a641c0896121f28079e562b9ab9b09e1977c7258 Mon Sep 17 00:00:00 2001 From: Oliver Falk Date: Tue, 26 Jun 2018 16:55:14 +0200 Subject: [PATCH] Hack in sha256 support - needs to be refactored --- .../migrations/0006_auto_20180626_1445.py | 23 +++++++++++++++++++ ivatar/ivataraccount/models.py | 4 +++- ivatar/views.py | 14 +++++++---- 3 files changed, 35 insertions(+), 6 deletions(-) create mode 100644 ivatar/ivataraccount/migrations/0006_auto_20180626_1445.py diff --git a/ivatar/ivataraccount/migrations/0006_auto_20180626_1445.py b/ivatar/ivataraccount/migrations/0006_auto_20180626_1445.py new file mode 100644 index 0000000..15d6b57 --- /dev/null +++ b/ivatar/ivataraccount/migrations/0006_auto_20180626_1445.py @@ -0,0 +1,23 @@ +# Generated by Django 2.0.6 on 2018-06-26 14:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ivataraccount', '0005_auto_20180522_1155'), + ] + + operations = [ + migrations.AddField( + model_name='confirmedemail', + name='digest_sha256', + field=models.CharField(max_length=64, null=True), + ), + migrations.AlterField( + model_name='confirmedemail', + name='digest', + field=models.CharField(max_length=32), + ), + ] diff --git a/ivatar/ivataraccount/models.py b/ivatar/ivataraccount/models.py index cc995df..71b756a 100644 --- a/ivatar/ivataraccount/models.py +++ b/ivatar/ivataraccount/models.py @@ -259,7 +259,8 @@ class ConfirmedEmail(BaseAccountModel): null=True, on_delete=models.deletion.CASCADE, ) - digest = models.CharField(max_length=64) + digest = models.CharField(max_length=32) + digest_sha256 = models.CharField(max_length=64, null=True) objects = ConfirmedEmailManager() class Meta: # pylint: disable=too-few-public-methods @@ -284,6 +285,7 @@ class ConfirmedEmail(BaseAccountModel): self.digest = hashlib.md5( self.email.strip().lower().encode('utf-8') ).hexdigest() + self.digest_sha256 = hashlib.sha256(self.email.strip().lower().encode('utf-8')).hexdigest() return super().save(force_insert, force_update, using, update_fields) diff --git a/ivatar/views.py b/ivatar/views.py index df7ab3f..cc5b9ed 100644 --- a/ivatar/views.py +++ b/ivatar/views.py @@ -22,8 +22,9 @@ class AvatarImageView(TemplateView): # Fetch by digest from mail pass elif len(kwargs['digest']) == 64: - # Fetch by digest from OpenID - model = ConfirmedOpenId + if model.objects.filter(digest=kwargs['digest']).count(): + # Fetch by digest from OpenID + model = ConfirmedOpenId else: # pragma: no cover # We should actually never ever reach this code... raise Exception('Digest provided is wrong: %s' % kwargs['digest']) @@ -31,9 +32,12 @@ class AvatarImageView(TemplateView): try: obj = model.objects.get(digest=kwargs['digest']) except ObjectDoesNotExist: - # TODO: Use default!? - raise Exception('Mail/openid ("%s") does not exist"' % - kwargs['digest']) + try: + obj = model.objects.get(digest_sha256=kwargs['digest']) + except ObjectDoesNotExist: + # TODO: Use default!? + raise Exception('Mail/openid ("%s") does not exist"' % + kwargs['digest']) if not obj.photo: # That is hacky, but achieves what we want :-) attr = getattr(obj, 'email', obj.openid)