diff --git a/modoboa/admin/api/v2/viewsets.py b/modoboa/admin/api/v2/viewsets.py index 10ad2d391..d3f5e55ae 100644 --- a/modoboa/admin/api/v2/viewsets.py +++ b/modoboa/admin/api/v2/viewsets.py @@ -183,6 +183,7 @@ class IdentityViewSet(viewsets.ViewSet): """Viewset for identities.""" permission_classes = (permissions.IsAuthenticated, ) + serializer_class = None def list(self, request, **kwargs): """Return all identities.""" diff --git a/modoboa/core/api/v1/viewsets.py b/modoboa/core/api/v1/viewsets.py index 1014c2e4d..7bee9079c 100644 --- a/modoboa/core/api/v1/viewsets.py +++ b/modoboa/core/api/v1/viewsets.py @@ -19,6 +19,7 @@ class AccountViewSet(viewsets.ViewSet): """ permission_classes = (permissions.IsAuthenticated, ) + serializer_class = None @action(methods=["post"], detail=False, url_path="tfa/setup") def tfa_setup(self, request): diff --git a/modoboa/core/drf_authentication.py b/modoboa/core/drf_authentication.py index af643b649..1bb9f5c52 100644 --- a/modoboa/core/drf_authentication.py +++ b/modoboa/core/drf_authentication.py @@ -4,6 +4,7 @@ from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from django_otp.models import Device +from drf_spectacular.contrib.rest_framework_simplejwt import SimpleJWTScheme from rest_framework import status from rest_framework.exceptions import APIException from rest_framework_simplejwt.authentication import JWTAuthentication @@ -44,3 +45,8 @@ class JWTAuthenticationWith2FA(JWTAuthentication): if user.tfa_enabled: self.verify_user(request, user) return user, token + + +class SimpleJWTWith2FAScheme(SimpleJWTScheme): + target_class = 'modoboa.core.drf_authentication.JWTAuthenticationWith2FA' + name = 'jwt2FAAuth' diff --git a/modoboa/parameters/api/v2/viewsets.py b/modoboa/parameters/api/v2/viewsets.py index 71e55401c..efefd838c 100644 --- a/modoboa/parameters/api/v2/viewsets.py +++ b/modoboa/parameters/api/v2/viewsets.py @@ -12,6 +12,7 @@ class ParametersViewSet(viewsets.ViewSet): """Parameter viewset.""" lookup_value_regex = r"\w+" + serializer_class = None @extend_schema(responses=serializers.ApplicationSerializer(many=True)) @action(methods=["get"], detail=False)