from rest_framework import viewsets, status from rest_framework.decorators import action from rest_framework.response import Response from djeveric import ConfirmationView from userausfall.models import User, MissingUserAttribute, PasswordMismatch from userausfall.confirmations import ConfidantConfirmation from userausfall.rest_api.permissions import UserPermission from userausfall.rest_api.serializers import UserSerializer, UserActivationSerializer, CreateUserSerializer class ConfidantConfirmationView(ConfirmationView): confirmation_class = ConfidantConfirmation class UserViewSet(viewsets.ModelViewSet): # permission_classes = [UserPermission] queryset = User.objects.all() @action(detail=False, methods=["post"]) def activate(self, request, pk=None): """Create the corresponding LDAP account.""" user: User = request.user # self.get_object() serializer = UserActivationSerializer(data=request.data) if serializer.is_valid(): try: user.create_ldap_account(serializer.validated_data["password"]) except (MissingUserAttribute, PasswordMismatch) as e: return Response({"message": str(e)}, status=status.HTTP_400_BAD_REQUEST) return Response(status=status.HTTP_204_NO_CONTENT) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) def get_serializer_class(self): if self.action == "create": return CreateUserSerializer