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
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
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
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
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