def test_subdir_permission_in_virtual_repo(repo, group, permission):
    api.post_dir(repo.id, '/dir1', 'subdir1', USER)
    api.post_dir(repo.id, '/dir2', 'subdir2', USER)

    v_repo_id_1 = api.share_subdir_to_user(repo.id, '/dir1', USER, USER2,
                                           permission)
    v_subdir_repo_id_1 = api.create_virtual_repo(v_repo_id_1,
                                                 '/subdir1',
                                                 'subdir1',
                                                 'test_desc',
                                                 USER,
                                                 passwd='')
    assert api.check_permission(v_subdir_repo_id_1, USER2) == permission

    assert ccnet_api.group_add_member(group.id, USER, USER2) == 0
    v_repo_id_2 = api.share_subdir_to_group(repo.id, '/dir2', USER, group.id,
                                            permission)
    v_subdir_repo_id_2 = api.create_virtual_repo(v_repo_id_2,
                                                 '/subdir2',
                                                 'subdir2',
                                                 'test_desc',
                                                 USER,
                                                 passwd='')
    assert api.check_permission(v_subdir_repo_id_2, USER2) == permission

    assert api.unshare_subdir_for_user(repo.id, '/dir1', USER, USER2) == 0
    assert api.unshare_subdir_for_group(repo.id, '/dir2', USER, group.id) == 0
Exemplo n.º 2
0
def test_share_repo_to_group(repo, group, permission):
    assert api.check_permission(repo.id, USER) == 'rw'
    assert api.check_permission(repo.id, USER2) is None

    repos = api.get_repos_by_group(group.id)
    assert len(repos) == 0

    group_list = ccnet_api.get_groups(USER)
    assert len(group_list) == 1
    group_list = ccnet_api.get_groups(USER2)
    assert len(group_list) == 0

    api.group_share_repo(repo.id, group.id, USER, permission)
    repos = api.get_repos_by_group(group.id)
    assert_repo_with_permission(repo, repos, permission)

    ccnet_api.group_add_member(group.id, USER, USER2)
    group_list = ccnet_api.get_groups(USER2)
    assert len(group_list) == 1
    group = group_list[0]
    assert group.id == group.id

    repos2 = api.get_repos_by_group(group.id)
    assert_repo_with_permission(repo, repos2, permission)

    assert api.check_permission(repo.id, USER2) == permission

    api.group_unshare_repo(repo.id, group.id, USER)
    repos = api.get_repos_by_group(group.id)
    assert len(repos) == 0

    assert api.check_permission(repo.id, USER2) is None
def test_share_repo_to_user(repo, permission):
    assert api.check_permission(repo.id, USER) == 'rw'
    assert api.check_permission(repo.id, USER2) is None

    assert api.repo_has_been_shared(repo.id) == False

    api.share_repo(repo.id, USER, USER2, permission)
    assert api.check_permission(repo.id, USER2) == permission

    assert api.repo_has_been_shared(repo.id)

    repos = api.get_share_in_repo_list(USER2, 0, 1)
    assert_repo_with_permission(repo, repos, permission)

    repos = api.get_share_out_repo_list(USER, 0, 1)
    assert_repo_with_permission(repo, repos, permission)

    users = api.list_repo_shared_to(USER, repo.id)
    assert len(users) == 1
    assert users[0].repo_id == repo.id
    assert users[0].user == USER2
    assert users[0].perm == permission

    api.remove_share(repo.id, USER, USER2)
    assert api.check_permission(repo.id, USER2) is None
def test_update_share_subdir_perm_for_user(repo, permission_to_share, permission_to_update):
    v_repo_id =  api.share_subdir_to_user(repo.id, '/dir1', USER, USER2, permission_to_share)
    assert api.check_permission(v_repo_id, USER2) == permission_to_share

    api.update_share_subdir_perm_for_user(repo.id, '/dir1', USER, USER2, permission_to_update)
    assert api.check_permission(v_repo_id, USER2) == permission_to_update

    api.unshare_subdir_for_user(repo.id, '/dir1', USER, USER2) == 0
