54 lines
1.8 KiB
Python
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)
|
|
|