diff --git a/thirdpart/seaserv/__init__.py b/thirdpart/seaserv/__init__.py index 48ca2f895b..0b85f335da 100644 --- a/thirdpart/seaserv/__init__.py +++ b/thirdpart/seaserv/__init__.py @@ -14,7 +14,8 @@ from service import get_repos, get_repo, get_commits, get_branches, \ get_org_repos, is_repo_owner, create_org_repo, is_inner_pub_repo, \ list_org_inner_pub_repos, get_org_id_by_repo_id, list_org_shared_repos, \ list_personal_shared_repos, is_personal_repo, list_inner_pub_repos, \ - is_org_repo_owner, get_org_repo_owner, is_org_repo, get_file_size + is_org_repo_owner, get_org_repo_owner, is_org_repo, get_file_size,\ + list_personal_repos_by_owner from service import get_binding_peerids, is_valid_filename, check_permission,\ is_passwd_set diff --git a/thirdpart/seaserv/service.py b/thirdpart/seaserv/service.py index e7e78e12e2..9586723a93 100644 --- a/thirdpart/seaserv/service.py +++ b/thirdpart/seaserv/service.py @@ -296,6 +296,16 @@ def get_repos(): def get_repo(repo_id): return seafserv_threaded_rpc.get_repo(repo_id) +def list_personal_repos_by_owner(owner): + """ + List users owned repos in personal context. + """ + try: + repos = seafserv_threaded_rpc.list_owned_repos(owner) + except SearpcError: + repos = [] + return repos + def is_repo_owner(user, repo_id): """ Check whether user is repo owner. diff --git a/utils.py b/utils.py index 6917a3b484..3c635fecdc 100644 --- a/utils.py +++ b/utils.py @@ -16,7 +16,9 @@ from pysearpc import SearpcError from seaserv import seafserv_rpc, ccnet_threaded_rpc, seafserv_threaded_rpc, \ get_repo, get_commits, get_group_repoids, CCNET_SERVER_ADDR, \ CCNET_SERVER_PORT, get_org_id_by_repo_id, get_org_by_id, is_org_staff, \ - get_org_id_by_group + get_org_id_by_group, list_personal_shared_repos, \ + get_personal_groups_by_user, list_personal_repos_by_owner, \ + list_org_repos_by_owner, get_org_groups_by_user try: from settings import DOCUMENT_CONVERTOR_ROOT except ImportError: @@ -188,30 +190,30 @@ def get_accessible_repos(request, repo): for dirent in dirs: if stat.S_ISDIR(dirent.props.mode): return True + return False if repo.encrypted: repo.has_subdir = check_has_subdir(repo) accessible_repos = [repo] return accessible_repos - accessible_repos = [] - email = request.user.username - owned_repos = seafserv_threaded_rpc.list_owned_repos(email) - shared_repos = seafserv_threaded_rpc.list_share_repos(email, 'to_email', -1, -1) - groups_repos = [] - groups = ccnet_threaded_rpc.get_groups(email) - for group in groups: - group_repo_ids = get_group_repoids(group.id) - for repo_id in group_repo_ids: - if not repo_id: - continue - group_repo = get_repo(repo_id) - if not group_repo: - continue - group_repo.share_from = seafserv_threaded_rpc.get_group_repo_owner(repo_id) - if email != group_repo.share_from: - groups_repos.append(group_repo) + + if request.user.org: + # org context + org_id = request.user.org['org_id'] + owned_repos = list_org_repos_by_owner(org_id, email) + shared_repos = list_personal_shared_repos(email, 'to_email', -1, -1) + groups_repos = [] + for group in get_org_groups_by_user(org_id, email): + groups_repos.append(get_org_group_repos(org_id, group.id, email)) + else: + # personal context + owned_repos = list_personal_repos_by_owner(email) + shared_repos = list_personal_shared_repos(email, 'to_email', -1, -1) + groups_repos = [] + for group in get_personal_groups_by_user(email): + groups_repos.append(get_group_repos(group.id, email)) def has_repo(repos, repo): for r in repos: @@ -219,11 +221,11 @@ def get_accessible_repos(request, repo): return True return False + accessible_repos = set() for repo in owned_repos + shared_repos + groups_repos: - if not has_repo(accessible_repos, repo): - if not repo.props.encrypted: - accessible_repos.append(repo) - repo.props.has_subdir = check_has_subdir(repo) + if not repo.props.encrypted: + repo.has_subdir = check_has_subdir(repo) + accessible_repos.add(repo) return accessible_repos diff --git a/views.py b/views.py index 7d3f32eb40..4b4db81b09 100644 --- a/views.py +++ b/views.py @@ -261,11 +261,7 @@ class RepoView(CtxSwitchRequiredMixin, RepoMixin, TemplateResponseMixin, def get_accessible_repos(self): if self.user.is_authenticated(): - try: - accessible_repos = get_accessible_repos(self.request, self.repo) - except SearpcError, e: - error_msg = e.msg - return render_error(self.request, error_msg) + accessible_repos = get_accessible_repos(self.request, self.repo) else: accessible_repos = [] return accessible_repos