diff --git a/frontend/src/pages/my-libs/mylib-repo-list-item.js b/frontend/src/pages/my-libs/mylib-repo-list-item.js index 9345ace722..77807ebca7 100644 --- a/frontend/src/pages/my-libs/mylib-repo-list-item.js +++ b/frontend/src/pages/my-libs/mylib-repo-list-item.js @@ -176,11 +176,13 @@ class MylibRepoListItem extends React.Component { this.props.onTransferRepo(repoID); let message = gettext('Successfully transferred the library.'); toaster.success(message); - }).catch(res => { - let message = gettext('Failed. Please check the network.'); - toaster.danger(message); + }).catch(error => { + if (error.response){ + toaster.danger(error.response.data.error_msg || gettext('Error'), {duration: 3}); + } else { + toaster.danger(gettext('Failed. Please check the network.'), {duration: 3}); + } }); - this.onTransferToggle(); } diff --git a/seahub/api2/endpoints/admin/libraries.py b/seahub/api2/endpoints/admin/libraries.py index 84367ebb94..3915f031f3 100644 --- a/seahub/api2/endpoints/admin/libraries.py +++ b/seahub/api2/endpoints/admin/libraries.py @@ -314,7 +314,7 @@ class AdminLibrary(APIView): return api_error(status.HTTP_404_NOT_FOUND, error_msg) if not new_owner_obj.permissions.can_add_repo(): - error_msg = 'Transfer failed: role of %s is %s, can not add library.' % \ + error_msg = _(u'Transfer failed: role of %s is %s, can not add library.') % \ (new_owner, new_owner_obj.role) return api_error(status.HTTP_403_FORBIDDEN, error_msg) @@ -334,6 +334,10 @@ class AdminLibrary(APIView): repo_owner = seafile_api.get_repo_owner(repo_id) + if new_owner == repo_owner: + error_msg = _(u"Library can not be transferred to owner.") + return api_error(status.HTTP_400_BAD_REQUEST, error_msg) + # get repo shared to user/group list shared_users = seafile_api.list_repo_shared_to( repo_owner, repo_id) diff --git a/seahub/api2/views.py b/seahub/api2/views.py index 1c26532c28..a00262817d 100644 --- a/seahub/api2/views.py +++ b/seahub/api2/views.py @@ -1546,10 +1546,14 @@ class RepoOwner(APIView): return api_error(status.HTTP_403_FORBIDDEN, error_msg) if not new_owner_obj.permissions.can_add_repo(): - error_msg = 'Transfer failed: role of %s is %s, can not add library.' % \ + error_msg = _(u'Transfer failed: role of %s is %s, can not add library.') % \ (new_owner, new_owner_obj.role) return api_error(status.HTTP_403_FORBIDDEN, error_msg) + if new_owner == repo_owner: + error_msg = _(u"Library can not be transferred to owner.") + return api_error(status.HTTP_400_BAD_REQUEST, error_msg) + pub_repos = [] if org_id: # get repo shared to user/group list diff --git a/tests/api/endpoints/admin/test_libraries.py b/tests/api/endpoints/admin/test_libraries.py index 00fc78ce29..c571c4940e 100644 --- a/tests/api/endpoints/admin/test_libraries.py +++ b/tests/api/endpoints/admin/test_libraries.py @@ -148,6 +148,15 @@ class AdminLibraryTest(BaseTestCase): resp = self.client.get(self.library_url) self.assertEqual(403, resp.status_code) + def test_can_not_transfer_library_to_owner(self): + + self.login_as(self.admin) + + data = 'owner=%s' % self.user_name + resp = self.client.put(self.library_url, data, 'application/x-www-form-urlencoded') + + self.assertEqual(400, resp.status_code) + def test_can_transfer(self): self.login_as(self.admin) diff --git a/tests/api/test_repo_owner.py b/tests/api/test_repo_owner.py index c760df0a1c..6b9f8d57a0 100644 --- a/tests/api/test_repo_owner.py +++ b/tests/api/test_repo_owner.py @@ -39,6 +39,15 @@ class RepoOwnerTest(BaseTestCase): resp = self.client.get(reverse("api2-repo-owner", args=[self.user_repo_id])) self.assertEqual(403, resp.status_code) + def test_can_not_transfer_repo_to_owner(self): + self.login_as(self.user) + + url = reverse("api2-repo-owner", args=[self.user_repo_id]) + data = 'owner=%s' % self.user.email + + resp = self.client.put(url, data, 'application/x-www-form-urlencoded') + self.assertEqual(400, resp.status_code) + def test_can_transfer_repo(self): self.login_as(self.user)