def test_update_share_subdir_perm_for_group(repo, group, permission_to_update, permission_to_share):
    ccnet_api.group_add_member(group.id, USER, USER2)
    v_repo_id = api.share_subdir_to_group(repo.id, '/dir1', USER, group.id, permission_to_share)
    assert api.check_permission(v_repo_id, USER2) == permission_to_share

    api.update_share_subdir_perm_for_group(repo.id, '/dir1', USER, group.id, permission_to_update)
    assert api.check_permission(v_repo_id, USER2) == permission_to_update

    api.unshare_subdir_for_group(repo.id, '/dir1', USER, group.id)
def test_set_share_permission(repo, permission_to_share, permission_to_set):
    assert api.check_permission(repo.id, USER2) == None

    api.share_repo(repo.id, USER, USER2, permission_to_share)
    assert api.check_permission(repo.id, USER2) == permission_to_share

    api.set_share_permission(repo.id, USER, USER2, permission_to_set)
    assert api.check_permission(repo.id, USER2) == permission_to_set

    api.remove_share(repo.id, USER, USER2)
def set_group_repo_permission(repo,  group, permission_to_share, permission_to_set):
    ccnet_api.group_add_member(group.id, USER, USER2)
    assert api.check_permission(repo.id, USER2) == None

    api.set_group_repo(repo.id, group.id, USER, permission_to_share)
    assert api.check_permission(repo.id, USER2) == permission_to_share

    api.set_group_repo_permission(group.id, repo.id, permission_to_set)
    assert api.check_permission(repo.id, USER2) == permission_to_set

    api.group_unshare_repo(repo.id, group.id, USER)
Exemplo n.º 8
0
def test_share_repo_to_user(repo, permission):
    assert api.check_permission(repo.id, USER) == 'rw'
    assert api.check_permission(repo.id, USER2) is None

    api.share_repo(repo.id, USER, USER2, permission)
    assert api.check_permission(repo.id, USER2) == permission

    repos = api.get_share_in_repo_list(USER2, 0, 1)
    assert_repo_with_permission(repo, repos, permission)

    api.remove_share(repo.id, USER, USER2)
    assert api.check_permission(repo.id, USER2) is None
Exemplo n.º 9
0
def test_repo_perm_in_structure(repo, permission):
    id1 = ccnet_api.create_group('group1', USER, parent_group_id=-1)
    id2 = ccnet_api.create_group('group2', USER, parent_group_id=id1)
    assert id1 != -1 and id2 != -1

    assert ccnet_api.group_add_member(id2, USER, USER2) != -1
    assert api.group_share_repo(repo.id, id1, USER2, permission) != -1
    assert api.check_permission(repo.id, USER2) == permission

    assert api.group_unshare_repo(repo.id, id1, USER2) != -1
    assert api.check_permission(repo.id, USER2) == None

    assert ccnet_api.remove_group(id2) != -1
    assert ccnet_api.remove_group(id1) != -1
Exemplo n.º 10
0
def test_share_repo(repo, permission):
    assert api.check_permission(repo.id, USER2) is None

    api.share_repo(repo.id, USER, USER2, permission)
    assert api.check_permission(repo.id, USER2) == permission

    repos = api.get_share_in_repo_list(USER2, 0, 1)
    assert len(repos) == 1
    r = repos[0]
    assert r.id == repo.id
    assert r.permission == permission

    api.remove_share(repo.id, USER, USER2)
    assert api.check_permission(repo.id, USER2) is None
Exemplo n.º 11
0
def test_share_dir_to_group(repo, group, permission):
    assert ccnet_api.group_add_member(group.id, USER, USER2) == 0
    v_repo_id_1 = api.share_subdir_to_group(repo.id, '/dir1', USER, group.id,
                                            permission)
    v_repo_id_2 = api.share_subdir_to_group(repo.id, '/dir2', USER, group.id,
                                            permission)

    assert api.check_permission(v_repo_id_1, USER2) == permission
    assert api.check_permission(v_repo_id_2, USER2) == permission

    assert api.del_file(repo.id, '/', 'dir1', USER) == 0
    assert api.unshare_subdir_for_group(repo.id, '/dir2', USER, group.id) == 0

    assert api.check_permission(v_repo_id_1, USER2) is None
    assert api.check_permission(v_repo_id_2, USER2) is None
