mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-10 11:21:29 +00:00
@@ -18,6 +18,7 @@ from seahub.avatar.models import Avatar
|
||||
from seahub.avatar.signals import avatar_updated
|
||||
from seahub.avatar.settings import (AVATAR_MAX_AVATARS_PER_USER,
|
||||
AVATAR_MAX_SIZE, AVATAR_ALLOWED_FILE_EXTS)
|
||||
from seahub.avatar.templatetags.avatar_tags import api_avatar_url
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -29,10 +30,19 @@ class UserAvatarView(APIView):
|
||||
def post(self, request):
|
||||
|
||||
image_file = request.FILES.get('avatar', None)
|
||||
avatar_size = request.data.get('avatar_size', 64)
|
||||
|
||||
if not image_file:
|
||||
error_msg = 'avatar invalid.'
|
||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||
|
||||
try:
|
||||
avatar_size = int(avatar_size)
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
error_msg = 'avatar_size invalid.'
|
||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||
|
||||
(root, ext) = os.path.splitext(image_file.name.lower())
|
||||
if AVATAR_ALLOWED_FILE_EXTS and ext not in AVATAR_ALLOWED_FILE_EXTS:
|
||||
error_msg = _(u"%(ext)s is an invalid file extension. Authorized extensions are : %(valid_exts_list)s") % {'ext' : ext, 'valid_exts_list' : ", ".join(AVATAR_ALLOWED_FILE_EXTS)}
|
||||
@@ -56,9 +66,10 @@ class UserAvatarView(APIView):
|
||||
avatar.avatar.save(image_file.name, image_file)
|
||||
avatar.save()
|
||||
avatar_updated.send(sender=Avatar, user=request.user, avatar=avatar)
|
||||
avatar_url, is_default, date_uploaded = api_avatar_url(username, int(avatar_size))
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
error_msg = 'Internal Server Error'
|
||||
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
||||
|
||||
return Response({'success': True})
|
||||
return Response({'avatar_url': avatar_url})
|
||||
|
@@ -1,4 +1,5 @@
|
||||
import os
|
||||
import random
|
||||
from tests.api.apitestbase import ApiTestBase
|
||||
from tests.api.urls import AVATAR_BASE_URL
|
||||
from tests.common.utils import urljoin
|
||||
@@ -14,10 +15,15 @@ class AvatarApiTest(ApiTestBase):
|
||||
avatar_url = urljoin(BASE_URL, avatar_url)
|
||||
avatar_file = os.path.join(os.getcwd(), 'media/img/seafile-logo.png')
|
||||
|
||||
with open(avatar_file) as f:
|
||||
json_resp = self.post(avatar_url, files={'avatar': f}).json()
|
||||
random_avatar_size = random.randint(12,128)
|
||||
|
||||
assert json_resp['success'] == True
|
||||
with open(avatar_file) as f:
|
||||
json_resp = self.post(avatar_url, files={'avatar': f}, data={'avatar_size': random_avatar_size}).json()
|
||||
|
||||
assert json_resp.has_key('avatar_url')
|
||||
response_url = json_resp['avatar_url']
|
||||
list_url = response_url.split('/')
|
||||
assert str(random_avatar_size) in list_url
|
||||
|
||||
# assert is NOT default avatar
|
||||
avatar_url = urljoin(AVATAR_BASE_URL, 'user', self.username, '/resized/80/')
|
||||
|
Reference in New Issue
Block a user