Update: 2026-05-25 21:44:11
This commit is contained in:
@@ -39,8 +39,71 @@ if (!$user || !password_verify($password, $user['password_hash'])) {
|
||||
json_error('بيانات الدخول غير صحيحة', 401);
|
||||
}
|
||||
|
||||
// 3. Handle device registration if provided (for mobile app login)
|
||||
$deviceId = $data['device_id'] ?? null;
|
||||
$isReviewer = (strtolower($email) === 'reviewer@musadaq.jo');
|
||||
|
||||
if ($deviceId && !$isReviewer) {
|
||||
// Generate and send WhatsApp OTP
|
||||
$phone = $user['phone'] ? (\App\Core\Encryption::decrypt($user['phone']) ?: $user['phone']) : null;
|
||||
if (empty($phone)) {
|
||||
json_error('رقم الهاتف غير مسجل لهذا المستخدم. يرجى التواصل مع المسؤول.', 403);
|
||||
}
|
||||
|
||||
$phone = preg_replace('/[^0-9+]/', '', $phone);
|
||||
$phone = ltrim($phone, '+');
|
||||
if (str_starts_with($phone, '07')) {
|
||||
$phone = '962' . substr($phone, 1);
|
||||
} elseif (str_starts_with($phone, '7')) {
|
||||
$phone = '962' . $phone;
|
||||
}
|
||||
|
||||
$otp = str_pad((string)random_int(100000, 999999), 6, '0', STR_PAD_LEFT);
|
||||
$otpHash = password_hash($otp, PASSWORD_DEFAULT);
|
||||
$phoneHash = hash('sha256', $phone);
|
||||
|
||||
$cacheDir = STORAGE_PATH . '/cache/otp';
|
||||
if (!is_dir($cacheDir)) {
|
||||
mkdir($cacheDir, 0755, true);
|
||||
}
|
||||
|
||||
$otpData = [
|
||||
'hash' => $otpHash,
|
||||
'user_id' => $user['id'],
|
||||
'attempts' => 0,
|
||||
'max_attempts' => 5,
|
||||
'expires_at' => time() + 300,
|
||||
'created_at' => time(),
|
||||
];
|
||||
|
||||
$fp = fopen($cacheDir . '/otp_' . $phoneHash . '.json', 'w');
|
||||
if ($fp) {
|
||||
flock($fp, LOCK_EX);
|
||||
fwrite($fp, json_encode($otpData));
|
||||
flock($fp, LOCK_UN);
|
||||
fclose($fp);
|
||||
}
|
||||
|
||||
$whatsappService = new \App\Services\WhatsAppProxyService();
|
||||
$message = "رمز التحقق لتطبيق مُصادَق:\n*{$otp}*\n\nصالح لمدة 5 دقائق.";
|
||||
$result = $whatsappService->sendMessage($phone, $message);
|
||||
|
||||
if (!$result['success']) {
|
||||
error_log("ERROR: Failed to send OTP WhatsApp to phone: {$phone}");
|
||||
json_error('عذراً، فشل في إرسال رمز التحقق. يرجى المحاولة مرة أخرى.', 500);
|
||||
}
|
||||
|
||||
if (env('APP_DEBUG', 'false') === 'true') {
|
||||
error_log("DEV OTP for {$phone}: {$otp}");
|
||||
}
|
||||
|
||||
json_success([
|
||||
'otp_required' => true,
|
||||
'phone' => $phone,
|
||||
], 'تم إرسال رمز التحقق إلى رقم هاتفك المسجل عبر واتساب');
|
||||
exit;
|
||||
}
|
||||
|
||||
// 3. Handle device registration if provided (for mobile app login)
|
||||
$deviceName = $data['device_name'] ?? 'Web Browser';
|
||||
$deviceSecret = null;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user