Exemple #1
0
 def list_group_shared_items(self, request, repo_id, path):
     username = request.user.username
     if is_org_context(request):
         org_id = request.user.org.org_id
         if path == '/':
             share_items = seafile_api.list_org_repo_shared_group(
                 org_id, username, repo_id)
         else:
             share_items = seafile_api.get_org_shared_groups_for_subdir(
                 org_id, repo_id, path, username)
     else:
         if path == '/':
             share_items = seafile_api.list_repo_shared_group_by_user(
                 username, repo_id)
         else:
             share_items = seafile_api.get_shared_groups_for_subdir(
                 repo_id, path, username)
     ret = []
     for item in share_items:
         ret.append({
             "share_type": "group",
             "group_info": {
                 "id": item.group_id,
                 "name": seaserv.get_group(item.group_id).group_name,
             },
             "permission": item.perm,
         })
     return ret
Exemple #2
0
 def list_group_shared_items(self, request, repo_id, path):
     if is_org_context(request):
         # when calling seafile API to share authority related functions, change the uesrname to repo owner.
         repo_owner = seafile_api.get_org_repo_owner(repo_id)
         org_id = request.user.org.org_id
         if path == '/':
             share_items = seafile_api.list_org_repo_shared_group(org_id,
                     repo_owner, repo_id)
         else:
             share_items = seafile_api.get_org_shared_groups_for_subdir(org_id,
                     repo_id, path, repo_owner)
     else:
         repo_owner = seafile_api.get_repo_owner(repo_id)
         if path == '/':
             share_items = seafile_api.list_repo_shared_group_by_user(repo_owner, repo_id)
         else:
             share_items = seafile_api.get_shared_groups_for_subdir(repo_id,
                                                                    path, repo_owner)
     ret = []
     # change is_admin to True if user in admin groups.
     admin_groups = ExtraGroupsSharePermission.objects.get_admin_groups_by_repo(repo_id)
     for item in share_items:
         ret.append({
             "share_type": "group",
             "group_info": {
                 "id": item.group_id,
                 "name": seaserv.get_group(item.group_id).group_name,
             },
             "permission": item.perm,
             "is_admin": item.group_id in admin_groups,
         })
     return ret
Exemple #3
0
 def list_group_shared_items(self, request, repo_id, path):
     username = request.user.username
     if is_org_context(request):
         org_id = request.user.org.org_id
         if path == '/':
             share_items = seafile_api.list_org_repo_shared_group(org_id,
                     username, repo_id)
         else:
             share_items = seafile_api.get_org_shared_groups_for_subdir(org_id,
                     repo_id, path, username)
     else:
         if path == '/':
             share_items = seafile_api.list_repo_shared_group_by_user(username, repo_id)
         else:
             share_items = seafile_api.get_shared_groups_for_subdir(repo_id,
                                                                    path, username)
     ret = []
     for item in share_items:
         ret.append({
             "share_type": "group",
             "group_info": {
                 "id": item.group_id,
                 "name": seaserv.get_group(item.group_id).group_name,
             },
             "permission": item.perm,
         })
     return ret
Exemple #4
0
    def list_group_shared_items(self, request, repo_id, path):

        repo_owner = seafile_api.get_repo_owner(repo_id)
        if path == '/':
            share_items = seafile_api.list_repo_shared_group_by_user(repo_owner, repo_id)
        else:
            share_items = seafile_api.get_shared_groups_for_subdir(repo_id,
                    path, repo_owner)

        ret = []
        for item in share_items:

            group_id = item.group_id
            group = ccnet_api.get_group(group_id)

            if not group:
                if path == '/':
                    seafile_api.unset_group_repo(repo_id, group_id,
                            repo_owner)
                else:
                    seafile_api.unshare_subdir_for_group(
                            repo_id, path, repo_owner, group_id)
                continue

            ret.append({
                "group_id": group_id,
                "group_name": group.group_name,
                "permission": item.perm,
            })
        return ret
    def list_group_shared_items(self, request, repo_id, path):
        if is_org_context(request):
            # when calling seafile API to share authority related functions, change the uesrname to repo owner.
            repo_owner = seafile_api.get_org_repo_owner(repo_id)
            org_id = request.user.org.org_id
            if path == '/':
                share_items = seafile_api.list_org_repo_shared_group(
                    org_id, repo_owner, repo_id)
            else:
                share_items = seafile_api.get_org_shared_groups_for_subdir(
                    org_id, repo_id, path, repo_owner)
        else:
            repo_owner = seafile_api.get_repo_owner(repo_id)
            if path == '/':
                share_items = seafile_api.list_repo_shared_group_by_user(
                    repo_owner, repo_id)
            else:
                share_items = seafile_api.get_shared_groups_for_subdir(
                    repo_id, path, repo_owner)
        ret = []
        # change is_admin to True if user in admin groups.
        admin_groups = ExtraGroupsSharePermission.objects.get_admin_groups_by_repo(
            repo_id)
        for item in share_items:

            if '@seafile_group' in repo_owner and \
                    repo_owner.split('@')[0] == str(item.group_id):
                continue

            group_id = item.group_id
            group = ccnet_api.get_group(group_id)
            if not group:
                if is_org_context(request):
                    if path == '/':
                        seafile_api.del_org_group_repo(repo_id, org_id,
                                                       group_id)
                    else:
                        seafile_api.org_unshare_subdir_for_group(
                            org_id, repo_id, path, repo_owner, group_id)
                else:
                    if path == '/':
                        seafile_api.unset_group_repo(repo_id, group_id,
                                                     repo_owner)
                    else:
                        seafile_api.unshare_subdir_for_group(
                            repo_id, path, repo_owner, group_id)
                continue

            ret.append({
                "share_type": "group",
                "group_info": {
                    "id": group_id,
                    "name": group.group_name,
                },
                "permission": item.perm,
                "is_admin": group_id in admin_groups,
            })
        return ret
