fix payement link and gallery image

This commit is contained in:
javad committed 2026-10-06 11:18:31 +03:30
1 parent de3135b588
commit 1cbbbbd0dc
24 files changed
+654 -116

No files matched your search

+21
View File
@@ -0,0 +1,21 @@
# ثبت مشاهده پیام و polling تیکت
دریافت پیام، بازکردن صفحه، بارگذاری مکاتبات قدیمی و polling به‌تنهایی رسید مشاهده ثبت نمی‌کنند. ثبت seen از یک درخواست POST جدا انجام می‌شود؛ نمای فعلی تیکت و مدل‌های موجود حفظ شده‌اند.
مرورگر فقط در تب قابل مشاهده، پیام‌هایی را ارسال می‌کند که حداقل ۴۸ پیکسل از ارتفاع آن‌ها (یا تمام ارتفاع پیام کوتاه‌تر) در محدوده مکاتبات و نمایشگر قرار گرفته باشد. پس از ثابت‌شدن موقعیت برای ۲۵۰ میلی‌ثانیه، موقعیت دوباره بررسی می‌شود. محدوده واقعی نمایشگر در موبایل و بزرگ‌نمایی لحاظ می‌شود و مرکز بخش نمایان پیام نباید زیر پنجره یا لایه دیگری باشد. پیام حذف‌شده ارسال نمی‌شود. پاسخ موفق، شناسه‌های پذیرفته‌شده را برمی‌گرداند تا درخواست تکراری ارسال نشود؛ خطای موقت شبکه باعث تلاش مجدد می‌شود. شناسه‌ها فقط در حافظه همان صفحه نگهداری می‌شوند.
سرور در هر درخواست مجوز را دوباره بررسی می‌کند: مشتری و magic link فقط پیام‌های عمومی همان تیکت، و کارشناس فقط پیام‌های مجاز خود را می‌توانند تأیید کنند. پیام خود کاربر و پیام حذف‌شده رسید مشاهده نمی‌گیرند. ورودی نامعتبر پاسخ ۴۰۰ می‌گیرد، شناسه‌های خراب یا خارج از محدوده نادیده گرفته می‌شوند، و هر درخواست حداکثر ۱۰۰ شناسه دارد. CSRF، ثبت تکراریِ بدون اثر و کنترل ابطال حفظ شده‌اند. قفل تیکت، ثبت مشاهده را با لغو اشتراک و پردازش اعلان هماهنگ می‌کند.
پاسخ polling پس از لغو دسترسی یا جایگزین‌شدن درخواست اعمال نمی‌شود. در خطای دسترسی، پیام‌های صفحه پاک و polling متوقف می‌شود. نشانگر polling آخرین پیام تحویل‌داده‌شده است، تا صف بیش از ۵۰ پیام باعث حذف مکاتبات بین دو درخواست نشود. ویرایش و حذف پیام قدیمی، نسخه polling را تغییر می‌دهد و فهرست تازه دریافت می‌شود.
وضعیت خوانده‌شدن تیکت فقط پس از تأیید مشاهده آخرین پیام مجاز ثبت می‌شود. فیلتر «خوانده‌نشده» به رسید همان کاربر وابسته است و مشاهده همکار دیگر آن را تغییر نمی‌دهد. زمان بازشدن «اشتراک کل تیکت» در ممیزی اشتراک همچنان مستقل از رسید تک‌پیام است.
این قرارداد مشاهده در صفحه را ثبت می‌کند و اثبات خواندن انسانی متن نیست. رسیدهای قدیمی حذف یا بازنویسی نشده‌اند؛ داده‌های تاریخی به‌تنهایی امکان تشخیص seen اشتباه را نمی‌دهند. اشتراک پیام مجوز کل تیکت ایجاد نمی‌کند؛ دسترسی کامل قبلی کاربر همچنان برقرار است.
تست‌های دائمی:
```bash
.venv/Scripts/python.exe -m pytest tests/test_message_read_receipts.py tests/e2e/test_message_read_receipts_e2e.py -q
```
تست‌ها از دیتابیس و سرور جداگانه استفاده می‌کنند. تب پس‌زمینه در headless Chromium با سیگنال visibility کنترل‌شده شبیه‌سازی می‌شود؛ محدوده نمایش، اسکرول، خطای شبکه و رقابت لغو دسترسی با پاسخ polling نیز در مرورگر بررسی می‌شوند.
+2 -1
View File
@@ -1,6 +1,6 @@
# لینک موقت پرداخت
لینک `{payment_link}` در پیامک صدور اعلامیه و تأیید نهایی فیش، اکنون یک مجوز مستقل است؛ کاربر با آن وارد حساب نمی‌شود. مسیر ورودی `/chaharsu/link/<token>/` پس از بررسی، به آدرس بدون توکن منتقل می‌شود.
لینک `{payment_link}` در پیامک صدور اعلامیه و تأیید نهایی فیش، یک مجوز مستقل است؛ کاربر با آن وارد حساب نمی‌شود. لینک‌های جدید مسیر کوتاه `/p/<token>/` دارند؛ توکن ۱۰ کاراکتری با همان مولد تصادفی امن magic link ساخته و فقط هش آن ذخیره می‌شود. برخورد توکن حداکثر پنج بار در تراکنش مستقل تکرار می‌شود. مسیر قدیمی `/chaharsu/link/<token>/` نیز برای لینک‌های قبلی تا انقضا یا ابطال معتبر است. هر دو مسیر پس از بررسی، به آدرس بدون توکن منتقل می‌شوند.
## محدوده و عمر دسترسی
@@ -9,6 +9,7 @@
- مشاهده اطلاعات بانکی، کپی تک‌فیلد و کامل، ثبت فیش مرتبط و مستقل، مشاهده وضعیت، دریافت تصویر و اصلاح فیش ردشده بدون ورود ممکن است.
- فیلد «شناسه واریز که با آن پرداخت انجام داده‌اید» هنگام ارسال فیش اختیاری است؛ خالی‌بودن آن مانع ارسال نمی‌شود. هشدار ثبت شناسه در عملیات پرداخت بانکی همچنان نمایش داده می‌شود.
- انقضا، ابطال و غیرفعال‌شدن مشتری در هر درخواست دوباره بررسی می‌شود. CSRF و اعتبارسنجی تصویر، مبلغ و تاریخ همچنان برقرارند.
- دکمه انتخاب تصویر فیش از ورودی `accept="image/*"` بدون `capture` استفاده می‌کند تا انتخاب عکس و اسکرین‌شات از گالری ممکن باشد. نمایش دقیق انتخاب‌گر به مرورگر و سیستم‌عامل گوشی بستگی دارد؛ فرمت و اندازه فایل همچنان در مرورگر و سرور اعتبارسنجی می‌شوند.
- تأیید و رد فقط برای کاربران دارای مجوز و تعیین‌شده در سیاست تأیید باقی می‌ماند. لینک پرداخت مجوز تأیید نمی‌دهد و لینک تیکت مجوز مالی نمی‌دهد.
- اگر حساب دیگری باز باشد، خروج تنها پس از تأیید صریح کاربر انجام می‌شود.