Corp/backend/api/auth/endpoints/websocket.py

32 lines
1.1 KiB
Python

from drf_spectacular.utils import extend_schema
from rest_framework import serializers, status
from rest_framework.response import Response
from ..base import SessionBaseAPIView
from ..websocket_tickets import TICKET_MAX_AGE_SECONDS, issue_websocket_ticket
class WebSocketTicketResponseSerializer(serializers.Serializer):
ticket = serializers.CharField(read_only=True)
expires_in = serializers.IntegerField(read_only=True)
class WebSocketTicketAPIView(SessionBaseAPIView):
throttle_scope = "websocket_ticket"
@extend_schema(
tags=["Auth"],
summary="Получить одноразовый билет для WebSocket-подключения",
request=None,
responses={200: WebSocketTicketResponseSerializer},
)
def post(self, request):
ticket = issue_websocket_ticket(
user=request.user,
session_id=self.get_current_session_id(request),
)
return Response(
{"ticket": ticket, "expires_in": TICKET_MAX_AGE_SECONDS},
status=status.HTTP_200_OK,
)