Exemple #6
0
 def get_shared_groups_by_repo_path(self, repo_id, repo_owner, path='/',
                                    org_id=None):
     if is_valid_org_id(org_id):
         if path == '/':
             return seafile_api.list_org_repo_shared_group(
                 org_id, repo_owner, repo_id)
         else:
             return seafile_api.get_org_shared_groups_for_subdir(
                 org_id, repo_id, path, repo_owner)
     else:
         if path == '/':
             return seafile_api.list_repo_shared_group_by_user(
                 repo_owner, repo_id)
         else:
             return seafile_api.get_shared_groups_for_subdir(
                 repo_id, path, repo_owner)
Exemple #7
0
def has_shared_to_group(repo_id, path, gid, org_id=None):
    if org_id:
        # when calling seafile API to share authority related functions, change the uesrname to repo owner.
        repo_owner = seafile_api.get_org_repo_owner(repo_id)
        if path == '/':
            share_items = seafile_api.list_org_repo_shared_group(org_id,
                    repo_owner, repo_id)
        else:
            share_items = seafile_api.get_org_shared_groups_for_subdir(org_id,
                    repo_id, path, repo_owner)
    else:
        repo_owner = seafile_api.get_repo_owner(repo_id)
        if path == '/':
            share_items = seafile_api.list_repo_shared_group_by_user(repo_owner, repo_id)
        else:
            share_items = seafile_api.get_shared_groups_for_subdir(repo_id,
                                                                   path, repo_owner)

    return gid in [item.group_id for item in share_items]
Exemple #8
0
 def get_shared_groups_by_repo_path(self,
                                    repo_id,
                                    repo_owner,
                                    path='/',
                                    org_id=None):
     if is_valid_org_id(org_id):
         if path == '/':
             return seafile_api.list_org_repo_shared_group(
                 org_id, repo_owner, repo_id)
         else:
             return seafile_api.get_org_shared_groups_for_subdir(
                 org_id, repo_id, path, repo_owner)
     else:
         if path == '/':
             return seafile_api.list_repo_shared_group_by_user(
                 repo_owner, repo_id)
         else:
             return seafile_api.get_shared_groups_for_subdir(
                 repo_id, path, repo_owner)
