From 755f9fbbc656ec21e0a37ba63bccdcca03dbce9c Mon Sep 17 00:00:00 2001 From: ilearnit Date: Thu, 12 Apr 2018 16:38:23 +0800 Subject: [PATCH] fix transfer share lonks --- seahub/api2/endpoints/admin/libraries.py | 11 +++++++- tests/api/endpoints/admin/test_libraries.py | 30 +++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/seahub/api2/endpoints/admin/libraries.py b/seahub/api2/endpoints/admin/libraries.py index f4defa2c4b..ac0ec2664c 100644 --- a/seahub/api2/endpoints/admin/libraries.py +++ b/seahub/api2/endpoints/admin/libraries.py @@ -19,7 +19,7 @@ from seahub.signals import repo_deleted 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.share.models import FileShare, UploadLinkShare from seahub.base.templatetags.seahub_tags import email2nickname, email2contact_email try: @@ -339,6 +339,15 @@ class AdminLibrary(APIView): seafile_api.set_group_repo(repo_id, shared_group_id, new_owner, shared_group.perm) + # reshare repo to links + try: + UploadLinkShare.objects.filter(username=repo_owner, repo_id=repo_id).update(username=new_owner) + FileShare.objects.filter(username=repo_owner, repo_id=repo_id).update(username=new_owner) + except Exception as e: + logger.error(e) + error_msg = 'Internal Server Error' + return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) + # check if current repo is pub-repo # if YES, reshare current repo to public for pub_repo in pub_repos: diff --git a/tests/api/endpoints/admin/test_libraries.py b/tests/api/endpoints/admin/test_libraries.py index 2baf22ca80..52c68e1f0c 100644 --- a/tests/api/endpoints/admin/test_libraries.py +++ b/tests/api/endpoints/admin/test_libraries.py @@ -2,6 +2,7 @@ import json from django.core.urlresolvers import reverse from seahub.test_utils import BaseTestCase from tests.common.utils import randstring +from seahub.share.models import FileShare, UploadLinkShare class AdminLibrariesTest(BaseTestCase): @@ -123,6 +124,11 @@ class AdminLibraryTest(BaseTestCase): self.repo_id= self.repo.repo_id self.library_url = reverse('api-v2.1-admin-library', args=[self.repo_id]) + self.fs_share = FileShare.objects.create_dir_link(self.user.username, + self.repo_id, self.folder, None, None) + + self.fs_upload = UploadLinkShare.objects.create_upload_link_share(self.user.username, + self.repo_id, self.folder, None, None) def test_can_get(self): @@ -187,3 +193,27 @@ class AdminLibraryTest(BaseTestCase): self.login_as(self.user) resp = self.client.delete(self.library_url) self.assertEqual(403, resp.status_code) + + def test_reshare_to_share_links_after_transfer_repo(self): + self.login_as(self.admin) + + assert len(UploadLinkShare.objects.all()) == 1 + + data = 'owner=%s' % self.admin_name + resp = self.client.put(self.library_url, data, 'application/x-www-form-urlencoded') + + self.assertEqual(200, resp.status_code) + json_resp = json.loads(resp.content) + assert json_resp['owner'] == self.admin_name + + def test_reshare_to_upload_links_after_transfer_repo(self): + self.login_as(self.admin) + + assert len(UploadLinkShare.objects.all()) == 1 + + data = 'owner=%s' % self.admin_name + resp = self.client.put(self.library_url, data, 'application/x-www-form-urlencoded') + + self.assertEqual(200, resp.status_code) + json_resp = json.loads(resp.content) + assert json_resp['owner'] == self.admin_name