attributes->get('_jwt_user_id'); // تحقق خاص بالراكب (لا يوجد بصمة سيارة مثلاً) return $this->buildToken($userId, 'android/ios_passenger', $request->input('fingerPrint')); } // 2. مسار السائق public function generateDriverToken(Request $request) { $userId = $request->attributes->get('_jwt_user_id'); // تحقق خاص بالسائق (ضرورة وجود بصمة جهاز قوية) return $this->buildToken($userId, 'android/ios_driver', $request->input('fingerPrint')); } // 3. مسار المدير public function generateAdminToken(Request $request) { $userId = $request->attributes->get('_jwt_user_id'); // المدراء لديهم صلاحيات أوسع، قد يكون الـ aud مختلفاً return $this->buildToken($userId, 'web_admin', 'admin_secure_context'); } // 4. دالة البناء المركزية (Private) private function buildToken($userId, $audience, $fingerprint) { $keyPath = env('PAYMENT_INTERNAL_KEY_PATH'); if (!File::exists($keyPath)) { return response()->json(['status' => 'error', 'message' => 'Security Key Missing'], 500); } $internalSecret = trim(File::get($keyPath)); $payload = [ 'iss' => 'Intaleq_V2', 'sub' => $userId, 'aud' => $audience, 'iat' => time(), 'exp' => time() + 60, 'fingerprint' => $fingerprint ]; $token = JWT::encode($payload, $internalSecret, 'HS256'); return response()->json([ 'status' => 'success', 'token' => $token, 'hmac' => hash_hmac('sha256', $token, $internalSecret) ]); } }