Пример #1
0
def show_docs(request, username, repository, docpath, relative_path = None,
        branch = 'master'):
    try:
        project = Project.objects.get(username = username,
                repository = repository,
                branch = branch, deleted = False)
    except Project.DoesNotExist:
        raise Http404

    project_docs = ProjectDocs.objects.filter(project = project).\
            latest('created_at')

    if docpath.endswith('/'):
        docpath = docpath[:-1]

    key_name = '{}/{}/{}/{}/{}/'.format(private_settings.BUCKET_BASE,
            project.get_identifier(), project_docs.build_id,
            project_docs.job_id, docpath)

    if relative_path:
        key_name += relative_path
    else:
        key_name += 'index.html'

    proxy_response = s3util.stream_object(key_name)

    varnishutil.set_cache_group(proxy_response, project_docs)

    return proxy_response
Пример #2
0
def show_docs(request,
              username,
              repository,
              docpath,
              relative_path=None,
              branch='master'):
    try:
        project = Project.objects.get(username=username,
                                      repository=repository,
                                      branch=branch,
                                      deleted=False)
    except Project.DoesNotExist:
        raise Http404

    try:
        project_docs = ProjectDocs.objects.filter(project = project).\
                latest('created_at')
    except ProjectDocs.DoesNotExist:
        raise Http404

    if docpath.endswith('/'):
        docpath = docpath[:-1]

    if docpath in project_docs.get_docpaths() or docpath == 'src':
        # requests for "/user/project/doc/{module|src}/..."
        key_name = '{}/{}/{}/{}/{}/'.format(private_settings.BUCKET_BASE,
                                            project.get_identifier(),
                                            project_docs.build_id,
                                            project_docs.job_id, docpath)

        if relative_path:
            key_name += relative_path
        else:
            key_name += 'index.html'

    else:
        # requests for e.g. "/user/project/doc/main.js"
        key_name = '{}/{}/{}/{}/{}'.format(private_settings.BUCKET_BASE,
                                           project.get_identifier(),
                                           project_docs.build_id,
                                           project_docs.job_id, docpath)

    proxy_response = s3util.stream_object(key_name)

    varnishutil.set_cache_group(proxy_response, project_docs)

    # Mitigate XSS attempts
    proxy_response['Content-Security-Policy'] = \
            "default-src 'none'; " +\
            "script-src 'unsafe-inline' 'self'; " +\
            "font-src http://themes.googleusercontent.com 'self'; "+\
            "style-src http://fonts.googleapis.com 'self';"

    return proxy_response
Пример #3
0
def show_docs(request, username, repository, docpath, relative_path = None,
        branch = 'master'):
    try:
        project = Project.objects.get(username = username,
                repository = repository,
                branch = branch, deleted = False)
    except Project.DoesNotExist:
        raise Http404

    try:
        project_docs = ProjectDocs.objects.filter(project = project).\
                latest('created_at')
    except ProjectDocs.DoesNotExist:
        raise Http404

    if docpath.endswith('/'):
        docpath = docpath[:-1]

    if docpath in project_docs.get_docpaths() or docpath == 'src':
        # requests for "/user/project/doc/{module|src}/..."
        key_name = '{}/{}/{}/{}/{}/'.format(private_settings.BUCKET_BASE,
                project.get_identifier(), project_docs.build_id,
                project_docs.job_id, docpath)

        if relative_path:
            key_name += relative_path
        else:
            key_name += 'index.html'

    else:
        # requests for e.g. "/user/project/doc/main.js"
        key_name = '{}/{}/{}/{}/{}'.format(private_settings.BUCKET_BASE,
                project.get_identifier(), project_docs.build_id,
                project_docs.job_id, docpath)

    proxy_response = s3util.stream_object(key_name)

    varnishutil.set_cache_group(proxy_response, project_docs)

    # Mitigate XSS attempts
    proxy_response['Content-Security-Policy'] = \
            "default-src 'none'; " +\
            "script-src 'unsafe-inline' 'self'; " +\
            "font-src http://themes.googleusercontent.com 'self'; "+\
            "style-src http://fonts.googleapis.com 'self';"

    return proxy_response
Пример #4
0
def show_project(request,
                 username,
                 repository,
                 branch='master',
                 error_message=None,
                 rustci_secure_token=None,
                 delete_project=False):
    try:
        project = Project.objects.get(username=username,
                                      repository=repository,
                                      branch=branch,
                                      deleted=False)
    except Project.DoesNotExist:
        raise Http404
    builds = Build.objects.filter(project_id__exact=project.id)

    # Iterate over builds and create GitHub hash compare
    # fragments like 'cd59a7c...886a4dd' for linking to diff
    if len(builds):
        prev_build = builds[len(builds) - 1]
        # extract Git hash from version strings like:
        # 201310190805~34a1e3d~precise
        version_pattern = re.compile('.*~(.*)~.*')
        for build in reversed(builds):
            match = version_pattern.match(build.package_version)
            if match:
                build.git_hash = match.group(1)

            if prev_build.package_version != build.package_version:
                build.git_diff = prev_build.git_hash + '...' + build.git_hash

            prev_build = build

    response = render(
        request, 'ppatrigger/show_project.html', {
            'project': project,
            'builds': builds,
            'error_message': error_message,
            'rustci_secure_token': rustci_secure_token,
            'title': private_settings.APP_TITLE,
            'delete_project': delete_project
        })

    varnishutil.set_cache_group(response, project)
    return response
Пример #5
0
def show_project(request, username, repository, branch = 'master',
        error_message = None, rustci_secure_token = None,
        delete_project = False):
    try:
        project = Project.objects.get(username = username,
                repository = repository,
                branch = branch, deleted = False)
    except Project.DoesNotExist:
        raise Http404 
    builds = Build.objects.filter(project_id__exact = project.id)

    # Iterate over builds and create GitHub hash compare
    # fragments like 'cd59a7c...886a4dd' for linking to diff
    if len(builds):
        prev_build = builds[len(builds) - 1]
        # extract Git hash from version strings like:
        # 201310190805~34a1e3d~precise
        version_pattern = re.compile('.*~(.*)~.*')
        for build in reversed(builds):
            match = version_pattern.match(build.package_version)
            if match:
                build.git_hash = match.group(1)

            if prev_build.package_version != build.package_version:
                build.git_diff = prev_build.git_hash + '...' + build.git_hash

            prev_build = build

    response = render(request, 'ppatrigger/show_project.html',
            {'project': project,
            'builds': builds,
            'error_message': error_message,
            'rustci_secure_token': rustci_secure_token,
            'title': private_settings.APP_TITLE,
            'delete_project': delete_project})

    varnishutil.set_cache_group(response, project)
    return response