From b79dffada8faf312b775d980c127ac402bc2864e Mon Sep 17 00:00:00 2001 From: Spitap Date: Wed, 8 Feb 2023 14:08:16 +0100 Subject: [PATCH] fixed test --- frontend/src/api/repository.js | 3 +-- frontend/src/views/Login.vue | 1 + modoboa/admin/api/v1/viewsets.py | 9 ++++----- modoboa/admin/api/v2/viewsets.py | 3 +-- modoboa/core/api/v1/viewsets.py | 1 - modoboa/core/api/v2/viewsets.py | 9 +++------ modoboa/lib/throttle.py | 10 +++++----- modoboa/parameters/api/v2/viewsets.py | 1 - modoboa/relaydomains/api/v1/viewsets.py | 1 - test_project/test_project/settings.py | 12 ++++++------ 10 files changed, 21 insertions(+), 29 deletions(-) diff --git a/frontend/src/api/repository.js b/frontend/src/api/repository.js index 56118ddf4..d4b0f9187 100644 --- a/frontend/src/api/repository.js +++ b/frontend/src/api/repository.js @@ -3,7 +3,6 @@ import Cookies from 'js-cookie' import router from '../router' import store from '../store' -import app from '../App.vue' const _axios = axios.create() @@ -33,7 +32,7 @@ _axios.interceptors.response.use( return Promise.reject(error) } if (error.response.status === 429) { - app.showNotification() + store.showNotification() return Promise.reject(error) } if (error.response.status !== 401 || router.currentRoute.path === '/login/') { diff --git a/frontend/src/views/Login.vue b/frontend/src/views/Login.vue index 24fb2d5fe..be4d4759c 100644 --- a/frontend/src/views/Login.vue +++ b/frontend/src/views/Login.vue @@ -89,6 +89,7 @@ export default { this.$router.push({ name: 'DomainList' }) }) }).catch(err => { + console.error(err) this.loading = false if (err.response.status === 401) { this.$refs.observer.setErrors({ diff --git a/modoboa/admin/api/v1/viewsets.py b/modoboa/admin/api/v1/viewsets.py index 211c2b241..e79fa97fd 100644 --- a/modoboa/admin/api/v1/viewsets.py +++ b/modoboa/admin/api/v1/viewsets.py @@ -11,13 +11,12 @@ from rest_framework.decorators import action from rest_framework.exceptions import ParseError from rest_framework.permissions import DjangoModelPermissions, IsAuthenticated from rest_framework.response import Response -from rest_framework.throttling import UserRateThrottle from modoboa.core import models as core_models from modoboa.core import sms_backends from modoboa.lib import renderers as lib_renderers from modoboa.lib import viewsets as lib_viewsets -from modoboa.lib.throttle import UserDdosPerView, GetThrottleViewsetMixin, PasswordResetRequestThrottle +from modoboa.lib.throttle import GetThrottleViewsetMixin, PasswordResetRequestThrottle from ... import lib, models from . import serializers @@ -91,11 +90,11 @@ class AccountViewSet(GetThrottleViewsetMixin, lib_viewsets.RevisionModelMixin, v def get_throttles(self): - throttle_classes = super().get_throttles() + throttles = super().get_throttles() if self.action == "reset_password": - throttle_classes.append(PasswordResetRequestThrottle()) + throttles.append(PasswordResetRequestThrottle()) - return throttle_classes + return throttles def get_serializer_class(self): """Return a serializer.""" diff --git a/modoboa/admin/api/v2/viewsets.py b/modoboa/admin/api/v2/viewsets.py index 667c72d10..f21348c84 100644 --- a/modoboa/admin/api/v2/viewsets.py +++ b/modoboa/admin/api/v2/viewsets.py @@ -11,13 +11,12 @@ from rest_framework import ( ) from rest_framework.decorators import action from rest_framework.exceptions import PermissionDenied -from rest_framework.throttling import UserRateThrottle from modoboa.admin.api.v1 import viewsets as v1_viewsets from modoboa.core import models as core_models from modoboa.lib import renderers as lib_renderers from modoboa.lib import viewsets as lib_viewsets -from modoboa.lib.throttle import UserDdosPerView, UserLesserDdosUser, GetThrottleViewsetMixin +from modoboa.lib.throttle import GetThrottleViewsetMixin from ... import lib from ... import models diff --git a/modoboa/core/api/v1/viewsets.py b/modoboa/core/api/v1/viewsets.py index 1b791e24c..7c4bf11f1 100644 --- a/modoboa/core/api/v1/viewsets.py +++ b/modoboa/core/api/v1/viewsets.py @@ -8,7 +8,6 @@ from django_otp.plugins.otp_totp.models import TOTPDevice from rest_framework import permissions, response, viewsets from rest_framework.decorators import action -from rest_framework.throttling import UserRateThrottle from drf_spectacular.utils import extend_schema diff --git a/modoboa/core/api/v2/viewsets.py b/modoboa/core/api/v2/viewsets.py index b8fd3d090..24ba9adee 100644 --- a/modoboa/core/api/v2/viewsets.py +++ b/modoboa/core/api/v2/viewsets.py @@ -11,14 +11,13 @@ from rest_framework import filters, permissions, response, viewsets from rest_framework.authtoken.models import Token from rest_framework.decorators import action from rest_framework.exceptions import PermissionDenied -from rest_framework.throttling import UserRateThrottle from rest_framework_simplejwt.tokens import RefreshToken from modoboa.admin.api.v1 import serializers as admin_v1_serializers from modoboa.core.api.v1 import serializers as core_v1_serializers from modoboa.core.api.v1 import viewsets as core_v1_viewsets from modoboa.lib import pagination -from modoboa.lib.throttle import UserLesserDdosUser, UserDdosPerView, GetThrottleViewsetMixin +from modoboa.lib.throttle import GetThrottleViewsetMixin from ... import constants from ... import models @@ -150,7 +149,7 @@ class AccountViewSet(core_v1_viewsets.AccountViewSet): }) -class LogViewSet(viewsets.ReadOnlyModelViewSet): +class LogViewSet(GetThrottleViewsetMixin, viewsets.ReadOnlyModelViewSet): """Log viewset.""" filter_backends = [filters.OrderingFilter, filters.SearchFilter] @@ -164,16 +163,14 @@ class LogViewSet(viewsets.ReadOnlyModelViewSet): queryset = models.Log.objects.all() search_fields = ["logger", "level", "message"] serializer_class = serializers.LogSerializer - throttle_classes = [UserRateThrottle] -class LanguageViewSet(viewsets.ViewSet): +class LanguageViewSet(GetThrottleViewsetMixin, viewsets.ViewSet): """Language viewset.""" permission_classes = ( permissions.IsAuthenticated, ) - throttle_classes = [UserRateThrottle] def list(self, request, *args, **kwargs): languages = [ diff --git a/modoboa/lib/throttle.py b/modoboa/lib/throttle.py index 02fabebfd..c52de265d 100644 --- a/modoboa/lib/throttle.py +++ b/modoboa/lib/throttle.py @@ -70,10 +70,10 @@ class GetThrottleViewsetMixin(): def get_throttles(self): """Give lesser_ddos to GET type actions and ddos to others.""" - throttle_classes = [UserRateThrottle()] + throttles = [UserRateThrottle()] - if self.action in ["list", "retrieve", "validate", "dns_detail", "me", "dns_detail"]: - throttle_classes.append(UserLesserDdosUser()) + if self.action in ["list", "retrieve", "validate", "dns_detail", "me", "dns_detail", "applications", "structure"]: + throttles.append(UserLesserDdosUser()) else: - throttle_classes.append(UserDdosPerView()) - return throttle_classes \ No newline at end of file + throttles.append(UserDdosPerView()) + return throttles \ No newline at end of file diff --git a/modoboa/parameters/api/v2/viewsets.py b/modoboa/parameters/api/v2/viewsets.py index 97a22d518..84b087029 100644 --- a/modoboa/parameters/api/v2/viewsets.py +++ b/modoboa/parameters/api/v2/viewsets.py @@ -3,7 +3,6 @@ from drf_spectacular.utils import extend_schema, OpenApiParameter from rest_framework import response, viewsets from rest_framework.decorators import action -from rest_framework.throttling import UserRateThrottle from modoboa.lib.throttle import GetThrottleViewsetMixin diff --git a/modoboa/relaydomains/api/v1/viewsets.py b/modoboa/relaydomains/api/v1/viewsets.py index d6b552276..c47a92feb 100644 --- a/modoboa/relaydomains/api/v1/viewsets.py +++ b/modoboa/relaydomains/api/v1/viewsets.py @@ -2,7 +2,6 @@ from rest_framework import viewsets from rest_framework.permissions import DjangoModelPermissions, IsAuthenticated -from rest_framework.throttling import UserRateThrottle from modoboa.admin import models as admin_models from modoboa.lib.throttle import GetThrottleViewsetMixin diff --git a/test_project/test_project/settings.py b/test_project/test_project/settings.py index 5a3d7b63e..f0d1b63de 100644 --- a/test_project/test_project/settings.py +++ b/test_project/test_project/settings.py @@ -187,13 +187,13 @@ MEDIA_ROOT = os.path.join(BASE_DIR, 'media') REST_FRAMEWORK = { 'DEFAULT_THROTTLE_RATES': { - 'user': '400/minute', - 'ddos': '100/second', - 'ddos_lesser': '300/minute', + 'user': '200/minute', + 'ddos': '10/second', + 'ddos_lesser': '200/minute', 'login': '10/minute', - 'password_recovery_request': '6/hour', - 'password_recovery_totp_check': '40/hour', - 'password_recovery_apply': '40/hour' + 'password_recovery_request': '11/hour', + 'password_recovery_totp_check': '25/hour', + 'password_recovery_apply': '25/hour' }, 'DEFAULT_AUTHENTICATION_CLASSES': ( 'modoboa.core.drf_authentication.JWTAuthenticationWith2FA',