Merge branch 'devel' into 'master'

Middleware and logging adjustments

See merge request oliver/ivatar!250
This commit is contained in:
Oliver Falk
2025-09-13 18:35:26 +02:00
3 changed files with 18 additions and 4 deletions

View File

@@ -31,7 +31,7 @@ INSTALLED_APPS.extend(
MIDDLEWARE.extend( MIDDLEWARE.extend(
[ [
"ivatar.middleware.RemoveVaryForImagesMiddleware", "ivatar.middleware.CustomLocaleMiddleware",
] ]
) )
MIDDLEWARE.insert( MIDDLEWARE.insert(

View File

@@ -375,9 +375,9 @@ class ConfirmedEmail(BaseAccountModel):
cache_key = f"views.decorators.cache.cache_page.{quote(str(cache_url))}" cache_key = f"views.decorators.cache.cache_page.{quote(str(cache_url))}"
if cache.has_key(cache_key): if cache.has_key(cache_key):
cache.delete(cache_key) cache.delete(cache_key)
logger.error("Successfully cleaned up cached page: %s" % cache_key) logger.debug("Successfully cleaned up cached page: %s" % cache_key)
else: else:
logger.error("Page %s wasn't cached.", cache_key) logger.debug("Page %s wasn't cached.", cache_key)
return super().save(force_insert, force_update, using, update_fields) return super().save(force_insert, force_update, using, update_fields)

View File

@@ -7,7 +7,7 @@ from django.utils.deprecation import MiddlewareMixin
from django.middleware.locale import LocaleMiddleware from django.middleware.locale import LocaleMiddleware
class RemoveVaryForImagesMiddleware(LocaleMiddleware): class CustomLocaleMiddleware(LocaleMiddleware):
""" """
Middleware that extends LocaleMiddleware to skip Vary header processing for image URLs Middleware that extends LocaleMiddleware to skip Vary header processing for image URLs
""" """
@@ -19,6 +19,20 @@ class RemoveVaryForImagesMiddleware(LocaleMiddleware):
path.startswith(prefix) path.startswith(prefix)
for prefix in ["/avatar/", "/gravatarproxy/", "/blueskyproxy/"] for prefix in ["/avatar/", "/gravatarproxy/", "/blueskyproxy/"]
): ):
# Delete Vary from header if exists
if "Vary" in response:
del response["Vary"]
# Extract hash from URL path for ETag
# URLs are like /avatar/{hash}, /gravatarproxy/{hash}, /blueskyproxy/{hash}
path_parts = path.strip("/").split("/")
if len(path_parts) >= 2:
hash_value = path_parts[1] # Get the hash part
response["Etag"] = f'"{hash_value}"'
else:
# Fallback to content hash if we can't extract from URL
response["Etag"] = f'"{hash(response.content)}"'
# Skip the parent's process_response to avoid adding Accept-Language to Vary # Skip the parent's process_response to avoid adding Accept-Language to Vary
return response return response