cleanup: trim bloated multi-line comments across the project

This commit is contained in:
2026-08-26 03:22:20 +03:30
parent 83435c5a5f
commit 683bd40169
27 changed files with 235 additions and 699 deletions

View File

@@ -58,11 +58,7 @@ class FamilyLinkAcceptThrottleTests(TestCase):
self.assertEqual(blocked_response.status_code, 429)
def test_throttle_is_scoped_per_user_not_shared_globally(self):
# این تست مخصوصِ کاربرهای *غیرمهمان* (ثبت‌نام‌شده) است — طبقِ فیکسِ
# GuestAwareFamilyThrottle، حساب‌های مهمان دیگه bucket جداگانه
# ندارن (نگاه کنید به FamilyLinkAcceptGuestThrottleBypassTests پایین‌تر)،
# اما رفتارِ per-user برای کاربرهایِ ثبت‌نام‌شده باید دقیقاً مثلِ
# قبل دست‌نخورده بمونه.
# کاربرِ غیرمهمان (نه یک حسابِ مهمانِ دوم، که دیگه bucket جدا نداره).
other_user = User.objects.create(
is_guest=False, name='', phone='+989120000099',
)
@@ -241,12 +237,8 @@ class FamilyLinkInviteThrottleTests(TestCase):
self.assertEqual(blocked_response.status_code, 429)
def test_changing_client_ip_does_not_bypass_the_user_limit(self):
# ⚠️ توجه: از یک کاربرِ *غیرمهمان* استفاده می‌شه (نه self.parent که
# مهمان است)، چون طبقِ فیکسِ GuestAwareFamilyThrottle حالا کلیدِ
# bucket برای کاربرهای مهمان عمداً بر اساسِ IP است (نگاه کنید به
# FamilyLinkInviteGuestThrottleBypassTests پایین‌تر) — این تست
# فقط رفتارِ per-user (نه IP) برای کاربرهایِ ثبت‌نام‌شده رو تضمین
# می‌کنه.
# کاربرِ غیرمهمان (نه self.parent که مهمانه)، چون کلیدِ throttleِ
# مهمان‌ها عمداً بر اساسِ IP است؛ این تست فقط رفتارِ per-user رو می‌سنجه.
registered_parent = User.objects.create(is_guest=False, name='', phone='+989120001300')
registered_token = issue_access_token(registered_parent.id)

View File

@@ -67,17 +67,10 @@ class FamilyLinkInviteView(APIView):
permission_classes = [IsAuthenticated]
# ⚠️ اضافه شده: این endpoint قبلاً هیچ throttle مخصوصی نداشت، درحالی‌که
# یک FamilyLink ماندگار می‌سازه و یک کدِ دعوتِ ۶رقمیِ تازه تولید می‌کنه.
# بدونِ throttle، یک کاربرِ احرازهویت‌شده می‌تونست با فرستادنِ
# پی‌درپیِ شماره‌های مختلف، تعدادِ زیادی FamilyLink/کدِ دعوت بسازه.
# طبقِ همون الگویِ GuestAwareFamilyThrottleِ مشترک (که
# FamilyLinkAcceptView هم استفاده می‌کنه): برای کاربرهای مهمان کلید
# بر اساسِ IP و برای کاربرهای غیرمهمان بر اساسِ user.pk است، پس
# چرخشِ حسابِ مهمان نمی‌تونه bucket تازه بگیره. یک throttle_scope
# مجزا ('family_invite_create'، نه 'family_invite_accept') استفاده
# شده چون تولید و مصرفِ کدِ دعوت باید مستقل از هم قابل‌تنظیم بمونن؛
# منطقِ generation/authorization دست‌نخورده‌ست.
# بدونِ throttle، یک کاربر می‌تونست با فرستادنِ پی‌درپیِ شماره‌های مختلف
# تعدادِ زیادی FamilyLink بسازه. GuestAwareFamilyThrottle برای مهمان‌ها
# کلید رو بر اساسِ IP می‌سازه؛ scopeِ جدا از family_invite_accept چون
# تولید و مصرفِ کدِ دعوت باید مستقل قابل‌تنظیم باشن.
throttle_scope = 'family_invite_create'
throttle_classes = [GuestAwareFamilyThrottle]
@@ -131,15 +124,9 @@ class FamilyLinkAcceptView(APIView):
permission_classes = [IsAuthenticated]
# ⚠️ اضافه شده: inviteCode یک رازِ عددیِ ۶رقمی تولیدشده‌ی سرور است
# (family/views.py::FamilyLinkInviteView)، و این endpoint دقیقاً همون
# کد رو با select_for_update() جست‌وجو می‌کنه؛ بدونِ throttle، یک
# کاربرِ احرازهویت‌شده می‌تونست بدونِ هیچ محدودیتی فضای ۶رقمی رو
# brute-force کنه. طبقِ همون الگویِ ScopedRateThrottle که برای بقیه‌ی
# اندپوینت‌هایِ حدس‌پذیر پروژه اضافه شد، اینجا هم یک scope مجزا اضافه
# شد (نه scope مشترک با discount/offer) تا نرخِ محدودسازی مستقل از اون‌ها
# قابل‌تنظیم باشه. چون DRF throttle check قبل از dispatch به post() در
# APIView.initial() اجرا می‌شه، حدس‌های بلاک‌شده اصلاً به select_for_update()
# inviteCode یک رازِ عددیِ ۶رقمیه؛ بدونِ throttle یه کاربر می‌تونست فضای
# ۶رقمی رو brute-force کنه. throttle در APIView.initial() قبل از
# post() اجرا می‌شه، پس حدس‌های بلاک‌شده اصلاً به select_for_update()
# نمی‌رسن.
throttle_scope = 'family_invite_accept'
throttle_classes = [GuestAwareFamilyThrottle]