diff --git a/seahub/api2/endpoints/admin/libraries.py b/seahub/api2/endpoints/admin/libraries.py index 72ec9da302..f4defa2c4b 100644 --- a/seahub/api2/endpoints/admin/libraries.py +++ b/seahub/api2/endpoints/admin/libraries.py @@ -20,6 +20,8 @@ from seahub.views import get_system_default_repo_id from seahub.admin_log.signals import admin_operation from seahub.admin_log.models import REPO_CREATE, REPO_DELETE, REPO_TRANSFER +from seahub.base.templatetags.seahub_tags import email2nickname, email2contact_email + try: from seahub.settings import MULTI_TENANCY except ImportError: @@ -36,10 +38,15 @@ def get_repo_info(repo): except Exception: org_repo_owner = None + owner = repo_owner or org_repo_owner + result = {} result['id'] = repo.repo_id result['name'] = repo.repo_name - result['owner'] = repo_owner or org_repo_owner + result['owner'] = owner + result['owner_email'] = owner + result['owner_name'] = email2nickname(owner) + result['owner_contact_email'] = email2contact_email(owner) result['size'] = repo.size result['size_formatted'] = filesizeformat(repo.size) result['encrypted'] = repo.encrypted @@ -187,6 +194,21 @@ class AdminLibrary(APIView): throttle_classes = (UserRateThrottle,) permission_classes = (IsAdminUser,) + def get(self, request, repo_id, format=None): + """ get info of a library + + Permission checking: + 1. only admin can perform this action. + """ + repo = seafile_api.get_repo(repo_id) + if not repo: + error_msg = 'Library %s not found.' % repo_id + return api_error(status.HTTP_404_NOT_FOUND, error_msg) + + repo_info = get_repo_info(repo) + + return Response(repo_info) + def delete(self, request, repo_id, format=None): """ delete a library diff --git a/tests/api/endpoints/admin/test_libraries.py b/tests/api/endpoints/admin/test_libraries.py index d0cb46b80f..2baf22ca80 100644 --- a/tests/api/endpoints/admin/test_libraries.py +++ b/tests/api/endpoints/admin/test_libraries.py @@ -124,6 +124,24 @@ class AdminLibraryTest(BaseTestCase): self.library_url = reverse('api-v2.1-admin-library', args=[self.repo_id]) + def test_can_get(self): + + self.login_as(self.admin) + + resp = self.client.get(self.library_url) + + self.assertEqual(200, resp.status_code) + + json_resp = json.loads(resp.content) + assert json_resp['owner'] == self.user_name + assert json_resp['name'] == self.repo.repo_name + + def test_get_with_invalid_user_permission(self): + + self.login_as(self.user) + resp = self.client.get(self.library_url) + self.assertEqual(403, resp.status_code) + def test_can_transfer(self): self.login_as(self.admin)