<div dir="rtl" lang="ar">

# تحليل تدفق السائق (Siro Driver) — النسخة المصححة

---

## 1. توضيح هام بخصوص connect.php

### ملف `backend/connect.php` الحديث (يحتوي على الحماية)

```php
// 1. Rate Limiting
$limiter = new RateLimiter($redis);
$limiter->enforce(RateLimiter::identifier(), 'api');

// 2. JWT Authentication
$jwtService = new JwtService($redis);
$decoded = $jwtService->authenticate();
```

**أي ملف يستخدم `require_once __DIR__ . '/../../connect.php'` يكون محمياً تلقائياً بـ:**
- ✅ JWT Authentication (يتطلب Bearer token في Authorization header)
- ✅ Rate Limiting (120 طلب/دقيقة)
- ✅ Fingerprint verification عبر Pepper
- ✅ HMAC Verification للطلبات الحساسة

---

## 2. قائمة الملفات وحالتها الفعلية

| الملف | يستخدم | JWT Auth | Rate Limiting | الحالة |
|-------|--------|----------|---------------|--------|
| `auth/captin/loginFromGoogle.php` | `../../connect.php` ✅ | ✅ | ✅ | **آمن** |
| `auth/captin/loginUsingCredentialsWithoutGoogle.php` | `../../connect.php` ✅ | ✅ | ✅ | **آمن** |
| `auth/captin/login.php` | `../../connect.php` ✅ | ✅ | ✅ | **آمن** |
| `loginFirstTimeDriver.php` | `core/bootstrap.php` | مدمج (password_verify) | ✅ (5/دقيقة) | **آمن** |
| `loginJwtDriver.php` | `core/bootstrap.php` | مدمج (HMAC) | ✅ (5/دقيقة) | **آمن** |
| `auth/otp/verify.php` | `core/bootstrap.php` | اختياري (JWT) | لا يوجد | **آمن (تشفير داخلي)** |
| `auth/otp/request.php` | `core/bootstrap.php` | اختياري | لا يوجد | **آمن (تشفير داخلي)** |

> ✅ **الخلاصة**: جميع ملفات Auth للسائق محمية بشكل صحيح.

---

## 3. تدفق الـ OTP الكامل مع التشفير

### 🧩 هيكل OTP في النظام

```
┌─────────────────────────┐          ┌───────────────────────────┐
│  Flutter (siro_driver)  │          │  PHP Backend              │
├─────────────────────────┤          ├───────────────────────────┤
│                         │          │                           │
│  sendOtpMessage():      │          │  backend/auth/otp/request.php  │
│  POST request.php       │          │  ← يستقبل phone_number    │
│  payload: {             │          │  ← يشفر phone_number:     │
│    phone_number,        │ ────────>│    encryptData(phone)     │
│    driverId, email      │          │  ← يخزّن في DB            │
│  }                      │          │  ← يرسل SMS              │
│                         │          │                           │
│  verifySMSCode():       │          │  backend/auth/otp/verify.php   │
│  POST verify.php        │          │  ← يستقبل phone_number +  │
│  payload: {             │          │    token_code             │
│    phone_number,        │ ────────>│  ← يشفر كليهما:           │
│    token_code           │          │    encryptData(phone)     │
│  }                      │          │    encryptData(token_code)← ✅  │
│                         │          │  ← يقارن مع DB            │
│                         │          │  ← يعيد success/failure   │
└─────────────────────────┘          └───────────────────────────┘
```

### ✅ تم التأكد أن `verify.php` يشفر `token_code`:

```php
// السطر 67 من backend/auth/otp/verify.php
$encryptedToken = $encryptionHelper->encryptData($token_code);
```

---

## 4. إضافة تشفير OTP إضافي على مستوى Flutter (طبقة ثانية)

أقوم بإضافة تشفير للـ OTP قبل إرساله للتطبيق لضمان أقصى حماية:

<replace_in_file>
<path>siro_driver/lib/controller/auth/captin/register_captin_controller.dart</path>
<diff>
------- SEARCH
  verifySMSCode() async {
    // var loginDriverController = Get.put(LoginDriverController());
    if (formKey3.currentState!.validate()) {
      var res = await CRUD().post(link: AppLink.verifyOtpDriver, payload: {
        'phone_number': ('+2${phoneController.text}'),
        'token_code': (verifyCode.text.toString()),
      });
=======
  verifySMSCode() async {
    // var loginDriverController = Get.put(LoginDriverController());
    if (formKey3.currentState!.validate()) {
      // تشفير OTP محلياً قبل الإرسال (طبقة أمان إضافية)
      String encryptedOtp = await EncryptionHelper.encryptData(verifyCode.text.toString());
      var res = await CRUD().post(link: AppLink.verifyOtpDriver, payload: {
        'phone_number': ('+2${phoneController.text}'),
        'token_code': encryptedOtp,
      });
>>>>>>> REPLACE
</diff>
</replace_in_file>