record the 2026-09-25 SMS deploy: 0580aec is live, Kavenegar on, test user 17 to purge
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
27
CLAUDE.md
27
CLAUDE.md
@@ -294,9 +294,12 @@ reliably pull the final answer out of a solution and produced ~40% broken output
|
|||||||
- Grades 8–12 are fully covered: every node holds a four-question quiz. 39 of the 145
|
- Grades 8–12 are fully covered: every node holds a four-question quiz. 39 of the 145
|
||||||
nodes in grades 3/6/7 (the other team's books) still hold fewer than four; none is
|
nodes in grades 3/6/7 (the other team's books) still hold fewer than four; none is
|
||||||
empty, so every node still plays.
|
empty, so every node still plays.
|
||||||
- Kavenegar is unconfigured, so `POST /api/auth/otp/request` returns 503. With `DEBUG=0`
|
- Kavenegar is live on the server since 2026-09-25 (`/api/health` → `sms: true`), so every
|
||||||
there is no way to log into the API without creating an `OTPCode` row in the admin
|
OTP request costs real credit. Real SMS *delivery* to a phone was not yet observed by us;
|
||||||
(`/admin/accounts/otpcode/add/`) — this is how to hand a tester a working login.
|
sending is plain `sms/send` from the account's default line, not a `verify/lookup`
|
||||||
|
template, so numbers that block promotional SMS may never get the code. An `OTPCode`
|
||||||
|
row made in the admin (`/admin/accounts/otpcode/add/`) still hands a tester a login
|
||||||
|
without SMS.
|
||||||
|
|
||||||
## The server: read this before running anything on it
|
## The server: read this before running anything on it
|
||||||
|
|
||||||
@@ -396,6 +399,24 @@ preferred setup, because there is then no key to leak. **Never let the server ru
|
|||||||
`django-insecure-…` fallback from `config/settings.py`: that string is committed here, so
|
`django-insecure-…` fallback from `config/settings.py`: that string is committed here, so
|
||||||
anyone who can read this repo can forge a token for any user.**
|
anyone who can read this repo can forge a token for any user.**
|
||||||
|
|
||||||
|
## وضعیت ۲۰۲۶-۰۹-۲۵ (عصر) — پیامکِ واقعی روشن شد
|
||||||
|
|
||||||
|
**روی سرور:** `0580aec` دیپلوی و سرویس واقعاً ریاستارت شد (۱۲:۳۲). `KAVENEGAR_API_KEY`
|
||||||
|
در `.env` سرور و لوکال است (حسابِ Master، ~۳۲۶ هزار ریال اعتبار در آن روز). بکاپهای پیش از آن:
|
||||||
|
`.deploy-backups/env-before-kavenegar-20260925-122959` و
|
||||||
|
`db-before-otp-hardening-20260925-122959.sqlite3`.
|
||||||
|
|
||||||
|
- **از این به بعد هر درخواستِ OTP پول است.** برای همین: شماره به `09XXXXXXXXX` نرمال
|
||||||
|
میشود و غیرِ موبایلِ ایران ۴۰۰ میگیرد؛ cooldown و سقفِ روزانهی هر شماره (۱۰) و سقفِ
|
||||||
|
روزانهی کلِ سامانه (۳۰۰، ضدِ SMS pumping) در دیتابیس شمرده میشوند نه کشِ per-worker.
|
||||||
|
جزئیات در بندِ ۱۷ِ `docs/security-before-production.md`، تستها در `accounts/tests_otp_limits.py`.
|
||||||
|
- مسیرِ کاملِ کاربرِ تازه روی سرورِ زنده سبز شد، **بدونِ پیامکِ واقعی**: کد مستقیم در
|
||||||
|
دیتابیس ساخته شد. کاربرِ تستیِ آن **کاربرِ ۱۷ با شمارهی `09000000001`** (نام «کاربر
|
||||||
|
تست»، یک جزیره تمامشده) روی پروداکشن مانده و مثلِ دادهی دمو پیش از کاربرِ واقعی باید پاک شود.
|
||||||
|
- رسیدنِ پیامک به یک گوشیِ واقعی را هنوز ما ندیدهایم؛ اولین تستِ سینیور همین است.
|
||||||
|
- ⚠️ زیاد SSH زدن پشتِ سرِ هم یک بار «Permission denied» با رمزِ درست داد؛ با
|
||||||
|
`ControlMaster` (سوکت در مسیرِ کوتاهِ `/tmp`، macOS سقفِ ۱۰۴ بایت دارد) یک اتصال باز کنید.
|
||||||
|
|
||||||
## وضعیت ۲۰۲۶-۰۹-۲۵ — این را اول بخوان
|
## وضعیت ۲۰۲۶-۰۹-۲۵ — این را اول بخوان
|
||||||
|
|
||||||
کیفیتِ دستیار و گیرِ نقشه (جزئیات و دلیلها در `docs/architecture.md`). **۵۷۹ تست سبز.**
|
کیفیتِ دستیار و گیرِ نقشه (جزئیات و دلیلها در `docs/architecture.md`). **۵۷۹ تست سبز.**
|
||||||
|
|||||||
@@ -72,6 +72,8 @@
|
|||||||
|
|
||||||
## ۳. دادهی دمو و مهمانِ عمومی
|
## ۳. دادهی دمو و مهمانِ عمومی
|
||||||
|
|
||||||
|
- **افزوده ۲۰۲۶-۰۹-۲۵:** کاربرِ ۱۷ (`09000000001`، «کاربر تست»، `deviceId =
|
||||||
|
deploy-check-20260925`) از تستِ دیپلویِ پیامک؛ همراهِ بقیه پاک شود.
|
||||||
- **چیست:** کاربرهای ۶ (`deviceId = frontend-test-device`) و ۱۰ تا ۱۵، با درس، گفتگو،
|
- **چیست:** کاربرهای ۶ (`deviceId = frontend-test-device`) و ۱۰ تا ۱۵، با درس، گفتگو،
|
||||||
تیکت، خانواده و زیرمجموعه، روی دیتابیسِ پروداکشن ساخته شدهاند. `frontend-test-device`
|
تیکت، خانواده و زیرمجموعه، روی دیتابیسِ پروداکشن ساخته شدهاند. `frontend-test-device`
|
||||||
در ریپو نوشته شده؛ هر کس `POST /api/auth/session` با همین `deviceId` بزند، توکنِ همان
|
در ریپو نوشته شده؛ هر کس `POST /api/auth/session` با همین `deviceId` بزند، توکنِ همان
|
||||||
@@ -220,8 +222,8 @@
|
|||||||
- **رفع:** یک تابعِ `normalize_phone` (ارقامِ فارسی/عربی → لاتین، `+98`/`0098`/`98` → `0`،
|
- **رفع:** یک تابعِ `normalize_phone` (ارقامِ فارسی/عربی → لاتین، `+98`/`0098`/`98` → `0`،
|
||||||
فقط `09\d{9}`) در هر سه serializer، و migrationِ داده برای ردیفهای موجود.
|
فقط `09\d{9}`) در هر سه serializer، و migrationِ داده برای ردیفهای موجود.
|
||||||
- **چطور بسنجید:** دو درخواستِ OTP پشتِسرِهم با `0912…` و `+98912…` باید دومی ۴۲۹ بگیرد.
|
- **چطور بسنجید:** دو درخواستِ OTP پشتِسرِهم با `0912…` و `+98912…` باید دومی ۴۲۹ بگیرد.
|
||||||
- **✅ بسته شد ۲۰۲۶-۰۹-۲۵** (همان روزی که کلیدِ کاوهنگار روی سرور رفت؛ کامیت: _پس از کامیت
|
- **✅ بسته شد ۲۰۲۶-۰۹-۲۵** (همان روزی که کلیدِ کاوهنگار روی سرور رفت؛ کامیت `0580aec`،
|
||||||
اینجا بنویسید_). `accounts/phone.py::normalize_phone` در ورود، درخواستِ OTP، دعوتِ
|
روی سرور از ۱۲:۳۲). `accounts/phone.py::normalize_phone` در ورود، درخواستِ OTP، دعوتِ
|
||||||
خانواده و کلیدهای `TEST_LOGIN_PHONES`؛ migrationِ `accounts.0005` شمارههای موجود را
|
خانواده و کلیدهای `TEST_LOGIN_PHONES`؛ migrationِ `accounts.0005` شمارههای موجود را
|
||||||
نرمال میکند (ردیفی که شکلِ نرمالش مالِ کاربرِ دیگری است دست نمیخورد و فقط شمرده میشود).
|
نرمال میکند (ردیفی که شکلِ نرمالش مالِ کاربرِ دیگری است دست نمیخورد و فقط شمرده میشود).
|
||||||
`parentPhone` در پروفایل هنوز نرمال **نمیشود**. همراهش، چون از این تاریخ پیامکِ واقعی
|
`parentPhone` در پروفایل هنوز نرمال **نمیشود**. همراهش، چون از این تاریخ پیامکِ واقعی
|
||||||
|
|||||||
Reference in New Issue
Block a user