Proyecto LCX Dispatcharr multicuenta
Base Image Build / prepare (push) Has been cancelled
Build and Push Multi-Arch Docker Image / build-and-push (push) Has been cancelled
Frontend Tests / test (push) Has been cancelled
Base Image Build / docker (amd64, ubuntu-24.04) (push) Has been cancelled
Base Image Build / docker (arm64, ubuntu-24.04-arm) (push) Has been cancelled
Base Image Build / create-manifest (push) Has been cancelled
Base Image Build / prepare (push) Has been cancelled
Build and Push Multi-Arch Docker Image / build-and-push (push) Has been cancelled
Frontend Tests / test (push) Has been cancelled
Base Image Build / docker (amd64, ubuntu-24.04) (push) Has been cancelled
Base Image Build / docker (arm64, ubuntu-24.04-arm) (push) Has been cancelled
Base Image Build / create-manifest (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
"""
|
||||
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
|
||||
Reference in New Issue
Block a user