root /var/www/html/;
+ set $bucket s3.gra.io.cloud.ovh.net;
+
location / {
if (-f $document_root/maintenance/index.html) {
return 503;
internal;
}
-location /media/private/ {
+ location /media/private/ {
alias /srv/crfpa-docker/var/media/private/;
internal;
}
+ location /media/bucket/ {
+ internal;
+ rewrite ^/media/bucket/(.*) /$1 break;
+ resolver 1.1.1.1;
+ proxy_http_version 1.1;
+ proxy_redirect off;
+ proxy_set_header Connection "";
+ proxy_set_header Authorization '';
+ proxy_set_header Host $bucket;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_hide_header x-amz-id-2;
+ proxy_hide_header x-amz-request-id;
+ proxy_hide_header x-amz-meta-server-side-encryption;
+ proxy_hide_header x-amz-server-side-encryption;
+ proxy_hide_header Set-Cookie;
+ proxy_ignore_headers Set-Cookie;
+ proxy_intercept_errors on;
+ add_header Cache-Control max-age=31536000;
+ proxy_pass https://$bucket; # without trailing slash
+ }
+
+
location /static/ {
alias /srv/crfpa-docker/var/static/;
}
return HttpResponse('Errors rendering pdf:<pre>%s</pre>' % escape(content))
-def serve_media(file, content_type="", buffering=True, streaming=False, bucket=True):
+def serve_media(file, content_type="", buffering=True, streaming=False, bucket=False):
if not content_type:
content_type = guess_mimetypes(file.url)
if not settings.DEBUG:
if bucket:
- url = '/media/bucket/' + file.url.split(settings.AWS_S3_ENDPOINT_URL)[-1]
+ url = settings.MEDIA_S3_BUCKET + file.url.split(settings.AWS_S3_ENDPOINT_URL)[-1]
else:
url = file.url
return nginx_media_accel(url, content_type=content_type,
reverse("teleforma-media-detail",
kwargs={"period_id": period_id, "pk": media.id}))
if get_access(media, courses) and referer == media_detail_url:
- return serve_media(media.file, content_type=media.mime_type, streaming=streaming)
+ return serve_media(media.file,
+ content_type=media.mime_type,
+ streaming=streaming,
+ bucket=False,
+ )
else:
raise Http404("You don't have access to this media.")
reverse("teleforma-media-transcoded",
kwargs={"period_id": period_id, "pk": media.id}))
if get_access(media, courses) and referer == media_detail_url:
- return serve_media(media.file, content_type=media.mime_type, streaming=streaming)
+ return serve_media(media.file,
+ content_type=media.mime_type,
+ streaming=streaming,
+ bucket=False,
+ )
else:
raise Http404("You don't have access to this media.")
def dispatch(self, *args, **kwargs):
return super(DocumentView, self).dispatch(*args, **kwargs)
- def download(self, request, pk):
+ def serve(self, request, pk, streaming=False):
courses = get_courses(request.user)
document = Document.objects.get(pk=pk)
+ bucket = False
+
if get_access(document, courses):
if settings.TELEFORMA_PRIVATE_DOCUMENTS_MODE:
file = document.private_file(request.user)
+ if settings.TELEFORMA_PRIVATE_MEDIA_USE_S3:
+ bucket = True
else:
file = document.file
- return serve_media(file, streaming=False)
+
+ return serve_media(
+ file,
+ streaming=streaming,
+ bucket=bucket,
+ )
else:
return redirect('teleforma-home')
+ def download(self, request, pk):
+ return self.serve(self, request, pk, streaming=False)
+
def view(self, request, pk):
- courses = get_courses(request.user)
- document = Document.objects.get(pk=pk)
- if get_access(document, courses):
- if settings.TELEFORMA_PRIVATE_DOCUMENTS_MODE:
- file = document.private_file(request.user)
- else:
- file = document.file
- return serve_media(file, streaming=True)
- else:
- return redirect('teleforma-home')
+ return self.serve(self, request, pk, streaming=True)
class ConferenceView(CourseAccessMixin, DetailView):