Exemplo n.º 12
0
    def handleCopy(self, destPath, depthInfinity):
        if self.provider.readonly:
            raise DAVError(HTTP_FORBIDDEN)

        parts = destPath.strip("/").split("/", 1)
        if len(parts) <= 1:
            raise DAVError(HTTP_BAD_REQUEST)
        repo_name = parts[0]
        rel_path = parts[1]

        dest_dir, dest_file = os.path.split(rel_path)
        dest_repo = getRepoByName(repo_name, self.username)

        if seafile_api.check_permission(dest_repo.id, self.username) != "rw":
            raise DAVError(HTTP_FORBIDDEN)

        src_dir, src_file = os.path.split(self.rel_path)
        if not src_file:
            raise DAVError(HTTP_BAD_REQUEST)

        if not seafile_api.is_valid_filename(dest_repo.id, dest_file):
            raise DAVError(HTTP_BAD_REQUEST)

        seafile_api.copy_file(self.repo.id, src_dir, src_file, dest_repo.id,
                              dest_dir, dest_file, self.username,
                              NEED_PROGRESS, SYNCHRONOUS)

        return True
Exemplo n.º 13
0
    def handleCopy(self, destPath, depthInfinity):
        if self.provider.readonly:
            raise DAVError(HTTP_FORBIDDEN)

        parts = destPath.strip("/").split("/", 1)
        if len(parts) <= 1:
            raise DAVError(HTTP_BAD_REQUEST)
        repo_name = parts[0]
        rel_path = parts[1]

        dest_dir, dest_file = os.path.split(rel_path)
        dest_repo = getRepoByName(repo_name, self.username)

        if seafile_api.check_permission(dest_repo.id, self.username) != "rw":
            raise DAVError(HTTP_FORBIDDEN)

        src_dir, src_file = os.path.split(self.rel_path)
        if not src_file:
            raise DAVError(HTTP_BAD_REQUEST)

        if not seafile_api.is_valid_filename(dest_repo.id, dest_file):
            raise DAVError(HTTP_BAD_REQUEST)

        seafile_api.copy_file(self.repo.id, src_dir, src_file,
                              dest_repo.id, dest_dir, dest_file, self.username, NEED_PROGRESS, SYNCHRONOUS)

        return True
Exemplo n.º 14
0
    def handleMove(self, destPath):
        if self.provider.readonly:
            raise DAVError(HTTP_FORBIDDEN)

        parts = destPath.strip("/").split("/", 1)
        if len(parts) <= 1:
            raise DAVError(HTTP_BAD_REQUEST)
        repo_name = parts[0]
        rel_path = parts[1]

        dest_dir, dest_file = os.path.split(rel_path)
        dest_repo = getRepoByName(repo_name, self.username)

        if seafile_api.check_permission(dest_repo.id, self.username) != "rw":
            raise DAVError(HTTP_FORBIDDEN)

        src_dir, src_file = os.path.split(self.rel_path)
        if not src_file:
            raise DAVError(HTTP_BAD_REQUEST)

        if not seafile_api.is_valid_filename(dest_repo.id, dest_file):
            raise DAVError(HTTP_BAD_REQUEST)

        # some clients such as GoodReader requires "overwrite" semantics
        file_id_dest = seafile_api.get_file_id_by_path(dest_repo.id, rel_path)
        if file_id_dest != None:
            seafile_api.del_file(dest_repo.id, dest_dir, dest_file,
                                 self.username)

        seafile_api.move_file(self.repo.id, src_dir, src_file, dest_repo.id,
                              dest_dir, dest_file, self.username,
                              NEED_PROGRESS, SYNCHRONOUS)

        return True
