"""Read-only endpoints для directory identity данных.""" from __future__ import annotations import logging from rest_framework import status from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView from employees.ldap.errors import DirectoryDbError, DirectoryLdapError from .serializers import DirectoryLoginResponseSerializer from .services import resolve_directory_login logger = logging.getLogger(__name__) class DirectoryMeLoginAPIView(APIView): permission_classes = [IsAuthenticated] serializer_class = DirectoryLoginResponseSerializer def get(self, request): try: result = resolve_directory_login(request.user, force_refresh=False) except (DirectoryLdapError, DirectoryDbError) as exc: logger.exception( "Directory login lookup failed", extra={ "event": "directory.login.lookup_failed", "user_id": request.user.id, "force_refresh": False, "error_type": type(exc).__name__, }, ) return Response( {"detail": str(exc), "error": "directory_lookup_failed"}, status=status.HTTP_502_BAD_GATEWAY, ) serializer = DirectoryLoginResponseSerializer(result) return Response(serializer.data) class DirectoryMeLoginRefreshAPIView(APIView): permission_classes = [IsAuthenticated] serializer_class = DirectoryLoginResponseSerializer def post(self, request): try: result = resolve_directory_login(request.user, force_refresh=True) except (DirectoryLdapError, DirectoryDbError) as exc: logger.exception( "Directory login refresh failed", extra={ "event": "directory.login.refresh_failed", "user_id": request.user.id, "force_refresh": True, "error_type": type(exc).__name__, }, ) return Response( {"detail": str(exc), "error": "directory_refresh_failed"}, status=status.HTTP_502_BAD_GATEWAY, ) serializer = DirectoryLoginResponseSerializer(result) return Response(serializer.data)