OTP code requests per IP 20 -> 100/hour so a class on one school Wi-Fi can all log in

SMS cost stays bounded by the per-phone (10/day) and system-wide daily caps.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-11 22:11:08 +03:30
parent 2c708088e4
commit 98bf05fcbd

View File

@@ -551,7 +551,10 @@ REST_FRAMEWORK = {
# مدرسه یا شبکه‌ی یک دفتر، ده‌ها نفر یک IP دارند و با ۵ در ساعت فقط ۵ نفر # مدرسه یا شبکه‌ی یک دفتر، ده‌ها نفر یک IP دارند و با ۵ در ساعت فقط ۵ نفر
# می‌توانستند وارد شوند. حفاظِ اصلی per-phone و per-code است (پایین‌تر و # می‌توانستند وارد شوند. حفاظِ اصلی per-phone و per-code است (پایین‌تر و
# در دیتابیس)؛ این‌ها فقط جلوی یک ماشینِ تنها را می‌گیرند. # در دیتابیس)؛ این‌ها فقط جلوی یک ماشینِ تنها را می‌گیرند.
'otp_request': os.environ.get('OTP_REQUEST_IP_RATE', '20/hour'), # ۲۰ تا ۲۰۲۶-۱۰-۱۱ (تصمیمِ مالک): کلاسی که روی یک وای‌فای با هم وارد می‌شود سقف را پر می‌کرد. ۱۰۰ در
# ساعت از یک IP هنوز جلوی یک ماشینِ تنها را می‌گیرد؛ هزینه‌ی پیامک را سقفِ هر شماره (۱۰ در روز) و سقفِ
# روزانه‌ی کلِ سامانه (OTP_SMS_GLOBAL_DAILY_MAX) می‌بندند.
'otp_request': os.environ.get('OTP_REQUEST_IP_RATE', '100/hour'),
# ۳۰ تا ۲۰۲۶-۱۰-۱۱: یک کلاسِ سی‌نفره روی وای‌فایِ مدرسه با چند غلطِ تایپی سقف را پر می‌کرد. حدسِ کد # ۳۰ تا ۲۰۲۶-۱۰-۱۱: یک کلاسِ سی‌نفره روی وای‌فایِ مدرسه با چند غلطِ تایپی سقف را پر می‌کرد. حدسِ کد
# را سقفِ هر کد (OTP_MAX_FAILED_ATTEMPTS=۵، در دیتابیس) و هر شماره می‌بندد، نه این. # را سقفِ هر کد (OTP_MAX_FAILED_ATTEMPTS=۵، در دیتابیس) و هر شماره می‌بندد، نه این.
'otp_login': os.environ.get('OTP_LOGIN_IP_RATE', '300/hour'), 'otp_login': os.environ.get('OTP_LOGIN_IP_RATE', '300/hour'),