32 lines
1.1 KiB
Python
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,
|
|
)
|