# views.py import requests from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status from django.contrib.auth import get_user_model from rest_framework_simplejwt.tokens import RefreshToken from .serializers import SSOLoginSerializer User = get_user_model() class SSOLoginView(APIView): permission_classes = [] def post(self, request): serializer = SSOLoginSerializer(data=request.data) serializer.is_valid(raise_exception=True) username = serializer.validated_data["username"] password = serializer.validated_data["password"] # Call SSO sso_response = requests.post( "http://127.0.0.1:8080/auth/jwt/create/", json={ "username": username, "password": password }, timeout=5 ) if sso_response.status_code != 200: return Response( {"detail": "Invalid credentials"}, status=status.HTTP_401_UNAUTHORIZED ) sso_data = sso_response.json() sso_token = sso_data.get("access") sso_refresh = sso_data.get("refresh") sso_response_user = requests.get( "http://127.0.0.1:8080/auth/users/me/", headers={"Authorization": f"JWT {sso_token}"}, timeout=5 ) if (sso_response_user.status_code != 200): return Response( {"detail": "Failed to fetch user data from SSO"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR ) sso_user = sso_response_user.json() # Sync user lokal (optional) user, created = User.objects.get_or_create( username=username, defaults={ "email": sso_user.get("email", "") } ) # Generate JWT lokal refresh = RefreshToken.for_user(user) return Response({ "refresh": str(refresh), "access": str(refresh.access_token), "user": { "id": user.id, "username": user.username, "email": user.email, } })