69 lines
2.3 KiB
Python
69 lines
2.3 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]
|
|
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)
|