From 0f9eaf7e8c916cdf428d2885eaab7f38a3cb6802 Mon Sep 17 00:00:00 2001 From: Denis Voskvitsov Date: Wed, 21 Oct 2015 12:55:31 +0300 Subject: [PATCH 1/5] Force utf-8 encoding of user email in gravatar request --- wagtail/wagtailadmin/templatetags/gravatar.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wagtail/wagtailadmin/templatetags/gravatar.py b/wagtail/wagtailadmin/templatetags/gravatar.py index 204aa59df..908b48395 100644 --- a/wagtail/wagtailadmin/templatetags/gravatar.py +++ b/wagtail/wagtailadmin/templatetags/gravatar.py @@ -30,7 +30,7 @@ class GravatarUrlNode(template.Node): default = "blank" size = int(self.size) * 2 # requested at retina size by default and scaled down at point of use with css - gravatar_url = "//www.gravatar.com/avatar/" + hashlib.md5(b(email.lower())).hexdigest() + "?" + gravatar_url = "//www.gravatar.com/avatar/" + hashlib.md5(email.lower().encode('utf-8')).hexdigest() + "?" gravatar_url += urlencode({'s': str(size), 'd': default}) return gravatar_url From 9277e8350cf64f2d1a4263afca842bd5675526a4 Mon Sep 17 00:00:00 2001 From: Denis Voskvitsov Date: Wed, 21 Oct 2015 13:35:13 +0300 Subject: [PATCH 2/5] PEP8 --- wagtail/wagtailadmin/templatetags/gravatar.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wagtail/wagtailadmin/templatetags/gravatar.py b/wagtail/wagtailadmin/templatetags/gravatar.py index 908b48395..6ad8a970a 100644 --- a/wagtail/wagtailadmin/templatetags/gravatar.py +++ b/wagtail/wagtailadmin/templatetags/gravatar.py @@ -10,7 +10,6 @@ import hashlib from django import template -from django.utils.six import b from django.utils.six.moves.urllib.parse import urlencode register = template.Library() @@ -28,13 +27,14 @@ class GravatarUrlNode(template.Node): return '' default = "blank" - size = int(self.size) * 2 # requested at retina size by default and scaled down at point of use with css + size = int(self.size) * 2 # requested at retina size by default and scaled down at point of use with css gravatar_url = "//www.gravatar.com/avatar/" + hashlib.md5(email.lower().encode('utf-8')).hexdigest() + "?" gravatar_url += urlencode({'s': str(size), 'd': default}) return gravatar_url + @register.tag def gravatar_url(parser, token): bits = token.split_contents() From 0deb2da1afb8840fee421c08f5ab4bc2f97ce093 Mon Sep 17 00:00:00 2001 From: Denis Voskvitsov Date: Sat, 24 Oct 2015 00:58:08 +0300 Subject: [PATCH 3/5] More readable gravatar url formatting --- wagtail/wagtailadmin/templatetags/gravatar.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/wagtail/wagtailadmin/templatetags/gravatar.py b/wagtail/wagtailadmin/templatetags/gravatar.py index 6ad8a970a..6507da9df 100644 --- a/wagtail/wagtailadmin/templatetags/gravatar.py +++ b/wagtail/wagtailadmin/templatetags/gravatar.py @@ -29,8 +29,10 @@ class GravatarUrlNode(template.Node): default = "blank" size = int(self.size) * 2 # requested at retina size by default and scaled down at point of use with css - gravatar_url = "//www.gravatar.com/avatar/" + hashlib.md5(email.lower().encode('utf-8')).hexdigest() + "?" - gravatar_url += urlencode({'s': str(size), 'd': default}) + gravatar_url = "//www.gravatar.com/avatar/{hash}?{params}".format( + hash=hashlib.md5(email.lower().encode('utf-8')).hexdigest(), + params=urlencode({'s': size, 'd': default}) + ) return gravatar_url From d1ef42fe9b7d0f91d75b4ba0133a75d0066b6683 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Mon, 26 Oct 2015 12:32:28 +0000 Subject: [PATCH 4/5] test for #1670 --- wagtail/wagtailadmin/tests/tests.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/wagtail/wagtailadmin/tests/tests.py b/wagtail/wagtailadmin/tests/tests.py index e7cf405c1..e73e930be 100644 --- a/wagtail/wagtailadmin/tests/tests.py +++ b/wagtail/wagtailadmin/tests/tests.py @@ -1,8 +1,13 @@ +# -*- coding: utf-8 -*- + +from __future__ import unicode_literals + import json from django.test import TestCase, override_settings from django.core.urlresolvers import reverse from django.core import mail +from django.contrib.auth import get_user_model from taggit.models import Tag @@ -41,6 +46,15 @@ class TestHome(TestCase, WagtailTestUtils): self.assertIn('no-store', response['Cache-Control']) self.assertIn('max-age=0', response['Cache-Control']) + def test_nonascii_email(self): + # Test that non-ASCII email addresses don't break the admin; previously these would + # cause a failure when generating Gravatar URLs + get_user_model().objects.create_superuser(username='snowman', email='☃@thenorthpole.com', password='password') + # Login + self.client.login(username='snowman', password='password') + response = self.client.get(reverse('wagtailadmin_home')) + self.assertEqual(response.status_code, 200) + class TestEditorHooks(TestCase, WagtailTestUtils): def setUp(self): From 566fa3a26f9bde68f632246f8a66678bee4c9c54 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Mon, 26 Oct 2015 12:58:36 +0000 Subject: [PATCH 5/5] Release note for #1670 / #1850 / #1854 --- CHANGELOG.txt | 1 + CONTRIBUTORS.rst | 2 ++ docs/releases/1.2.rst | 1 + 3 files changed, 4 insertions(+) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index eaafe2943..ef66f1608 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -39,6 +39,7 @@ Changelog * Fix: Searching a specific page model while filtering it by either ID or tree position no longer raises an error (Ashia Zawaduk) * Fix: Scrolling an over-long explorer menu no longer causes white background to show through (Alex Gleason) * Fix: Removed jitter when hovering over StreamField blocks (Alex Gleason) + * Fix: Non-ASCII email addresses no longer throw errors when generating Gravatar URLs (Denis Voskvitsov, Kyle Stratis) 1.1 (15.09.2015) ~~~~~~~~~~~~~~~~ diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 07e2e0fbc..30dce507d 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -75,6 +75,8 @@ Contributors * Josh Barr * Sævar Öfjörð Magnússon * Ashia Zawaduk +* Denis Voskvitsov +* Kyle Stratis Translators diff --git a/docs/releases/1.2.rst b/docs/releases/1.2.rst index 63a8b0b95..6ac263447 100644 --- a/docs/releases/1.2.rst +++ b/docs/releases/1.2.rst @@ -93,6 +93,7 @@ Bug fixes * Searching a specific page model while filtering it by either ID or tree position no longer raises an error (Ashia Zawaduk) * Scrolling an over-long explorer menu no longer causes white background to show through (Alex Gleason) * Removed jitter when hovering over StreamField blocks (Alex Gleason) + * Non-ASCII email addresses no longer throw errors when generating Gravatar URLs (Denis Voskvitsov, Kyle Stratis) Upgrade considerations ======================