Exemplo n.º 15
0
def test_share_dir_to_user(repo, permission):
    v_repo_id_1 = api.share_subdir_to_user(repo.id, '/dir1', USER, USER2,
                                           permission)
    v_repo_id_2 = api.share_subdir_to_user(repo.id, '/dir2', USER, USER2,
                                           permission)
    assert api.check_permission(v_repo_id_1, USER2) == permission
    assert api.check_permission(v_repo_id_2, USER2) == permission

    vir_repo_2 = api.get_shared_repo_by_path(repo.id, '/dir2', USER2)
    assert vir_repo_2.permission == permission

    assert api.del_file(repo.id, '/', 'dir1', USER) == 0
    assert api.unshare_subdir_for_user(repo.id, '/dir2', USER, USER2) == 0

    assert api.get_shared_repo_by_path(repo.id, '/dir1', USER2) is None
    assert api.get_shared_repo_by_path(repo.id, '/dir2', USER2) is None
Exemplo n.º 16
0
    def handleMove(self, destPath):
        if self.provider.readonly:
            raise DAVError(HTTP_FORBIDDEN)

        parts = destPath.strip("/").split("/", 1)
        if len(parts) <= 1:
            raise DAVError(HTTP_BAD_REQUEST)
        repo_name = parts[0]
        rel_path = parts[1]

        dest_dir, dest_file = os.path.split(rel_path)
        dest_repo = getRepoByName(repo_name, self.username)

        if seafile_api.check_permission(dest_repo.id, self.username) != "rw":
            raise DAVError(HTTP_FORBIDDEN)

        src_dir, src_file = os.path.split(self.rel_path)
        if not src_file:
            raise DAVError(HTTP_BAD_REQUEST)

        if not seafile_api.is_valid_filename(dest_repo.id, dest_file):
            raise DAVError(HTTP_BAD_REQUEST)

        # some clients such as GoodReader requires "overwrite" semantics
        file_id_dest = seafile_api.get_file_id_by_path(dest_repo.id, rel_path)
        if file_id_dest != None:
            seafile_api.del_file(dest_repo.id, dest_dir, dest_file, self.username)

        seafile_api.move_file(self.repo.id, src_dir, src_file,
                              dest_repo.id, dest_dir, dest_file, self.username, NEED_PROGRESS, SYNCHRONOUS)

        return True
def test_share_dir_to_group(repo, group, permission):
    assert ccnet_api.group_add_member(group.id, USER, USER2) == 0
    v_repo_id_1 = api.share_subdir_to_group(repo.id, '/dir1', USER, group.id, permission)
    v_repo_id_2 = api.share_subdir_to_group(repo.id, '/dir2', USER, group.id, permission)

    assert api.check_permission(v_repo_id_1, USER2) == permission
    assert api.check_permission(v_repo_id_2, USER2) == permission

    repo_get = api.get_group_shared_repo_by_path (repo.id, '/dir1', group.id)
    assert repo_get and repo_get.repo_id == v_repo_id_1

    users = api.get_shared_groups_for_subdir(repo.id, '/dir1', USER)
    assert len(users) == 1

    assert api.del_file(repo.id, '/', 'dir1', USER) == 0
    assert api.unshare_subdir_for_group(repo.id, '/dir2', USER, group.id) == 0

    assert api.check_permission(v_repo_id_1, USER2) is None
    assert api.check_permission(v_repo_id_2, USER2) is None
Exemplo n.º 18
0
    def handleDelete(self):
        if self.provider.readonly:
            raise DAVError(HTTP_FORBIDDEN)

        if seafile_api.check_permission(self.repo.id, self.username) != "rw":
            raise DAVError(HTTP_FORBIDDEN)

        parent, filename = os.path.split(self.rel_path)
        seafile_api.del_file(self.repo.id, parent, filename, self.username)

        return True
Exemplo n.º 19
0
    def handleDelete(self):
        if self.provider.readonly:
            raise DAVError(HTTP_FORBIDDEN)

        if seafile_api.check_permission(self.repo.id, self.username) != "rw":
            raise DAVError(HTTP_FORBIDDEN)

        parent, filename = os.path.split(self.rel_path)
        seafile_api.del_file(self.repo.id, parent, filename, self.username)

        return True
