|
@@ -1,86 +0,0 @@
|
|
-import os
|
|
|
|
-
|
|
|
|
-from path import Path
|
|
|
|
-
|
|
|
|
-from django.conf import settings
|
|
|
|
-from django.contrib.auth import get_user_model
|
|
|
|
-from django.views.decorators.cache import cache_control, never_cache
|
|
|
|
-
|
|
|
|
-from misago.core.fileserver import make_file_response
|
|
|
|
-
|
|
|
|
-from ..avatars import store
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-@cache_control(private=True, must_revalidate=True, max_age=5 * 24 * 3600)
|
|
|
|
-def serve_blank_avatar(request, size):
|
|
|
|
- size = clean_size(size)
|
|
|
|
- avatar_dir = store.get_avatars_dir_path()
|
|
|
|
- avatar_file = get_blank_avatar_file(size)
|
|
|
|
- avatar_path = os.path.join(avatar_dir, avatar_file)
|
|
|
|
- return make_file_response(avatar_path, 'image/png')
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-@cache_control(private=True, must_revalidate=False)
|
|
|
|
-def serve_user_avatar(request, pk, hash, size):
|
|
|
|
- size = clean_size(size)
|
|
|
|
-
|
|
|
|
- if int(pk) > 0:
|
|
|
|
- avatar_dir = store.get_avatars_dir_path(pk)
|
|
|
|
- avatar_file = get_user_avatar_file(pk, size)
|
|
|
|
- avatar_path = os.path.join(avatar_dir, avatar_file)
|
|
|
|
-
|
|
|
|
- if Path(avatar_path).exists():
|
|
|
|
- avatar_path = os.path.join(avatar_dir, avatar_file)
|
|
|
|
- return make_file_response(avatar_path, 'image/png')
|
|
|
|
- else:
|
|
|
|
- return serve_blank_avatar(request, size)
|
|
|
|
- else:
|
|
|
|
- return serve_blank_avatar(request, size)
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-@never_cache
|
|
|
|
-def serve_user_avatar_source(request, pk, secret, hash):
|
|
|
|
- fallback_avatar = get_blank_avatar_file(min(settings.MISAGO_AVATARS_SIZES))
|
|
|
|
- User = get_user_model()
|
|
|
|
-
|
|
|
|
- if int(pk) > 0:
|
|
|
|
- try:
|
|
|
|
- user = User.objects.get(pk=pk)
|
|
|
|
-
|
|
|
|
- tokens = store.get_user_avatar_tokens(user)
|
|
|
|
- suffix = tokens.get(secret)
|
|
|
|
- if suffix:
|
|
|
|
- avatar_file = get_user_avatar_file(user.pk, suffix)
|
|
|
|
- else:
|
|
|
|
- avatar_file = fallback_avatar
|
|
|
|
- except User.DoesNotExist:
|
|
|
|
- avatar_file = fallback_avatar
|
|
|
|
- else:
|
|
|
|
- avatar_file = fallback_avatar
|
|
|
|
-
|
|
|
|
- if avatar_file == fallback_avatar:
|
|
|
|
- avatar_dir = store.get_avatars_dir_path()
|
|
|
|
- else:
|
|
|
|
- avatar_dir = store.get_avatars_dir_path(pk)
|
|
|
|
-
|
|
|
|
- avatar_path = os.path.join(avatar_dir, avatar_file)
|
|
|
|
- return make_file_response(avatar_path, 'image/png')
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-def clean_size(size):
|
|
|
|
- size = int(size)
|
|
|
|
- if size not in settings.MISAGO_AVATARS_SIZES:
|
|
|
|
- found_size = max(settings.MISAGO_AVATARS_SIZES)
|
|
|
|
- for valid_size in sorted(settings.MISAGO_AVATARS_SIZES, reverse=True):
|
|
|
|
- if valid_size > size:
|
|
|
|
- found_size = valid_size
|
|
|
|
- return found_size
|
|
|
|
- return size
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-def get_user_avatar_file(pk, size):
|
|
|
|
- return '%s_%s.png' % (pk, size)
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-def get_blank_avatar_file(size):
|
|
|
|
- return '%s.png' % size
|
|
|