feat: D5 — OTP متعدد المزوّدين حسب الدولة (من سيرو) + قرار بلا كلمة مرور
مراجعة سيرو (auth/otp/): مصر تستعمل Kazumi SMS مع failover لواتساب، وسوريا/الأردن Nabeh. عندنا كان مزوّد واحد فقط. - integrations/otp/: واجهة OtpProvider + OtpDispatcher يوجّه حسب tenant.countryPack بسلسلة failover (eg: [kazumi, nabeh] · jo/sy: [nabeh]) - KazumiSmsProvider (مصر SMS) + NabehOtpProvider (غلاف على NabehService) - كل مزوّد يرسل رمزاً نولّده نحن (Redis) — استبعدنا نمط Intaleq (يولّد الرمز بنفسه) حفاظاً على مصدر واحد للرمز - موحَّد: AuthService.sendOtp و PayoutsService.issueOtp يمرّان بنفس المُوزِّع الآن — أُزيل كل استدعاء Nabeh مباشر. أي مسار يحتاج رسالة يستدعي الخدمة الموحّدة (طلب المالك) - فشل السلسلة كاملة = ServiceUnavailable صريح، لا صمت قرار المالك (2026-07-17): بلا كلمة مرور إطلاقاً. المصادقة = هاتف + OTP مرة → جلسة مربوطة بالجهاز (D2). التسجيل بالهاتف لا Google/Apple (محظوران في بعض الدول). سيرو نفسه لا كلمة مرور حقيقية له (password = hash(email) وهمي، ومقارنة نصّية غير آمنة في مسار التجربة). يطابق أوبر/كريم/inDrive. مراجعة حدّ الطلبات في سيرو (RateLimiter.php): حدود مسمّاة لكل نوع + fallback بملف عند تعطّل Redis (fail-closed). عندنا مسار OTP fail-closed أصلاً؛ تخزين Throttler على Redis مؤجَّل للتوسّع الأفقي الفعلي (موثّق في D4). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
c258a8c4b8
commit
8f6c46f0ac
+10
-2
@@ -42,14 +42,22 @@ MAPS_API_KEY_JO=
|
||||
MAPS_API_KEY_SY=
|
||||
MAPS_PLACES_API_KEY=
|
||||
|
||||
# ---- OTP via Nabeh (WhatsApp) ----
|
||||
# اتركه dev لتفعيل الرمز الثابت 1234 بلا إرسال؛ اجعله false للإرسال الحقيقي عبر Nabeh
|
||||
# ---- OTP: توجيه متعدد المزوّدين حسب دولة المستأجر (docs/17 — D5) ----
|
||||
# اتركه dev لتفعيل الرمز الثابت 1234 بلا إرسال؛ اجعله false للإرسال الحقيقي
|
||||
OTP_DEV_MODE=true
|
||||
OTP_SMS_TEMPLATE=Your Tripz code is {code}
|
||||
|
||||
# سوريا/الأردن — Nabeh (واتساب)
|
||||
NABEH_BASE_URL=https://nabeh.intaleqapp.com
|
||||
NABEH_EMAIL=
|
||||
NABEH_PASSWORD=
|
||||
NABEH_OTP_TYPE=text
|
||||
|
||||
# مصر — Kazumi (SMS)، مع failover تلقائي إلى Nabeh لو فشل
|
||||
SMS_USERNAME=
|
||||
SMS_PASSWORD_EGYPT=
|
||||
SMS_SENDER=
|
||||
|
||||
# ---- FCM push (اتركه فارغاً لتعطيل الإرسال) ----
|
||||
FCM_SERVER_KEY=
|
||||
FCM_ENDPOINT=https://fcm.googleapis.com/fcm/send
|
||||
|
||||
Reference in New Issue
Block a user