avatarserver.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. from django.conf import settings
  2. from django.contrib.auth import get_user_model
  3. from misago.core.fileserver import make_file_response
  4. from misago.users.avatars import set_default_avatar
  5. from misago.users.avatars.uploaded import avatar_source_token
  6. def serve_user_avatar(request, user_id, size):
  7. size = clean_size(size)
  8. User = get_user_model()
  9. if user_id > 0:
  10. try:
  11. user = User.objects.get(id=user_id)
  12. avatar_file = get_user_avatar_file(user, size)
  13. except User.DoesNotExist:
  14. avatar_file = get_blank_avatar_file(size)
  15. else:
  16. avatar_file = get_blank_avatar_file(size)
  17. avatar_path = '%s/%s.png' % (settings.MISAGO_AVATAR_STORE, avatar_file)
  18. return make_file_response(avatar_path, 'image/png')
  19. def serve_user_avatar_source(request, user_id, token, type):
  20. fallback_avatar = get_blank_avatar_file(min(settings.MISAGO_AVATARS_SIZES))
  21. User = get_user_model()
  22. if user_id > 0:
  23. try:
  24. user = User.objects.get(id=user_id)
  25. if token == avatar_source_token(user, type):
  26. avatar_file = get_user_avatar_file(user, type)
  27. else:
  28. avatar_file = fallback_avatar
  29. except User.DoesNotExist:
  30. avatar_file = fallback_avatar
  31. else:
  32. avatar_file = fallback_avatar
  33. avatar_path = '%s/%s.png' % (settings.MISAGO_AVATAR_STORE, avatar_file)
  34. return make_file_response(avatar_path, 'image/png')
  35. def serve_blank_avatar(request, size):
  36. size = clean_size(size)
  37. avatar_file = get_blank_avatar_file(size)
  38. avatar_path = '%s/%s.png' % (settings.MISAGO_AVATAR_STORE, avatar_file)
  39. return make_file_response(avatar_path, 'image/png')
  40. def clean_size(size):
  41. if not size in settings.MISAGO_AVATARS_SIZES:
  42. size = max(settings.MISAGO_AVATARS_SIZES)
  43. for valid_size in sorted(settings.MISAGO_AVATARS_SIZES, reverse=True):
  44. if valid_size > size:
  45. size = valid_size
  46. return size
  47. def get_user_avatar_file(user, size):
  48. file_formats = (user.joined_on.strftime('%y%m'), user.pk, size)
  49. return '%s/%s_%s' % file_formats
  50. def get_blank_avatar_file(size):
  51. return 'blank/blank_%s' % size