2024-07-08 11:44:39 -04:00
|
|
|
from django.http import JsonResponse
|
|
|
|
from django.middleware.csrf import get_token
|
2025-01-06 18:53:08 -05:00
|
|
|
from os import getenv
|
2025-01-18 17:03:03 -05:00
|
|
|
from django.conf import settings
|
|
|
|
from django.http import HttpResponse, HttpResponseForbidden
|
|
|
|
from django.views.static import serve
|
2025-01-18 20:06:12 -05:00
|
|
|
from adventures.utils.file_permissions import checkFilePermission
|
2024-07-08 11:44:39 -04:00
|
|
|
|
|
|
|
def get_csrf_token(request):
|
|
|
|
csrf_token = get_token(request)
|
|
|
|
return JsonResponse({'csrfToken': csrf_token})
|
2025-01-06 18:53:08 -05:00
|
|
|
|
|
|
|
def get_public_url(request):
|
2025-01-18 17:03:03 -05:00
|
|
|
return JsonResponse({'PUBLIC_URL': getenv('PUBLIC_URL')})
|
|
|
|
|
2025-01-18 20:06:12 -05:00
|
|
|
protected_paths = ['images/', 'attachments/']
|
|
|
|
|
2025-01-18 17:03:03 -05:00
|
|
|
def serve_protected_media(request, path):
|
2025-01-18 20:06:12 -05:00
|
|
|
if any([path.startswith(protected_path) for protected_path in protected_paths]):
|
2025-01-18 17:03:03 -05:00
|
|
|
image_id = path.split('/')[1]
|
|
|
|
user = request.user
|
2025-01-18 20:06:12 -05:00
|
|
|
media_type = path.split('/')[0] + '/'
|
|
|
|
if checkFilePermission(image_id, user, media_type):
|
2025-01-18 17:03:03 -05:00
|
|
|
if settings.DEBUG:
|
|
|
|
# In debug mode, serve the file directly
|
|
|
|
return serve(request, path, document_root=settings.MEDIA_ROOT)
|
|
|
|
else:
|
2025-01-18 20:06:12 -05:00
|
|
|
# In production, use X-Accel-Redirect to serve the file using Nginx
|
2025-01-18 17:03:03 -05:00
|
|
|
response = HttpResponse()
|
|
|
|
response['Content-Type'] = ''
|
|
|
|
response['X-Accel-Redirect'] = '/protectedMedia/' + path
|
|
|
|
return response
|
|
|
|
else:
|
|
|
|
return HttpResponseForbidden()
|
|
|
|
else:
|
2025-01-18 20:06:12 -05:00
|
|
|
if settings.DEBUG:
|
|
|
|
return serve(request, path, document_root=settings.MEDIA_ROOT)
|
|
|
|
else:
|
|
|
|
response = HttpResponse()
|
|
|
|
response['Content-Type'] = ''
|
|
|
|
response['X-Accel-Redirect'] = '/protectedMedia/' + path
|
|
|
|
return response
|