def get(self, request, org_id): """ Get all repos in an org. Permission checking: 1. only admin can perform this action. """ org_id = int(org_id) if org_id == 0: error_msg = 'org_id invalid.' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) org = ccnet_api.get_org_by_id(org_id) if not org: error_msg = 'Organization %d not found.' % org_id return api_error(status.HTTP_404_NOT_FOUND, error_msg) try: repos = seafile_api.get_org_repo_list(org_id, -1, -1) except Exception as e: logger.error(e) error_msg = "Internal Server Error" return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) repos_info = [] for repo in repos: repos_info.append(get_org_repo_info(repo)) return Response({'repo_list': repos_info})
def list_org_repos_by_name(org_id, repo_name): repos = [] repos_all = seafile_api.get_org_repo_list(org_id, -1, -1) for repo in repos_all: if repo_name.lower() in repo.name.lower(): try: repo.owner = seafile_api.get_org_repo_owner(repo.id) except SearpcError: repo.owner = "failed to get" repos.append(repo) return repos
def get(self, request, org_id): """ Get all repos in an org. Permission checking: 1. only admin can perform this action. """ if not request.user.admin_permissions.other_permission(): return api_error(status.HTTP_403_FORBIDDEN, 'Permission denied.') org_id = int(org_id) if org_id == 0: error_msg = 'org_id invalid.' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) org = ccnet_api.get_org_by_id(org_id) if not org: error_msg = 'Organization %d not found.' % org_id return api_error(status.HTTP_404_NOT_FOUND, error_msg) try: repos = seafile_api.get_org_repo_list(org_id, -1, -1) except Exception as e: logger.error(e) error_msg = "Internal Server Error" return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) # Use dict to reduce memcache fetch cost in large for-loop. repo_id_2_email_dict = {repo.id: seafile_api.get_org_repo_owner(repo.id) for repo in repos} owner_email_set = set(repo_id_2_email_dict.values()) nickname_dict = {} contact_email_dict = {} for e in owner_email_set: if e not in nickname_dict: nickname_dict[e] = email2nickname(e) if e not in contact_email_dict: contact_email_dict[e] = email2contact_email(e) repos_info = [] for repo in repos: repo_info = {} repo_info['repo_name'] = repo.repo_name owner_email = repo_id_2_email_dict.get(repo.id, '') repo_info['owner_email'] = owner_email repo_info['owner_name'] = nickname_dict.get(owner_email, '') repo_info['owner_contact_email'] = contact_email_dict.get(owner_email, '') repo_info['repo_id'] = repo.id repo_info['encrypted'] = repo.encrypted repos_info.append(repo_info) return Response({'repo_list': repos_info})
def get_org_detailed_info(org): org_id = org.org_id org_info = get_org_info(org) # users users = ccnet_api.get_org_emailusers(org.url_prefix, -1, -1) org_info['users_count'] = len(users) repos = seafile_api.get_org_repo_list(org_id, -1, -1) org_info['repos_count'] = len(repos) # groups groups = ccnet_api.get_org_groups(org_id, -1, -1) org_info['groups_count'] = len(groups) return org_info
def get(self, request, org_id): """List organization libraries """ # resource check org_id = int(org_id) if not ccnet_api.get_org_by_id(org_id): error_msg = 'Organization %s not found.' % org_id return api_error(status.HTTP_404_NOT_FOUND, error_msg) # Make sure page request is an int. If not, deliver first page. try: current_page = int(request.GET.get('page', '1')) per_page = int(request.GET.get('per_page', '25')) except ValueError: current_page = 1 per_page = 25 repos_all = seafile_api.get_org_repo_list( org_id, per_page * (current_page - 1), per_page + 1) page_next = False if len(repos_all) == per_page + 1: page_next = True repos = repos_all[:per_page] repos = filter(lambda r: not r.is_virtual, repos) # get repo id owner dict all_repo_owner = [] repo_id_owner_dict = {} for repo in repos: if repo.id not in repo_id_owner_dict: repo_owner = seafile_api.get_org_repo_owner(repo.id) all_repo_owner.append(repo_owner) repo_id_owner_dict[repo.id] = repo_owner # Use dict to reduce memcache fetch cost in large for-loop. repo_owner_dict = {} for email in set(all_repo_owner): if email not in repo_owner_dict: repo_owner_dict[email] = {} if '@seafile_group' in email: group_id = get_group_id_by_repo_owner(email) group_name = group_id_to_name(group_id) repo_owner_dict[email]['owner_name'] = group_name repo_owner_dict[email]['group_id'] = group_id repo_owner_dict[email]['is_department_repo'] = True else: repo_owner_dict[email]['owner_name'] = email2nickname( email) repo_owner_dict[email]['group_id'] = '' repo_owner_dict[email]['is_department_repo'] = False repo_list = [] for r in repos: repo = {} repo_owner = repo_id_owner_dict[r.id] repo['owner_email'] = repo_owner repo['owner_name'] = repo_owner_dict[repo_owner]['owner_name'] repo['encrypted'] = r.encrypted repo['repo_id'] = r.id repo['repo_name'] = r.name repo['is_department_repo'] = repo_owner_dict[repo_owner][ 'is_department_repo'] repo['group_id'] = repo_owner_dict[repo_owner]['group_id'] repo_list.append(repo) return Response({ 'repo_list': repo_list, 'page': current_page, 'page_next': page_next, })
def org_repo_admin(request): """Show organization libraries. """ org_id = request.user.org.org_id # Make sure page request is an int. If not, deliver first page. try: current_page = int(request.GET.get('page', '1')) per_page = int(request.GET.get('per_page', '25')) except ValueError: current_page = 1 per_page = 25 repos_all = seafile_api.get_org_repo_list(org_id, per_page * (current_page - 1), per_page + 1) repos = repos_all[:per_page] if len(repos_all) == per_page + 1: page_next = True else: page_next = False repos = filter(lambda r: not r.is_virtual, repos) # get repo id owner dict all_repo_owner = [] repo_id_owner_dict = {} for repo in repos: repo_owner = seafile_api.get_org_repo_owner(repo.id) all_repo_owner.append(repo_owner) repo_id_owner_dict[repo.id] = repo_owner # Use dict to reduce memcache fetch cost in large for-loop. name_dict = {} for email in set(all_repo_owner): if email not in name_dict: if '@seafile_group' in email: group_id = get_group_id_by_repo_owner(email) group_name = group_id_to_name(group_id) name_dict[email] = group_name else: name_dict[email] = email2nickname(email) for repo in repos: repo_owner = repo_id_owner_dict[repo.id] repo.owner = repo_owner repo.owner_name = name_dict.get(repo.owner, '') if '@seafile_group' in repo_owner: repo.is_department_repo = True group_id = get_group_id_by_repo_owner(repo_owner) repo.group_id = group_id else: repo.is_department_repo = False repo.group_id = '' return render( request, 'organizations/org_repo_admin.html', { 'repos': repos, 'current_page': current_page, 'prev_page': current_page - 1, 'next_page': current_page + 1, 'per_page': per_page, 'page_next': page_next, })