Exemplo n.º 20
0
def test_share_dir_to_user(repo, permission):
    v_repo_id_1 = api.share_subdir_to_user(repo.id, '/dir1', USER, USER2,
                                           permission)
    v_repo_id_2 = api.share_subdir_to_user(repo.id, '/dir2', USER, USER2,
                                           permission)
    assert api.check_permission(v_repo_id_1, USER2) == permission
    assert api.check_permission(v_repo_id_2, USER2) == permission

    vir_repo_2 = api.get_shared_repo_by_path(repo.id, '/dir2', USER2)
    assert vir_repo_2.permission == permission

    users = api.get_shared_users_for_subdir(repo.id, '/dir1', USER)
    assert len(users) == 1 and users[0].user == USER2

    assert api.del_file(repo.id, '/', 'dir1', USER) == 0
    assert api.unshare_subdir_for_user(repo.id, '/dir2', USER, USER2) == 0

    time.sleep(1)

    assert api.get_shared_repo_by_path(repo.id, '/dir1', USER2) is None
    assert api.get_shared_repo_by_path(repo.id, '/dir2', USER2) is None
Exemplo n.º 21
0
    def beginWrite(self, contentType=None):
        """Open content as a stream for writing.

        See DAVResource.beginWrite()
        """
        assert not self.isCollection
        if self.provider.readonly:
            raise DAVError(HTTP_FORBIDDEN)

        if seafile_api.check_permission(self.repo.id, self.username) != "rw":
            raise DAVError(HTTP_FORBIDDEN)

        fd, path = tempfile.mkstemp(dir=self.provider.tmpdir)
        self.tmpfile_path = path
        return os.fdopen(fd, "wb")
Exemplo n.º 22
0
    def beginWrite(self, contentType=None):
        """Open content as a stream for writing.

        See DAVResource.beginWrite()
        """
        assert not self.isCollection
        if self.provider.readonly:
            raise DAVError(HTTP_FORBIDDEN)

        if seafile_api.check_permission(self.repo.id, self.username) != "rw":
            raise DAVError(HTTP_FORBIDDEN)

        fd, path = tempfile.mkstemp(dir=self.provider.tmpdir)
        self.tmpfile_path = path
        return os.fdopen(fd, "wb")
Exemplo n.º 23
0
    def createCollection(self, name):
        """Create a new collection as member of self.

        See DAVResource.createCollection()
        """
        assert not "/" in name
        if self.provider.readonly:
            raise DAVError(HTTP_FORBIDDEN)

        if seafile_api.check_permission(self.repo.id, self.username) != "rw":
            raise DAVError(HTTP_FORBIDDEN)

        if not seafile_api.is_valid_filename(self.repo.id, name):
            raise DAVError(HTTP_BAD_REQUEST)

        seafile_api.post_dir(self.repo.id, self.rel_path, name, self.username)
Exemplo n.º 24
0
    def createCollection(self, name):
        """Create a new collection as member of self.

        See DAVResource.createCollection()
        """
        assert not "/" in name
        if self.provider.readonly:
            raise DAVError(HTTP_FORBIDDEN)

        if seafile_api.check_permission(self.repo.id, self.username) != "rw":
            raise DAVError(HTTP_FORBIDDEN)

        if not seafile_api.is_valid_filename(self.repo.id, name):
            raise DAVError(HTTP_BAD_REQUEST)

        seafile_api.post_dir(self.repo.id, self.rel_path, name, self.username)
Exemplo n.º 25
0
    def createEmptyResource(self, name):
        """Create an empty (length-0) resource.

        See DAVResource.createEmptyResource()
        """
        assert not "/" in name
        if self.provider.readonly:
            raise DAVError(HTTP_FORBIDDEN)

        if seafile_api.check_permission(self.repo.id, self.username) != "rw":
            raise DAVError(HTTP_FORBIDDEN)

        try:
            seafile_api.post_empty_file(self.repo.id, self.rel_path, name, self.username)
        except SearpcError, e:
            if e.msg == 'Invalid file name':
                raise DAVError(HTTP_BAD_REQUEST)
            raise
