mfa.py 1.2 KB

123456789101112131415161718192021222324252627282930313233
  1. from rest_framework import status, viewsets
  2. from rest_framework.permissions import IsAuthenticated
  3. from rest_framework.response import Response
  4. from desecapi import permissions
  5. from desecapi.serializers import (
  6. AuthenticatedCreateTOTPFactorUserActionSerializer,
  7. TOTPFactorSerializer,
  8. )
  9. from .base import IdempotentDestroyMixin
  10. class TOTPViewSet(IdempotentDestroyMixin, viewsets.ModelViewSet):
  11. permission_classes = (
  12. IsAuthenticated,
  13. permissions.HasManageTokensPermission,
  14. )
  15. serializer_class = TOTPFactorSerializer
  16. throttle_scope = "account_management_passive"
  17. def get_queryset(self):
  18. return self.serializer_class.Meta.model.objects.filter(user=self.request.user)
  19. def create(self, request, *args, **kwargs):
  20. super().create(request, *args, **kwargs)
  21. message = "This operation requires manual confirmation. Please check your mailbox for instructions!"
  22. return Response(data={"detail": message}, status=status.HTTP_202_ACCEPTED)
  23. def perform_create(self, serializer):
  24. AuthenticatedCreateTOTPFactorUserActionSerializer.build_and_save(
  25. user=self.request.user, name=serializer.validated_data.get("name", "")
  26. )