$user_id ?? 'unknown', 'role' => $role ?? 'none', ]); jsonError('Forbidden. Super Admin access required.', 403); } // 1) قراءة الـ body كـ JSON أو POST $action = filterRequest('action'); $text = filterRequest('text'); $adminPhoneParam = filterRequest('admin_phone'); // 2) طبقة ثانية: رقم الهاتف يجب أن يكون ضمن القائمة المصرّح لها (إن وُجدت) $phonesRaw = getenv('ADMIN_PHONE_NUMBERS') ?: ''; $ALLOWED_TOOL_PHONES = array_values( array_filter( array_map(function ($p) { return preg_replace('/\D+/', '', $p); }, explode(',', $phonesRaw)) ) ); $adminPhoneParam = $adminPhoneParam ? preg_replace('/\D+/', '', $adminPhoneParam) : ''; if (!empty($ALLOWED_TOOL_PHONES) && ($adminPhoneParam === '' || !in_array($adminPhoneParam, $ALLOWED_TOOL_PHONES, true))) { securityLog("Encrypt/decrypt phone not in allow-list", [ 'user_id' => $user_id ?? 'unknown', 'phone' => $adminPhoneParam, ]); jsonError('Access denied for this admin phone.', 403); } // 3) سجل تدقيق: كل استخدام لهذه الأداة يُسجَّل مع هوية المنفّذ securityLog("Encryption tool used", [ 'user_id' => $user_id ?? 'unknown', 'action' => $action, 'ip' => $_SERVER['REMOTE_ADDR'] ?? 'unknown', ]); if (empty($text) || ($action !== 'encrypt' && $action !== 'decrypt')) { jsonError('Invalid input: need action=encrypt|decrypt and non-empty text.', 400); } // 4) تنفيذ التشفير / الفك (التوافق مع CBC الحالي) try { if ($action === 'encrypt') { $result = $encryptionHelper->encryptData($text); } else { // decrypt $result = $encryptionHelper->decryptData($text); } jsonSuccess([ 'action' => $action, 'result' => (string) $result, ]); } catch (Exception $e) { securityLog("Encryption tool failed", ['error' => $e->getMessage()]); jsonError('Operation failed.', 500); }