Rafał Pitoń 8 лет назад
Родитель
Сommit
733c6877c5

+ 0 - 5
docs/developers/settings.rst

@@ -229,11 +229,6 @@ Length of attachment's secret (filenames and url token). The longer, the harder
    Generaly, neither you nor your users should use forums to exchange files containing valuable data, but if you do, you should make sure to secure it additionaly via other means like password-protected archives or file encryption solutions.
 
 
-MISAGO_AVATAR_SERVER_PATH
--------------------------
-Url path that that all avatar server urls starts with. If you are running Misago subdirectory, make sure to update it (i.e. valid path for  "http://somesite.com/forums/" is ``/forums/user-avatar``).
-
-
 MISAGO_AVATARS_SIZES
 --------------------
 

+ 1 - 6
misago/conf/defaults.py

@@ -70,7 +70,6 @@ INSTALLED_APPS = (
 
 MIDDLEWARE_CLASSES = (
     'debug_toolbar.middleware.DebugToolbarMiddleware',
-    'misago.users.middleware.AvatarServerMiddleware',
     'misago.users.middleware.RealIPMiddleware',
     'misago.core.middleware.frontendcontext.FrontendContextMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
@@ -258,11 +257,7 @@ MISAGO_DYNAMIC_AVATAR_DRAWER = 'misago.users.avatars.dynamic.draw_default'
 # Max size also controls min size of uploaded image as well as crop size
 MISAGO_AVATARS_SIZES = (400, 200, 150, 100, 64, 50, 30, 20)
 
-# Path to avatar server
-# This path is used to detect avatar requests, which bypass most of
-# Request/Response processing for performance reasons
-MISAGO_AVATAR_SERVER_PATH = '/user-avatar'
-
+# Path to blank avatar
 MISAGO_BLANK_AVATAR = 'blank-avatar.png'
 
 

+ 0 - 11
misago/users/middleware.py

@@ -2,9 +2,6 @@ import pytz
 
 from django.contrib.auth import logout
 from django.contrib.auth.models import AnonymousUser as DjAnonymousUser
-from django.urls import resolve
-
-from misago.conf import settings
 
 from .bans import get_request_ip_ban, get_user_ban
 from .models import AnonymousUser, Online
@@ -20,14 +17,6 @@ class RealIPMiddleware(object):
             request.user_ip = request.META.get('REMOTE_ADDR')
 
 
-class AvatarServerMiddleware(object):
-    def process_request(self, request):
-        if request.path_info.startswith(settings.MISAGO_AVATAR_SERVER_PATH):
-            request.user = DjAnonymousUser()
-            resolved_path = resolve(request.path_info)
-            return resolved_path.func(request, **resolved_path.kwargs)
-
-
 class UserMiddleware(object):
     def process_request(self, request):
         if request.user.is_anonymous():

+ 0 - 71
misago/users/tests/test_avatarserver_views.py

@@ -1,71 +0,0 @@
-from django.conf import settings
-from django.contrib.auth import get_user_model
-from django.test import TestCase
-from django.urls import reverse
-
-from ..views.avatarserver import clean_size
-
-
-class AvatarServerTests(TestCase):
-    def test_user_avatar_serving(self):
-        """avatar server handles user avatar requests"""
-        User = get_user_model()
-        test_user = User.objects.create_user('Bob', 'bob@bob.com', 'pass123',
-                                             set_default_avatar=True)
-
-        avatar_url = reverse('misago:user-avatar', kwargs={
-            'pk': test_user.pk,
-            'hash': test_user.avatar_hash,
-            'size': 150,
-        })
-        response = self.client.get(avatar_url)
-
-        self.assertEqual(response.status_code, 200)
-        self.assertEqual(response['Content-Type'], 'image/png')
-
-    def test_deleted_user_avatar_serving(self):
-        """avatar server handles deleted user avatar requests"""
-        avatar_url = reverse('misago:user-avatar', kwargs={
-            'pk': 12345,
-            'hash': '12356af',
-            'size': 150,
-        })
-        response = self.client.get(avatar_url)
-
-        self.assertEqual(response.status_code, 200)
-        self.assertEqual(response['Content-Type'], 'image/png')
-
-    def test_blank_avatar_serving(self):
-        """avatar server handles blank avatar requests"""
-        response = self.client.get(reverse('misago:blank-avatar', kwargs={
-            'size': 150,
-        }))
-
-        self.assertEqual(response.status_code, 200)
-        self.assertEqual(response['Content-Type'], 'image/png')
-
-
-class CleanSizeTests(TestCase):
-    def test_size_too_big(self):
-        """clean_size returns max for too big size"""
-        max_size = max(settings.MISAGO_AVATARS_SIZES)
-        too_big = max_size * 2
-
-        self.assertEqual(clean_size(too_big), max_size)
-
-    def test_size_too_small(self):
-        """clean_size returns min for too small size"""
-        min_size = min(settings.MISAGO_AVATARS_SIZES)
-        too_small = min_size / 2
-
-        self.assertEqual(clean_size(too_small), min_size)
-
-    def test_mid_sizes(self):
-        """clean_size returns approximates for little invalid sizes"""
-        for size in settings.MISAGO_AVATARS_SIZES:
-            self.assertEqual(clean_size(size - 1), size)
-
-    def test_valid_sizes(self):
-        """clean_size returns valid sizes untouched"""
-        for size in settings.MISAGO_AVATARS_SIZES:
-            self.assertEqual(clean_size(size), size)

+ 1 - 10
misago/users/urls/__init__.py

@@ -2,7 +2,7 @@ from django.conf.urls import include, url
 
 from misago.core.views import home_redirect
 
-from ..views import activation, auth, avatarserver, forgottenpassword, lists, options, profile
+from ..views import activation, auth, forgottenpassword, lists, options, profile
 
 
 urlpatterns = [
@@ -53,12 +53,3 @@ urlpatterns += [
         url(r'^ban-details/$', profile.user_ban, name='user-ban'),
     ]))
 ]
-
-
-urlpatterns += [
-    url(r'^user-avatar/', include([
-        url(r'^(?P<hash>[a-f0-9]+)/(?P<size>\d+)/(?P<pk>\d+)\.png$', avatarserver.serve_user_avatar, name='user-avatar'),
-        url(r'^(?P<secret>[a-f0-9]+):(?P<hash>[a-f0-9]+)/(?P<pk>\d+)\.png$', avatarserver.serve_user_avatar_source, name='user-avatar-source'),
-        url(r'^(?P<size>\d+)\.png$', avatarserver.serve_blank_avatar, name='blank-avatar'),
-    ]))
-]

+ 0 - 86
misago/users/views/avatarserver.py

@@ -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