from djeveric.views import ConfirmModelMixin from rest_framework import mixins, status, viewsets from rest_framework.decorators import action from rest_framework.response import Response from userausfall.models import TrustBridge, User from userausfall.rest_api.serializers import ActivateUserSerializer, TrustBridgeSerializer, UserSerializer from userausfall.views import get_authenticated_user class TrustBridgeViewSet( ConfirmModelMixin, mixins.CreateModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet ): queryset = TrustBridge.objects serializer_class = TrustBridgeSerializer def get_basic_queryset(self): return self.queryset.filter(trust_taker=get_authenticated_user(self.request)) class ActivateUserMixin: @action(detail=True, methods=["post"]) def activate(self, request, pk=None): """Create the corresponding LDAP account.""" instance = self.get_object() serializer = self.get_serializer(instance, data=request.data) serializer.is_valid(raise_exception=True) self.perform_activate(instance, serializer) return Response(status=status.HTTP_204_NO_CONTENT) def perform_activate(self, instance: User, serializer): instance.create_ldap_account(serializer.validated_data["password"]) class UserViewSet(ActivateUserMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet): serializer_class = UserSerializer def get_queryset(self): return User.objects.filter(pk=get_authenticated_user(self.request).pk) def get_serializer_class(self): if self.action == "activate": return ActivateUserSerializer else: return super().get_serializer_class()