Nandini Arora 2024-05-02 09:35:53 +00:00 zatwierdzone przez GitHub
commit 2a5f7c36d8
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: B5690EEEBB952194
2 zmienionych plików z 43 dodań i 12 usunięć

Wyświetl plik

@ -0,0 +1,17 @@
from django.test import TestCase
from wagtail.users.utils import get_gravatar_url
class TestGravatar(TestCase):
def test_gravatar_default(self):
# Test with the default settings
self.assertEqual(
get_gravatar_url("something@example.com"),
"//www.gravatar.com/avatar/76ebd6fecabc982c205dd056e8f0415a?d=mp&s=100",
)
def test_gravatar_custom_size(self):
# Test with a custom size (note that the size will be doubled)
self.assertEqual(
get_gravatar_url("something@example.com", size=100),
"//www.gravatar.com/avatar/76ebd6fecabc982c205dd056e8f0415a?d=mp&s=200",
)

Wyświetl plik

@ -1,3 +1,5 @@
from urllib.parse import parse_qs, urlparse, urlunparse
from django.conf import settings
from django.utils.http import urlencode
from django.utils.translation import gettext_lazy as _
@ -26,28 +28,40 @@ def user_can_delete_user(current_user, user_to_delete):
def get_gravatar_url(email, size=50):
default = "mm"
size = (
int(size) * 2
) # requested at retina size by default and scaled down at point of use with css
"""
Generates a Gravatar URL for the given email with customizable size and default image.
See https://gravatar.com/site/implement/images/ for Gravatar image options.
"""
gravatar_provider_url = getattr(
settings, "WAGTAIL_GRAVATAR_PROVIDER_URL", "//www.gravatar.com/avatar"
)
if (not email) or (gravatar_provider_url is None):
if not email or not gravatar_provider_url:
return None
# Set default image type and adjust size for retina displays
default = "mp"
size *= 2 # Retina display support
# Parse the provided URL and extract query parameters
parsed_url = urlparse(gravatar_provider_url)
query_params = parse_qs(parsed_url.query)
email_bytes = email.lower().encode("utf-8")
hash = safe_md5(email_bytes, usedforsecurity=False).hexdigest()
gravatar_url = "{gravatar_provider_url}/{hash}?{params}".format(
gravatar_provider_url=gravatar_provider_url.rstrip("/"),
hash=hash,
params=urlencode({"s": size, "d": default}),
)
email_hash = safe_md5(email_bytes).hexdigest()
email_hash='/'+ email_hash
# Merge default parameters with those extracted from the provided URL
query_params.update({"d": default, "s": str(size)})
query_string = urlencode(query_params, doseq=True)
# Rebuild the URL with the merged parameters
gravatar_url = urlunparse((
parsed_url.scheme, parsed_url.netloc, parsed_url.path + email_hash,
parsed_url.params, query_string, parsed_url.fragment
))
return gravatar_url
def get_deleted_user_display_name(user_id):
# Use a string placeholder as the user id could be non-numeric
return _("user %(id)s (deleted)") % {"id": user_id}