54 lines
1.8 KiB
Python

"""Read-only endpoints для directory identity данных."""
from __future__ import annotations
import logging
from employees.ldap.errors import DirectoryDbError, DirectoryLdapError
from rest_framework import status
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView
from .serializers import DirectoryLoginResponseSerializer
from .services import resolve_directory_login
logger = logging.getLogger(__name__)
class DirectoryMeLoginAPIView(APIView):
permission_classes = [IsAuthenticated]
def get(self, request):
try:
result = resolve_directory_login(request.user, force_refresh=False)
except (DirectoryLdapError, DirectoryDbError) as exc:
logger.error("Directory login lookup failed: %s", exc, exc_info=True)
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]
def post(self, request):
try:
result = resolve_directory_login(request.user, force_refresh=True)
except (DirectoryLdapError, DirectoryDbError) as exc:
logger.error(
"Directory login refresh failed: %s", exc, exc_info=True
)
return Response(
{"detail": str(exc), "error": "directory_refresh_failed"},
status=status.HTTP_502_BAD_GATEWAY,
)
serializer = DirectoryLoginResponseSerializer(result)
return Response(serializer.data)