f56b088643
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
64 lines
2.1 KiB
Python
64 lines
2.1 KiB
Python
from rest_framework import viewsets, status
|
|
from rest_framework.decorators import action
|
|
from rest_framework.response import Response
|
|
from django.apps import apps
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
class ProxyViewSet(viewsets.ViewSet):
|
|
"""ViewSet for managing proxy servers"""
|
|
|
|
@action(detail=False, methods=['post'])
|
|
def start(self, request):
|
|
"""Start a proxy server for a channel"""
|
|
try:
|
|
proxy_type = request.data.get('type', 'hls')
|
|
channel_id = request.data.get('channel', 'default')
|
|
url = request.data.get('url')
|
|
|
|
if not url:
|
|
return Response(
|
|
{'error': 'URL is required'},
|
|
status=status.HTTP_400_BAD_REQUEST
|
|
)
|
|
|
|
proxy_app = apps.get_app_config('proxy')
|
|
proxy_server = getattr(proxy_app, f'{proxy_type}_proxy')
|
|
proxy_server.initialize_channel(url, channel_id)
|
|
|
|
return Response({
|
|
'message': f'{proxy_type.upper()} proxy started',
|
|
'channel': channel_id,
|
|
'url': url
|
|
})
|
|
|
|
except Exception as e:
|
|
logger.error(f"Error starting proxy: {e}")
|
|
return Response(
|
|
{'error': str(e)},
|
|
status=status.HTTP_500_INTERNAL_SERVER_ERROR
|
|
)
|
|
|
|
@action(detail=False, methods=['post'])
|
|
def stop(self, request):
|
|
"""Stop a proxy server for a channel"""
|
|
try:
|
|
proxy_type = request.data.get('type', 'hls')
|
|
channel_id = request.data.get('channel', 'default')
|
|
|
|
proxy_app = apps.get_app_config('proxy')
|
|
proxy_server = getattr(proxy_app, f'{proxy_type}_proxy')
|
|
proxy_server.stop_channel(channel_id)
|
|
|
|
return Response({
|
|
'message': f'{proxy_type.upper()} proxy stopped',
|
|
'channel': channel_id
|
|
})
|
|
|
|
except Exception as e:
|
|
logger.error(f"Error stopping proxy: {e}")
|
|
return Response(
|
|
{'error': str(e)},
|
|
status=status.HTTP_500_INTERNAL_SERVER_ERROR
|
|
) |