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.signals import avatar_updated
|
||||||
from seahub.avatar.settings import (AVATAR_MAX_AVATARS_PER_USER,
|
from seahub.avatar.settings import (AVATAR_MAX_AVATARS_PER_USER,
|
||||||
AVATAR_MAX_SIZE, AVATAR_ALLOWED_FILE_EXTS)
|
AVATAR_MAX_SIZE, AVATAR_ALLOWED_FILE_EXTS)
|
||||||
|
from seahub.avatar.templatetags.avatar_tags import api_avatar_url
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -29,10 +30,19 @@ class UserAvatarView(APIView):
|
|||||||
def post(self, request):
|
def post(self, request):
|
||||||
|
|
||||||
image_file = request.FILES.get('avatar', None)
|
image_file = request.FILES.get('avatar', None)
|
||||||
|
avatar_size = request.data.get('avatar_size', 64)
|
||||||
|
|
||||||
if not image_file:
|
if not image_file:
|
||||||
error_msg = 'avatar invalid.'
|
error_msg = 'avatar invalid.'
|
||||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
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())
|
(root, ext) = os.path.splitext(image_file.name.lower())
|
||||||
if AVATAR_ALLOWED_FILE_EXTS and ext not in AVATAR_ALLOWED_FILE_EXTS:
|
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)}
|
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.avatar.save(image_file.name, image_file)
|
||||||
avatar.save()
|
avatar.save()
|
||||||
avatar_updated.send(sender=Avatar, user=request.user, avatar=avatar)
|
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:
|
except Exception as e:
|
||||||
logger.error(e)
|
logger.error(e)
|
||||||
error_msg = 'Internal Server Error'
|
error_msg = 'Internal Server Error'
|
||||||
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
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 os
|
||||||
|
import random
|
||||||
from tests.api.apitestbase import ApiTestBase
|
from tests.api.apitestbase import ApiTestBase
|
||||||
from tests.api.urls import AVATAR_BASE_URL
|
from tests.api.urls import AVATAR_BASE_URL
|
||||||
from tests.common.utils import urljoin
|
from tests.common.utils import urljoin
|
||||||
@@ -14,10 +15,15 @@ class AvatarApiTest(ApiTestBase):
|
|||||||
avatar_url = urljoin(BASE_URL, avatar_url)
|
avatar_url = urljoin(BASE_URL, avatar_url)
|
||||||
avatar_file = os.path.join(os.getcwd(), 'media/img/seafile-logo.png')
|
avatar_file = os.path.join(os.getcwd(), 'media/img/seafile-logo.png')
|
||||||
|
|
||||||
with open(avatar_file) as f:
|
random_avatar_size = random.randint(12,128)
|
||||||
json_resp = self.post(avatar_url, files={'avatar': f}).json()
|
|
||||||
|
|
||||||
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
|
# assert is NOT default avatar
|
||||||
avatar_url = urljoin(AVATAR_BASE_URL, 'user', self.username, '/resized/80/')
|
avatar_url = urljoin(AVATAR_BASE_URL, 'user', self.username, '/resized/80/')
|
||||||
|
Reference in New Issue
Block a user