def test_can_update_org_group_share_perm(self): self.share_org_repo_to_org_group_with_rw_permission() # print seafile_api.get_folder_group_perm(self.repo_id, '/', int(self.group_id)) repos = seafile_api.get_org_group_repos_by_owner( self.org.org_id, self.org_user.username) target_repo = [ repo for repo in repos if repo.repo_id == self.org_repo.id ] assert target_repo[0].permission == 'rw' self.login_as(self.org_user) url = reverse('api-v2.1-shared-repo', args=[self.org_repo.id]) data = 'permission=r&share_type=group&group_id=%s' % self.org_group.id resp = self.client.put(url, data, 'application/x-www-form-urlencoded') self.assertEqual(200, resp.status_code) repos = seafile_api.get_org_group_repos_by_owner( self.org.org_id, self.org_user.username) target_repo = [ repo for repo in repos if repo.repo_id == self.org_repo.id ] assert target_repo[0].permission == 'r'
def test_delete_org_group_share(self): self.share_org_repo_to_org_group_with_rw_permission() repos = seafile_api.get_org_group_repos_by_owner(self.org.org_id, self.org_user.username) target_repo = [repo for repo in repos if repo.repo_id == self.org_repo.id] assert target_repo[0].permission == 'rw' self.login_as(self.org_user) args = '?share_type=group&group_id=%s' % self.org_group.id url = reverse('api-v2.1-shared-repo', args=[self.org_repo.id]) + args resp = self.client.delete(url, {}, 'application/x-www-form-urlencoded') self.assertEqual(200, resp.status_code) repos = seafile_api.get_org_group_repos_by_owner(self.org.org_id, self.org_user.username) target_repo = [repo for repo in repos if repo.repo_id == self.org_repo.id] assert len(target_repo) == 0
def get(self, request, format=None): """ List all shared out repos. Permission checking: 1. all authenticated user can perform this action. """ shared_repos = [] username = request.user.username try: if is_org_context(request): org_id = request.user.org.org_id shared_repos += seafile_api.get_org_share_out_repo_list( org_id, username, -1, -1) shared_repos += seafile_api.get_org_group_repos_by_owner( org_id, username) shared_repos += seafile_api.list_org_inner_pub_repos_by_owner( org_id, username) else: shared_repos += seafile_api.get_share_out_repo_list( username, -1, -1) shared_repos += seafile_api.get_group_repos_by_owner(username) if not request.cloud_mode: shared_repos += seafile_api.list_inner_pub_repos_by_owner( username) except Exception as e: logger.error(e) error_msg = 'Internal Server Error' return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) returned_result = [] shared_repos.sort(lambda x, y: cmp(x.repo_name, y.repo_name)) usernames = [] gids = [] for repo in shared_repos: if repo.is_virtual: continue result = {} result['repo_id'] = repo.repo_id result['repo_name'] = repo.repo_name result['encrypted'] = repo.encrypted result['share_type'] = repo.share_type result['share_permission'] = repo.permission result['modifier_email'] = repo.last_modifier result['modifier_name'] = email2nickname(repo.last_modifier) result['modifier_contact_email'] = email2contact_email( repo.last_modifier) if repo.share_type == 'personal': result['user_name'] = email2nickname(repo.user) result['user_email'] = repo.user result[ 'contact_email'] = Profile.objects.get_contact_email_by_user( repo.user) usernames.append((repo.repo_id, repo.user)) if repo.share_type == 'group': group = ccnet_api.get_group(repo.group_id) result['group_id'] = repo.group_id result['group_name'] = group.group_name if group else '' gids.append(repo.group_id) returned_result.append(result) user_admins = ExtraSharePermission.objects.batch_is_admin(usernames) group_admins = ExtraGroupsSharePermission.objects.batch_get_repos_with_admin_permission( gids) for result in returned_result: if result['share_type'] == 'group': result['is_admin'] = (result['repo_id'], result['group_id']) in group_admins elif result['share_type'] == 'personal': result['is_admin'] = (result['repo_id'], result['user_email']) in user_admins return Response(returned_result)
def get(self, request, format=None): """ List all shared out repos. Permission checking: 1. all authenticated user can perform this action. """ shared_repos = [] username = request.user.username try: if is_org_context(request): org_id = request.user.org.org_id shared_repos += seafile_api.get_org_share_out_repo_list(org_id, username, -1, -1) shared_repos += seafile_api.get_org_group_repos_by_owner(org_id, username) shared_repos += seafile_api.list_org_inner_pub_repos_by_owner(org_id, username) else: shared_repos += seafile_api.get_share_out_repo_list(username, -1, -1) shared_repos += seafile_api.get_group_repos_by_owner(username) if not request.cloud_mode: shared_repos += seafile_api.list_inner_pub_repos_by_owner(username) except Exception as e: logger.error(e) error_msg = 'Internal Server Error' return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) returned_result = [] shared_repos.sort(lambda x, y: cmp(x.repo_name, y.repo_name)) usernames = [] gids = [] for repo in shared_repos: if repo.is_virtual: continue result = {} result['repo_id'] = repo.repo_id result['repo_name'] = repo.repo_name result['encrypted'] = repo.encrypted result['share_type'] = repo.share_type result['share_permission'] = repo.permission result['modifier_email'] = repo.last_modifier result['modifier_name'] = email2nickname(repo.last_modifier) result['modifier_contact_email'] = email2contact_email(repo.last_modifier) if repo.share_type == 'personal': result['user_name'] = email2nickname(repo.user) result['user_email'] = repo.user result['contact_email'] = Profile.objects.get_contact_email_by_user(repo.user) usernames.append((repo.repo_id, repo.user)) if repo.share_type == 'group': group = ccnet_api.get_group(repo.group_id) result['group_id'] = repo.group_id result['group_name'] = group.group_name if group else '' gids.append(repo.group_id) returned_result.append(result) user_admins = ExtraSharePermission.objects.batch_is_admin(usernames) group_admins = ExtraGroupsSharePermission.objects.batch_get_repos_with_admin_permission(gids) for result in returned_result: if result['share_type'] == 'group': result['is_admin'] = (result['repo_id'], result['group_id']) in group_admins elif result['share_type'] == 'personal': result['is_admin'] = (result['repo_id'], result['user_email']) in user_admins return Response(returned_result)