diff --git a/seahub/api2/endpoints/shared_repos.py b/seahub/api2/endpoints/shared_repos.py index b5e1ca7184..0c1eaf5328 100644 --- a/seahub/api2/endpoints/shared_repos.py +++ b/seahub/api2/endpoints/shared_repos.py @@ -14,6 +14,7 @@ from seahub.api2.utils import api_error from seahub.api2.authentication import TokenAuthentication from seahub.api2.throttling import UserRateThrottle from seahub.profile.models import Profile +from seahub.base.accounts import User from seahub.utils import is_org_context, is_valid_username, send_perm_audit_msg from seahub.base.templatetags.seahub_tags import email2nickname, email2contact_email from seahub.share.models import ExtraSharePermission, ExtraGroupsSharePermission @@ -72,6 +73,13 @@ class SharedRepos(APIView): result['modifier_contact_email'] = email2contact_email(repo.last_modifier) if repo.share_type == 'personal': + try: + User.objects.get(email=repo.user) + except User.DoesNotExist: + seafile_api.remove_share(repo.repo_id, + username, repo.user) + continue + result['user_name'] = email2nickname(repo.user) result['user_email'] = repo.user result['contact_email'] = Profile.objects.get_contact_email_by_user(repo.user) @@ -79,6 +87,10 @@ class SharedRepos(APIView): if repo.share_type == 'group': group = ccnet_api.get_group(repo.group_id) + if not group: + seafile_api.unset_group_repo(repo.repo_id, + repo.group_id, username) + continue result['group_id'] = repo.group_id result['group_name'] = group.group_name gids.append(repo.group_id) diff --git a/tests/api/endpoints/test_shared_repos.py b/tests/api/endpoints/test_shared_repos.py index d69dd6a20d..5fe14e1895 100644 --- a/tests/api/endpoints/test_shared_repos.py +++ b/tests/api/endpoints/test_shared_repos.py @@ -101,6 +101,20 @@ class SharedReposTest(BaseTestCase): assert json_resp[0]['share_type'] == 'public' def test_get_with_invalid_repo_permission(self): + + user_shared_repos = \ + seafile_api.get_share_out_repo_list(self.admin_name, -1, -1) + for repo in user_shared_repos: + seafile_api.remove_share(repo.repo_id, self.admin_name, repo.user) + + group_shared_repos = seafile_api.get_group_repos_by_owner(self.admin_name) + for repo in group_shared_repos: + seafile_api.unset_group_repo(repo.repo_id, repo.group_id, self.admin_name) + + public_shared_repos = seafile_api.list_inner_pub_repos_by_owner(self.admin_name) + for repo in public_shared_repos: + seafile_api.remove_inner_pub_repo(repo.repo_id) + self.share_repo_to_user() self.share_repo_to_group() self.share_repo_to_public()