Exemple #9
0
def has_shared_to_group(repo_id, path, gid, org_id=None):
    if is_valid_org_id(org_id):
        # when calling seafile API to share authority related functions, change the uesrname to repo owner.
        repo_owner = seafile_api.get_org_repo_owner(repo_id)
        if path == '/':
            share_items = seafile_api.list_org_repo_shared_group(org_id,
                    repo_owner, repo_id)
        else:
            share_items = seafile_api.get_org_shared_groups_for_subdir(org_id,
                    repo_id, path, repo_owner)
    else:
        repo_owner = seafile_api.get_repo_owner(repo_id)
        if path == '/':
            share_items = seafile_api.list_repo_shared_group_by_user(repo_owner, repo_id)
        else:
            share_items = seafile_api.get_shared_groups_for_subdir(repo_id,
                                                                   path, repo_owner)

    return gid in [item.group_id for item in share_items]
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
Exemple #11
0
    def get(self, request, repo, path, share_type):
        """ List user/group shares

        Permission checking:
        1. admin user.
        """

        result = []

        # current `request.user.username` is admin user,
        # so need to identify the repo owner specifically.
        repo_owner = seafile_api.get_repo_owner(repo.repo_id)
        if share_type == 'user':
            try:
                if path == '/':
                    share_items = seafile_api.list_repo_shared_to(
                        repo_owner, repo.repo_id)
                else:
                    share_items = seafile_api.get_shared_users_for_subdir(
                        repo.repo_id, path, repo_owner)
            except Exception as e:
                logger.error(e)
                error_msg = 'Internal Server Error'
                return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR,
                                 error_msg)

            admin_users = ExtraSharePermission.objects.get_admin_users_by_repo(
                repo.repo_id)
            for share_item in share_items:

                user_email = share_item.user
                user_name = email2nickname(user_email) if user_email else '--'

                share_info = {}
                share_info['repo_id'] = repo.repo_id
                share_info['path'] = path
                share_info['share_type'] = share_type
                share_info['user_email'] = user_email
                share_info['user_name'] = user_name
                share_info['permission'] = share_item.perm
                share_info['is_admin'] = user_email in admin_users

                result.append(share_info)

        if share_type == 'group':
            try:
                if path == '/':
                    share_items = seafile_api.list_repo_shared_group_by_user(
                        repo_owner, repo.repo_id)
                else:
                    share_items = seafile_api.get_shared_groups_for_subdir(
                        repo.repo_id, path, repo_owner)
            except Exception as e:
                logger.error(e)
                error_msg = 'Internal Server Error'
                return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR,
                                 error_msg)

            admin_groups = ExtraGroupsSharePermission.objects.get_admin_groups_by_repo(
                repo.repo_id)
            for share_item in share_items:

                group_id = share_item.group_id
                group = ccnet_api.get_group(group_id)
                group_name = group.group_name if group else '--'

                share_info = {}
                share_info['repo_id'] = repo.repo_id
                share_info['path'] = path
                share_info['share_type'] = share_type
                share_info['group_id'] = group_id
                share_info['group_name'] = group_name
                share_info['permission'] = share_item.perm
                share_info['is_admin'] = group_id in admin_groups

                result.append(share_info)

        return Response(result)
Exemple #12
0
    def get(self, request, repo, path, share_type):
        """ List user/group shares

        Permission checking:
        1. admin user.
        """

        result = []

        # current `request.user.username` is admin user,
        # so need to identify the repo owner specifically.
        repo_owner = seafile_api.get_repo_owner(repo.repo_id)
        if share_type == 'user':
            try:
                if path == '/':
                    share_items = seafile_api.list_repo_shared_to(
                            repo_owner, repo.repo_id)
                else:
                    share_items = seafile_api.get_shared_users_for_subdir(
                            repo.repo_id, path, repo_owner)
            except Exception as e:
                logger.error(e)
                error_msg = 'Internal Server Error'
                return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)

            admin_users = ExtraSharePermission.objects.get_admin_users_by_repo(repo.repo_id)
            for share_item in share_items:

                user_email = share_item.user
                user_name = email2nickname(user_email) if user_email else '--'

                share_info = {}
                share_info['repo_id'] = repo.repo_id
                share_info['path'] = path
                share_info['share_type'] = share_type
                share_info['user_email'] = user_email
                share_info['user_name'] = user_name
                share_info['permission'] = share_item.perm
                share_info['is_admin'] = user_email in admin_users

                result.append(share_info)

        if share_type == 'group':
            try:
                if path == '/':
                    share_items = seafile_api.list_repo_shared_group_by_user(
                            repo_owner, repo.repo_id)
                else:
                    share_items = seafile_api.get_shared_groups_for_subdir(
                            repo.repo_id, path, repo_owner)
            except Exception as e:
                logger.error(e)
                error_msg = 'Internal Server Error'
                return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)

            admin_groups = ExtraGroupsSharePermission.objects.get_admin_groups_by_repo(repo.repo_id)
            for share_item in share_items:

                group_id = share_item.group_id
                group = ccnet_api.get_group(group_id)
                group_name = group.group_name if group else '--'

                share_info = {}
                share_info['repo_id'] = repo.repo_id
                share_info['path'] = path
                share_info['share_type'] = share_type
                share_info['group_id'] = group_id
                share_info['group_name'] = group_name
                share_info['permission'] = share_item.perm
                share_info['is_admin'] = group_id in admin_groups

                result.append(share_info)

        return Response(result)