diff --git a/modoboa/admin/api.py b/modoboa/admin/api.py index 2c7ee274c..e9a334758 100644 --- a/modoboa/admin/api.py +++ b/modoboa/admin/api.py @@ -18,14 +18,13 @@ from . import lib, models, serializers class DomainViewSet(viewsets.ModelViewSet): """ - retrieve: - Return the given domain. + Domain viewset. - list: - Return a list of all existing domains. + retrieve: Return the given domain. - create: - Create a new domain instance. + list: Return a list of all existing domains. + + create: Create a new domain instance. """ permission_classes = [IsAuthenticated, DjangoModelPermissions, ] diff --git a/modoboa/admin/serializers.py b/modoboa/admin/serializers.py index 8a68d184e..2a66a020e 100644 --- a/modoboa/admin/serializers.py +++ b/modoboa/admin/serializers.py @@ -7,6 +7,8 @@ from django.shortcuts import get_object_or_404 from django.utils.encoding import force_text from django.utils.translation import ugettext as _, ugettext_lazy +from drf_spectacular.types import OpenApiTypes +from drf_spectacular.utils import extend_schema_field from rest_framework import serializers from modoboa.admin import models as admin_models @@ -186,6 +188,7 @@ class AccountSerializer(serializers.ModelSerializer): if not user.is_superuser: del self.fields["master_user"] + @extend_schema_field(OpenApiTypes.STR) def get_role(self, account): """Return role.""" return account.role diff --git a/modoboa/core/commands/templates/settings.py.tpl b/modoboa/core/commands/templates/settings.py.tpl index c604ca92b..243658309 100644 --- a/modoboa/core/commands/templates/settings.py.tpl +++ b/modoboa/core/commands/templates/settings.py.tpl @@ -64,6 +64,7 @@ INSTALLED_APPS = ( 'ckeditor_uploader', 'rest_framework', 'rest_framework.authtoken', + 'drf_spectacular', 'phonenumber_field', 'django_otp', 'django_otp.plugins.otp_totp', @@ -192,6 +193,12 @@ REST_FRAMEWORK = { ), } +SPECTACULAR_SETTINGS = { + 'SCHEMA_PATH_PREFIX': r'/api/v1', + 'TITLE': 'Modoboa API', + 'VERSION': '1.0.0' +} + # Modoboa settings # MODOBOA_CUSTOM_LOGO = os.path.join(MEDIA_URL, "custom_logo.png") diff --git a/modoboa/core/viewsets.py b/modoboa/core/viewsets.py index 177160688..1014c2e4d 100644 --- a/modoboa/core/viewsets.py +++ b/modoboa/core/viewsets.py @@ -7,6 +7,7 @@ from django_otp.plugins.otp_static.models import StaticDevice, StaticToken from django_otp.plugins.otp_totp.models import TOTPDevice from rest_framework import permissions, response, viewsets from rest_framework.decorators import action +from drf_spectacular.utils import extend_schema from . import serializers @@ -28,6 +29,9 @@ class AccountViewSet(viewsets.ViewSet): ) return response.Response() + @extend_schema( + request=serializers.CheckTFASetupSerializer + ) @action(methods=["post"], detail=False, url_path="tfa/setup/check") def tfa_setup_check(self, request): """Check TFA setup.""" @@ -57,6 +61,7 @@ class AccountViewSet(viewsets.ViewSet): request.user.save() return response.Response() + @extend_schema(tags=['account']) @action(methods=["post"], detail=False, url_path="tfa/reset_codes") def tfa_reset_codes(self, request, *args, **kwargs): """Reset recovery codes.""" diff --git a/modoboa/templates/swagger-ui.html b/modoboa/templates/swagger-ui.html deleted file mode 100644 index efbd02f35..000000000 --- a/modoboa/templates/swagger-ui.html +++ /dev/null @@ -1,57 +0,0 @@ - -{% load static %} - -
- - -