add a monitoring camera setting for cetana
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from rest_framework import decorators, mixins, permissions, response, status, views, viewsets
|
||||
|
||||
from apps.core.errors import error_response
|
||||
from apps.core.settings_service import SettingsService
|
||||
from apps.live_monitoring.models import Camera
|
||||
from apps.live_monitoring.serializers import CameraSerializer
|
||||
from apps.live_monitoring.services import StreamAccessService
|
||||
@@ -13,8 +14,18 @@ class CameraViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.G
|
||||
permission_classes = [ActionPermission]
|
||||
code_map = {"list": "processing.view", "retrieve": "processing.view", "access": "processing.view"}
|
||||
|
||||
def list(self, request, *args, **kwargs):
|
||||
if not SettingsService().get_bool("camera.enabled", True):
|
||||
return response.Response({"count": 0, "next": None, "previous": None, "results": []})
|
||||
return super().list(request, *args, **kwargs)
|
||||
|
||||
@decorators.action(detail=True, methods=["post"])
|
||||
def access(self, request, pk=None):
|
||||
if not SettingsService().get_bool("camera.enabled", True):
|
||||
return response.Response(
|
||||
error_response("MONITORING_DISABLED", "Live monitoring is disabled."),
|
||||
status=status.HTTP_403_FORBIDDEN,
|
||||
)
|
||||
camera = self.get_object()
|
||||
service = StreamAccessService()
|
||||
if not service.can_access(request.user, camera):
|
||||
@@ -31,8 +42,14 @@ class VerifyStreamView(views.APIView):
|
||||
permission_classes = [permissions.AllowAny]
|
||||
|
||||
def get(self, request):
|
||||
if not SettingsService().get_bool("camera.enabled", True):
|
||||
return response.Response(
|
||||
error_response("MONITORING_DISABLED", "Live monitoring is disabled."),
|
||||
status=status.HTTP_403_FORBIDDEN,
|
||||
)
|
||||
token = request.query_params.get("token")
|
||||
payload = StreamAccessService().verify_token(token)
|
||||
service = StreamAccessService()
|
||||
payload = service.verify_token(token)
|
||||
if not payload:
|
||||
return response.Response(
|
||||
error_response("INVALID_TOKEN", "Invalid or expired stream token."),
|
||||
@@ -45,4 +62,6 @@ class VerifyStreamView(views.APIView):
|
||||
error_response("CAMERA_NOT_FOUND", "Camera not found."),
|
||||
status=status.HTTP_404_NOT_FOUND,
|
||||
)
|
||||
return response.Response({"stream_url": camera.stream_url})
|
||||
stream = service.resolve_stream(camera)
|
||||
# Keep ``url`` alias for older clients; ``stream_url`` is canonical.
|
||||
return response.Response({**stream, "url": stream.get("stream_url")})
|
||||
|
||||
Reference in New Issue
Block a user