Remove Nginx-specific static and media serving, and serve media through Django using WhiteNoise and FileResponse.
This commit is contained in:
parent
3d985e473d
commit
d44b31f024
6 changed files with 46 additions and 23 deletions
|
|
@ -2,21 +2,29 @@
|
|||
# Copyright (C) 2021-2022 Amicale des élèves de l'ENS Paris-Saclay
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import os
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.http import HttpResponse
|
||||
from django.http import FileResponse, Http404
|
||||
from django.views.generic import ListView, View
|
||||
from photologue.models import Gallery
|
||||
|
||||
|
||||
|
||||
class MediaAccess(LoginRequiredMixin, View):
|
||||
class MediaAccess(View):
|
||||
def get(self, request, path):
|
||||
response = HttpResponse()
|
||||
# Content-type will be detected by nginx
|
||||
del response["Content-Type"]
|
||||
response["X-Accel-Redirect"] = "/protected/media/" + path
|
||||
response["Cache-Control"] = 'max-age=2678400'
|
||||
if not request.user.is_authenticated and not request.session.get('public_gallery_access'):
|
||||
from django.contrib.auth.views import redirect_to_login
|
||||
return redirect_to_login(request.get_full_path())
|
||||
media_root = os.path.realpath(settings.MEDIA_ROOT)
|
||||
file_path = os.path.realpath(os.path.join(media_root, path))
|
||||
if not file_path.startswith(media_root + os.sep):
|
||||
raise Http404
|
||||
if not os.path.isfile(file_path):
|
||||
raise Http404
|
||||
response = FileResponse(open(file_path, 'rb'))
|
||||
response['Cache-Control'] = 'max-age=2678400'
|
||||
return response
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue