Пример #1
0
    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})
Пример #2
0
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
Пример #3
0
    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})
Пример #4
0
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
Пример #5
0
    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,
        })
Пример #6
0
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,
        })