forked from Mirrors/Dispatcharr
58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
"""
|
|
Utility functions for VOD proxy operations.
|
|
"""
|
|
|
|
import logging
|
|
from django.http import HttpResponse
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def get_client_info(request):
|
|
"""
|
|
Extract client IP and User-Agent from request.
|
|
|
|
Args:
|
|
request: Django HttpRequest object
|
|
|
|
Returns:
|
|
tuple: (client_ip, user_agent)
|
|
"""
|
|
# Get client IP, checking for proxy headers
|
|
client_ip = request.META.get('HTTP_X_FORWARDED_FOR')
|
|
if client_ip:
|
|
# Take the first IP if there are multiple (comma-separated)
|
|
client_ip = client_ip.split(',')[0].strip()
|
|
else:
|
|
client_ip = request.META.get('HTTP_X_REAL_IP') or request.META.get('REMOTE_ADDR', 'unknown')
|
|
|
|
# Get User-Agent
|
|
user_agent = request.META.get('HTTP_USER_AGENT', 'unknown')
|
|
|
|
return client_ip, user_agent
|
|
|
|
|
|
def create_vod_response(content, content_type='video/mp4', filename=None):
|
|
"""
|
|
Create a streaming HTTP response for VOD content.
|
|
|
|
Args:
|
|
content: Content to stream (file-like object or bytes)
|
|
content_type: MIME type of the content
|
|
filename: Optional filename for Content-Disposition header
|
|
|
|
Returns:
|
|
HttpResponse: Configured HTTP response for streaming
|
|
"""
|
|
response = HttpResponse(content, content_type=content_type)
|
|
|
|
if filename:
|
|
response['Content-Disposition'] = f'attachment; filename="{filename}"'
|
|
|
|
# Add headers for streaming
|
|
response['Accept-Ranges'] = 'bytes'
|
|
response['Cache-Control'] = 'no-cache, no-store, must-revalidate'
|
|
response['Pragma'] = 'no-cache'
|
|
response['Expires'] = '0'
|
|
|
|
return response
|