def list_user_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_to(org_id, username, repo_id) else: share_items = seafile_api.get_org_shared_users_for_subdir(org_id, repo_id, path, username) else: if path == '/': share_items = seafile_api.list_repo_shared_to(username, repo_id) else: share_items = seafile_api.get_shared_users_for_subdir(repo_id, path, username) ret = [] for item in share_items: ret.append({ "share_type": "user", "user_info": { "name": item.user, "nickname": email2nickname(item.user), }, "permission": item.perm, }) return ret
def list_user_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_to(org_id, repo_owner, repo_id) else: share_items = seafile_api.get_org_shared_users_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_to(repo_owner, repo_id) else: share_items = seafile_api.get_shared_users_for_subdir(repo_id, path, repo_owner) # change is_admin to True if user is repo admin. admin_users = ExtraSharePermission.objects.get_admin_users_by_repo(repo_id) ret = [] for item in share_items: ret.append({ "share_type": "user", "user_info": { "name": item.user, "nickname": email2nickname(item.user), }, "permission": item.perm, "is_admin": item.user in admin_users }) return ret
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 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
def has_shared_to_user(repo_id, path, username, 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_to( org_id, repo_owner, repo_id) else: share_items = seafile_api.get_org_shared_users_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_to(repo_owner, repo_id) else: share_items = seafile_api.get_shared_users_for_subdir( repo_id, path, repo_owner) return username in [item.user for item in share_items]
def get_shared_users_by_repo_path(self, repo_id, repo_owner, path='/', org_id=None): """ Get user list this repo/folder is shared to. Return: a list of SharedUser objects (lib/repo.vala) """ if is_valid_org_id(org_id): if path == '/': return seafile_api.list_org_repo_shared_to( org_id, repo_owner, repo_id) else: return seafile_api.get_org_shared_users_for_subdir( org_id, repo_id, path, repo_owner) else: if path == '/': return seafile_api.list_repo_shared_to(repo_owner, repo_id) else: return seafile_api.get_shared_users_for_subdir( repo_id, path, repo_owner)
def list_user_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_to(repo_owner, repo_id) else: share_items = seafile_api.get_shared_users_for_subdir(repo_id, path, repo_owner) ret = [] for item in share_items: email = item.user ret.append({ "user_email": email, "user_name": email2nickname(email), "user_contact_email": email2contact_email(email), "permission": item.perm }) return ret
def has_shared_to_user(repo_id, path, username, 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_to(org_id, repo_owner, repo_id) else: share_items = seafile_api.get_org_shared_users_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_to(repo_owner, repo_id) else: share_items = seafile_api.get_shared_users_for_subdir(repo_id, path, repo_owner) return username in [item.user for item in share_items]
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)