def problem_data_file(request, problem, path): object = get_object_or_404(Problem, code=problem) if not object.is_editable_by(request.user): raise Http404() problem_dir = problem_data_storage.path(problem) if os.path.commonpath((problem_data_storage.path( os.path.join(problem, path)), problem_dir)) != problem_dir: raise Http404() response = HttpResponse() if hasattr(settings, 'DMOJ_PROBLEM_DATA_INTERNAL'): url_path = '%s/%s/%s' % (settings.DMOJ_PROBLEM_DATA_INTERNAL, problem, path) else: url_path = None try: add_file_response(request, response, url_path, os.path.join(problem, path), problem_data_storage) except IOError: raise Http404() response['Content-Type'] = 'application/octet-stream' return response
def problem_data_file(request, problem, path): object = get_object_or_404(Problem, code=problem) if not object.is_editable_by(request.user): raise Http404() problem_dir = problem_data_storage.path(problem) if os.path.commonpath((problem_data_storage.path(os.path.join(problem, path)), problem_dir)) != problem_dir: raise Http404() response = HttpResponse() if hasattr(settings, 'DMOJ_PROBLEM_DATA_INTERNAL') and request.META.get('SERVER_SOFTWARE', '').startswith('nginx/'): response['X-Accel-Redirect'] = '%s/%s/%s' % (settings.DMOJ_PROBLEM_DATA_INTERNAL, problem, path) else: try: with problem_data_storage.open(os.path.join(problem, path), 'rb') as f: response.content = f.read() except IOError: raise Http404() response['Content-Type'] = 'application/octet-stream' return response