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
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
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
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
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)
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]
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
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)
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)