import logging from rest_framework.response import Response from rest_framework.permissions import IsAdminUser from rest_framework.request import Request from rest_framework.response import Response from rest_framework import status from rest_framework.exceptions import NotFound from labs.api.base import Endpoint from labs.api.serializers.ssh_server import ( SSHServerRegisterSerializer, SSHServerReportSerializer, ) from labs.models import ( LabSSHServer, ) logger = logging.getLogger(__name__) class SSHServerRegisterEndpoint(Endpoint): permission_classes = (IsAdminUser,) def post(self, request: Request) -> Response: serializer = SSHServerRegisterSerializer(data=request.data) serializer.is_valid(raise_exception=True) ssh_server = serializer.save() return Response({"id": ssh_server.id}, status=status.HTTP_201_CREATED) class SSHServerReportEndpoint(Endpoint): permission_classes = (IsAdminUser,) def post(self, request: Request, ssh_server_id: int) -> Response: try: ssh_server = LabSSHServer.objects.get(id=ssh_server_id) except LabSSHServer.DoesNotExist: raise NotFound() serializer = SSHServerReportSerializer(ssh_server, data=request.data) serializer.is_valid(raise_exception=True) serializer.save() return Response()