Exemplo n.º 26
0
    def beginWrite(self, contentType=None, isnewfile=True, contentlength=-1):
        """Open content as a stream for writing.

        See DAVResource.beginWrite()
        """
        assert not self.isCollection
        if self.provider.readonly:
            raise DAVError(HTTP_FORBIDDEN)

        if seafile_api.check_permission(self.repo.id, self.username) != "rw":
            raise DAVError(HTTP_FORBIDDEN)

        if not self.check_repo_owner_quota(isnewfile, contentlength):
            raise DAVError(HTTP_FORBIDDEN, "The quota of the repo owner is exceeded")

        fd, path = tempfile.mkstemp(dir=self.provider.tmpdir)
        self.tmpfile_path = path
        return os.fdopen(fd, "wb")
Exemplo n.º 27
0
    def createEmptyResource(self, name):
        """Create an empty (length-0) resource.

        See DAVResource.createEmptyResource()
        """
        assert not "/" in name
        if self.provider.readonly:
            raise DAVError(HTTP_FORBIDDEN)

        if seafile_api.check_permission(self.repo.id, self.username) != "rw":
            raise DAVError(HTTP_FORBIDDEN)

        try:
            seafile_api.post_empty_file(self.repo.id, self.rel_path, name,
                                        self.username)
        except SearpcError, e:
            if e.msg == 'Invalid file name':
                raise DAVError(HTTP_BAD_REQUEST)
            raise
Exemplo n.º 28
0
    def get(self, request, repo_id):
        """
        Get auto del days of a repo

        perm: rw, r, cloud-edit, preview
        """

        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)

        perm = seafile_api.check_permission(repo_id, request.user.username)
        if not perm:
            return api_error(status.HTTP_403_FORBIDDEN, 'Permission denied.')

        try:
            repo_auto_delete = RepoAutoDelete.objects.get(repo_id=repo_id)
        except RepoAutoDelete.DoesNotExist:
            return Response({'auto_delete_days': 0})

        return Response({'auto_delete_days': repo_auto_delete.days})
Exemplo n.º 29
0
def test_share_repo_to_group(repo, group, permission):
    assert api.check_permission(repo.id, USER) == 'rw'
    assert api.check_permission(repo.id, USER2) is None

    repos = api.get_repos_by_group(group.id)
    assert len(repos) == 0

    group_list = ccnet_api.get_groups(USER)
    assert len(group_list) == 1
    group_list = ccnet_api.get_groups(USER2)
    assert len(group_list) == 0

    api.group_share_repo(repo.id, group.id, USER, permission)
    repos = api.get_repos_by_group(group.id)
    assert_repo_with_permission(repo, repos, permission)

    group_ids = api.get_shared_group_ids_by_repo(repo.id)
    assert group_ids[0] == str(group.id)

    group_list = api.list_repo_shared_group_by_user(USER, repo.id)
    assert len(group_list) == 1
    group_list = api.list_repo_shared_group_by_user(USER2, repo.id)
    assert len(group_list) == 0

    repo_get = api.get_group_shared_repo_by_path(repo.id, None, group.id)
    assert repo_get and repo_get.repo_id == repo.id

    ccnet_api.group_add_member(group.id, USER, USER2)
    group_list = ccnet_api.get_groups(USER2)
    assert len(group_list) == 1
    group = group_list[0]
    assert group.id == group.id

    repos2 = api.get_repos_by_group(group.id)
    assert_repo_with_permission(repo, repos2, permission)

    assert api.check_permission(repo.id, USER2) == permission

    repos = api.get_group_repos_by_user(USER)
    assert len(repos) == 1

    repoids = api.get_group_repoids(group.id)
    assert len(repoids) == 1

    repos = api.get_group_repos_by_owner(USER)
    assert len(repos) == 1
    api.remove_group_repos_by_owner(group.id, USER)
    repos = api.get_group_repos_by_owner(USER)
    assert len(repos) == 0

    api.set_group_repo(repo.id, group.id, USER, permission)
    repos = api.get_repos_by_group(group.id)
    assert len(repos) == 1
    api.remove_group_repos(group.id)
    repos = api.get_repos_by_group(group.id)
    assert len(repos) == 0

    api.group_unshare_repo(repo.id, group.id, USER)
    repos = api.get_repos_by_group(group.id)
    assert len(repos) == 0

    assert api.check_permission(repo.id, USER2) is None