make the domain configuration, not code: two env vars move everything
A domain change is coming (the Zarinpal terminal rejects the current callback domain). ALLOWED_HOSTS, CSRF_TRUSTED_ORIGINS, CORS defaults, the Bazaar redirect URI and deploy.sh's public health URL each spelled the domain out. They now derive from PUBLIC_BASE_URL and FRONTEND_URL, which keep today's domain as their default; env values for the three lists are still added on top, so the old domain can stay allowed while DNS moves. ZARINPAL_CALLBACK_URL used os.environ.get(key, default), so an empty key in .env produced an empty callback and every payment would fail closed. It now uses the same `.strip() or` fallback as its neighbours; the new test caught it. config/tests_domains.py loads settings in a subprocess with a new domain and fails if any derived value still mentions the old one. docs/operations.md gains the step-by-step domain move (DNS, .env, Zarinpal/Bazaar panels, frontend config.js, verification). CLAUDE.md records that the frontend is now ours and where the rebuild stands. 624 tests green. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
26
.env.example
26
.env.example
@@ -38,20 +38,22 @@ CACHE_URL=
|
||||
# TADRISINO_SERVICE=
|
||||
|
||||
# -----------------------------------------------------------------------
|
||||
# آدرسِ سرویس — این چهار تا پیشفرضِ درست دارند
|
||||
# آدرسِ سرویس — دو آدرس، بقیه از آنها ساخته میشوند
|
||||
# -----------------------------------------------------------------------
|
||||
# تا پیش از این هر چهارتا باید دستی روی سرور اضافه میشدند، و چون در همین
|
||||
# فایل نبودند هر بار از نو کشف میشدند: نبودِ اولی یعنی «Disallowed Host»،
|
||||
# دومی یعنی ردِ ورود به پنلِ ادمین، سومی یعنی بلاک شدنِ فرانت در مرورگر، و
|
||||
# چهارمی یعنی شکستنِ بیسروصدای مسیرِ پرداخت.
|
||||
# ALLOWED_HOSTS، CSRF_TRUSTED_ORIGINS، CORS_ALLOWED_ORIGINS، callbackِ زرینپال،
|
||||
# برگشت از پرداخت و redirectِ بازار همه از این دو ساخته میشوند. پیشفرضشان
|
||||
# دامنهی فعلی است و لازم نیست ست شوند. برای جابهجایی دامنه فقط همین دو را
|
||||
# باز کنید (ترتیبِ کار در docs/operations.md، «عوض کردنِ دامنه»):
|
||||
#
|
||||
# حالا هر چهارتا مقدارِ پیشفرضِ دامنهی خودمان را دارند و لازم نیست ست شوند.
|
||||
# فقط اگر دامنه عوض شد، اینها را باز کنید:
|
||||
#
|
||||
# DJANGO_ALLOWED_HOSTS=api.math.tadrisino2.ir,math.tadrisino2.ir,localhost,127.0.0.1
|
||||
# CSRF_TRUSTED_ORIGINS=https://api.math.tadrisino2.ir
|
||||
# CORS_ALLOWED_ORIGINS=https://math.tadrisino2.ir
|
||||
# PUBLIC_BASE_URL=https://api.math.tadrisino2.ir
|
||||
# FRONTEND_URL=https://math.tadrisino2.ir
|
||||
#
|
||||
# این سه فقط برای دامنهی *اضافه* لازماند (مثلاً دامنهی قبلی در دورانِ جابهجایی)؛
|
||||
# مقدارشان به پیشفرضها اضافه میشود، جایگزینشان نمیشود:
|
||||
#
|
||||
# DJANGO_ALLOWED_HOSTS=old.example.ir
|
||||
# CSRF_TRUSTED_ORIGINS=https://old.example.ir
|
||||
# CORS_ALLOWED_ORIGINS=https://old-app.example.ir
|
||||
|
||||
# اختیاری — بدونش OTP واقعی ارسال نمیشه (فقط خطای صریح ۵۰۳ برمیگرده،
|
||||
# طبق رفتارِ موجودِ accounts/services.py)
|
||||
@@ -115,7 +117,7 @@ RAG_FORCE_MOCK=
|
||||
# -----------------------------------------------------------------------
|
||||
# بدونِ ZARINPAL_MERCHANT_ID، مسیرِ پرداخت fail-closed میمونه (خطای صریحِ
|
||||
# ۵۰۳ بهجایِ پرداختِ ساختگیِ موفق).
|
||||
# PUBLIC_BASE_URL بالاتر توضیح داده شده؛ پیشفرض دارد.
|
||||
# callbackِ زرینپال از PUBLIC_BASE_URL (بالاتر) ساخته میشود.
|
||||
ZARINPAL_MERCHANT_ID=
|
||||
# 1 = محیطِ sandbox زرینپال (برای تست بدونِ پرداختِ واقعی)
|
||||
ZARINPAL_SANDBOX=1
|
||||
|
||||
Reference in New Issue
Block a user