diff --git a/modoboa/admin/api/v2/tests.py b/modoboa/admin/api/v2/tests.py index d1cec2bd2..36a8afc97 100644 --- a/modoboa/admin/api/v2/tests.py +++ b/modoboa/admin/api/v2/tests.py @@ -224,10 +224,14 @@ class AccountViewSetTestCase(ModoAPITestCase): self.assertIn("password", resp.json()) def test_validate(self): + """Test validate and throttling.""" data = {"username": "toto@test.com"} url = reverse("v2:account-validate") resp = self.client.post(url, data, format="json") self.assertEqual(resp.status_code, 204) + for _ in range(500): + resp = self.client.post(url, data, format="json") + self.assertEqual(resp.status_code, 429) def test_random_password(self): url = reverse("v2:account-random-password") diff --git a/modoboa/lib/throttle.py b/modoboa/lib/throttle.py index 03c8cf7c2..32af019ec 100644 --- a/modoboa/lib/throttle.py +++ b/modoboa/lib/throttle.py @@ -12,6 +12,6 @@ class UserDosThrottle(SimpleRateThrottle): ident = self.get_ident(request) return self.cache_format % { - 'scope': id(view), + 'scope': id(view.action), 'ident': ident } \ No newline at end of file diff --git a/test_project/test_project/settings.py b/test_project/test_project/settings.py index e120e2e95..2d26a543f 100644 --- a/test_project/test_project/settings.py +++ b/test_project/test_project/settings.py @@ -194,7 +194,7 @@ REST_FRAMEWORK = { 'DEFAULT_THROTTLE_RATES': { 'anon': '100/hour', 'login': '3/minute', - 'ddos': '100/minute', + 'ddos': '300/minute', 'password_recovery_request': '6/hour', 'password_recovery_totp_check': '20/hour', 'password_recovery_apply': '20/hour'