diff --git a/siro_driver/lib/print.dart b/siro_driver/lib/print.dart index a3d59f67..fe274a12 100755 --- a/siro_driver/lib/print.dart +++ b/siro_driver/lib/print.dart @@ -1,9 +1,16 @@ import 'dart:developer' as developer; +import 'package:flutter/foundation.dart' show kDebugMode; + class Log { Log._(); + /// ⚠️ يُطبع في وضع التطوير فقط. + /// `developer.log` لا يُحذف في نسخة الإصدار — يذهب إلى os_log على iOS + /// و logcat على أندرويد، وكان يسرّب الـ JWT وسر الـ HMAC وأرقام الهواتف + /// وردود الـ API كاملة إلى سجلّ النظام على جهاز المستخدم. static void print(String value, {StackTrace? stackTrace}) { + if (!kDebugMode) return; developer.log(value, name: 'LOG', stackTrace: stackTrace); } diff --git a/siro_rider/lib/controller/auth/login_controller.dart b/siro_rider/lib/controller/auth/login_controller.dart index 658cc59b..27c3fc36 100644 --- a/siro_rider/lib/controller/auth/login_controller.dart +++ b/siro_rider/lib/controller/auth/login_controller.dart @@ -418,39 +418,39 @@ class LoginController extends GetxController { force: true); // Fetch access token after clearing firstTimeLoadKey // ── 5. المقارنة: FCM token + fingerprint ────────────────────── - if (email != '962798583052@intaleqapp.com') { - if (serverFCM == null && - tokenResp != null && - tokenResp != 'failure' && - tokenResp != 'error' && - tokenResp != 'token_expired') { - final tokenJson = - tokenResp is String ? jsonDecode(tokenResp) : tokenResp; - final serverData = tokenJson['data'] ?? tokenJson['message']; - if (serverData is Map) { - serverFCM = serverData['token']?.toString() ?? ''; - serverFP = serverData['fingerPrint']?.toString() ?? ''; - } + // ملاحظة: كان هنا استثناء لحساب اختبار بعينه يتخطى الفحص بالكامل. + // حُذف — لا استثناءات على التحقق من تغيّر الجهاز. + if (serverFCM == null && + tokenResp != null && + tokenResp != 'failure' && + tokenResp != 'error' && + tokenResp != 'token_expired') { + final tokenJson = + tokenResp is String ? jsonDecode(tokenResp) : tokenResp; + final serverData = tokenJson['data'] ?? tokenJson['message']; + if (serverData is Map) { + serverFCM = serverData['token']?.toString() ?? ''; + serverFP = serverData['fingerPrint']?.toString() ?? ''; } + } - if (serverFCM != null && serverFCM.isNotEmpty) { - final localFCM = (box.read(BoxName.tokenFCM) ?? '').toString(); + if (serverFCM != null && serverFCM.isNotEmpty) { + final localFCM = (box.read(BoxName.tokenFCM) ?? '').toString(); - // ── اختلاف أي منهما = جهاز مختلف أو تثبيت جديد ───────── - final fcmChanged = serverFCM != localFCM; - final fpChanged = - serverFP != null && serverFP.isNotEmpty && serverFP != localFP; + // ── اختلاف أي منهما = جهاز مختلف أو تثبيت جديد ───────── + final fcmChanged = serverFCM != localFCM; + final fpChanged = + serverFP != null && serverFP.isNotEmpty && serverFP != localFP; - if (fcmChanged || fpChanged) { - mySnackbarInfo('Device Change Detected'.tr); - await Get.to(() => OtpVerificationPage( - phone: data['phone'].toString(), - deviceToken: localFP, - token: tokenResp ?? '', - ptoken: serverFCM ?? '', // نمرر FCM القديم للـ OTP controller - )); - return; - } + if (fcmChanged || fpChanged) { + mySnackbarInfo('Device Change Detected'.tr); + await Get.to(() => OtpVerificationPage( + phone: data['phone'].toString(), + deviceToken: localFP, + token: tokenResp ?? '', + ptoken: serverFCM ?? '', // نمرر FCM القديم للـ OTP controller + )); + return; } } diff --git a/siro_rider/lib/print.dart b/siro_rider/lib/print.dart index a3d59f67..fe274a12 100644 --- a/siro_rider/lib/print.dart +++ b/siro_rider/lib/print.dart @@ -1,9 +1,16 @@ import 'dart:developer' as developer; +import 'package:flutter/foundation.dart' show kDebugMode; + class Log { Log._(); + /// ⚠️ يُطبع في وضع التطوير فقط. + /// `developer.log` لا يُحذف في نسخة الإصدار — يذهب إلى os_log على iOS + /// و logcat على أندرويد، وكان يسرّب الـ JWT وسر الـ HMAC وأرقام الهواتف + /// وردود الـ API كاملة إلى سجلّ النظام على جهاز المستخدم. static void print(String value, {StackTrace? stackTrace}) { + if (!kDebugMode) return; developer.log(value, name: 'LOG', stackTrace: stackTrace); }