103 lines
4.1 KiB
PHP
103 lines
4.1 KiB
PHP
<?php
|
|
require_once 'includes/config.php';
|
|
require_once 'includes/Security.php';
|
|
|
|
echo "=== اختبار نظام المستخدمين ===\n\n";
|
|
|
|
try {
|
|
// اختبار الاتصال بقاعدة البيانات
|
|
$conn = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
|
|
if ($conn->connect_error) {
|
|
throw new Exception("فشل الاتصال بقاعدة البيانات: " . $conn->connect_error);
|
|
}
|
|
echo "✓ تم الاتصال بقاعدة البيانات بنجاح\n";
|
|
|
|
// التحقق من وجود جدول المستخدمين
|
|
$result = $conn->query("SHOW TABLES LIKE 'users'");
|
|
if ($result->num_rows > 0) {
|
|
echo "✓ جدول المستخدمين موجود\n";
|
|
} else {
|
|
throw new Exception("جدول المستخدمين غير موجود");
|
|
}
|
|
|
|
// التحقق من وجود جدول إعادة تعيين كلمات المرور
|
|
$result = $conn->query("SHOW TABLES LIKE 'password_resets'");
|
|
if ($result->num_rows > 0) {
|
|
echo "✓ جدول إعادة تعيين كلمات المرور موجود\n";
|
|
} else {
|
|
throw new Exception("جدول إعادة تعيين كلمات المرور غير موجود");
|
|
}
|
|
|
|
// اختبار إنشاء مستخدم جديد
|
|
$test_username = "test_user_" . time();
|
|
$test_email = "test_" . time() . "@example.com";
|
|
$test_password = "Test@123456";
|
|
|
|
$hashed_password = Security::hashPassword($test_password);
|
|
|
|
$stmt = $conn->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
|
|
$stmt->bind_param("sss", $test_username, $test_email, $hashed_password);
|
|
|
|
if ($stmt->execute()) {
|
|
echo "✓ تم إنشاء مستخدم اختباري بنجاح\n";
|
|
$test_user_id = $stmt->insert_id;
|
|
} else {
|
|
throw new Exception("فشل في إنشاء مستخدم اختباري");
|
|
}
|
|
|
|
// اختبار تسجيل الدخول
|
|
$stmt = $conn->prepare("SELECT id, password FROM users WHERE email = ?");
|
|
$stmt->bind_param("s", $test_email);
|
|
$stmt->execute();
|
|
$result = $stmt->get_result();
|
|
|
|
if ($row = $result->fetch_assoc()) {
|
|
if (Security::verifyPassword($test_password, $row['password'])) {
|
|
echo "✓ تم التحقق من كلمة المرور بنجاح\n";
|
|
} else {
|
|
throw new Exception("فشل في التحقق من كلمة المرور");
|
|
}
|
|
} else {
|
|
throw new Exception("فشل في العثور على المستخدم");
|
|
}
|
|
|
|
// اختبار إنشاء رمز إعادة تعيين كلمة المرور
|
|
$token = bin2hex(random_bytes(32));
|
|
$expiry = date('Y-m-d H:i:s', strtotime('+1 hour'));
|
|
|
|
$stmt = $conn->prepare("INSERT INTO password_resets (user_id, token, expiry) VALUES (?, ?, ?)");
|
|
$stmt->bind_param("iss", $test_user_id, $token, $expiry);
|
|
|
|
if ($stmt->execute()) {
|
|
echo "✓ تم إنشاء رمز إعادة تعيين كلمة المرور بنجاح\n";
|
|
} else {
|
|
throw new Exception("فشل في إنشاء رمز إعادة تعيين كلمة المرور");
|
|
}
|
|
|
|
// اختبار التحقق من رمز إعادة تعيين كلمة المرور
|
|
$stmt = $conn->prepare("SELECT user_id FROM password_resets WHERE token = ? AND expiry > NOW() AND used = 0");
|
|
$stmt->bind_param("s", $token);
|
|
$stmt->execute();
|
|
$result = $stmt->get_result();
|
|
|
|
if ($result->num_rows > 0) {
|
|
echo "✓ تم التحقق من رمز إعادة تعيين كلمة المرور بنجاح\n";
|
|
} else {
|
|
throw new Exception("فشل في التحقق من رمز إعادة تعيين كلمة المرور");
|
|
}
|
|
|
|
// تنظيف البيانات الاختبارية
|
|
$conn->query("DELETE FROM password_resets WHERE user_id = " . $test_user_id);
|
|
$conn->query("DELETE FROM users WHERE id = " . $test_user_id);
|
|
echo "✓ تم تنظيف البيانات الاختبارية بنجاح\n";
|
|
|
|
echo "\n=== تم اكتمال الاختبار بنجاح ===\n";
|
|
|
|
} catch (Exception $e) {
|
|
echo "\n❌ خطأ: " . $e->getMessage() . "\n";
|
|
} finally {
|
|
if (isset($conn)) {
|
|
$conn->close();
|
|
}
|
|
}
|