60 lines
2.1 KiB
PHP
60 lines
2.1 KiB
PHP
<?php
|
|
/**
|
|
* Admin/auth/register.php
|
|
* التسجيل الذاتي للمشرفين - الحساب يكون بحالة pending بانتظار موافقة السوبر أدمن
|
|
*/
|
|
require_once __DIR__ . '/../../core/bootstrap.php';
|
|
|
|
$name = filterRequest('name');
|
|
$phone = filterRequest('phone');
|
|
$password = filterRequest('password');
|
|
$fingerprint = filterRequest('fingerprint');
|
|
|
|
if (empty($name) || empty($phone) || empty($password) || empty($fingerprint)) {
|
|
jsonError("All fields are required.");
|
|
exit;
|
|
}
|
|
|
|
try {
|
|
$con = Database::get('main');
|
|
|
|
// 1. التحقق من عدم وجود الحساب مسبقاً (عن طريق الهاتف أو البصمة)
|
|
$fpHash = hash('sha256', $fingerprint);
|
|
$check = $con->prepare("SELECT id FROM adminUser WHERE phone = ? OR fingerprint_hash = ? LIMIT 1");
|
|
$check->execute([$phone, $fpHash]);
|
|
|
|
if ($check->rowCount() > 0) {
|
|
jsonError("هذا الحساب أو الجهاز مسجل مسبقاً.");
|
|
exit;
|
|
}
|
|
|
|
// 2. تجهيز البيانات
|
|
$id = bin2hex(random_bytes(16));
|
|
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
|
|
$encName = $encryptionHelper->encryptData($name);
|
|
$encFp = $encryptionHelper->encryptData($fingerprint);
|
|
|
|
// 3. الإدخال في قاعدة البيانات (الحالة الافتراضية هي pending)
|
|
$sql = "INSERT INTO adminUser (id, name, phone, password, fingerprint, fingerprint_hash, role, status, created_at)
|
|
VALUES (:id, :name, :phone, :pass, :fp, :fp_hash, 'admin', 'pending', NOW())";
|
|
|
|
$stmt = $con->prepare($sql);
|
|
$stmt->execute([
|
|
':id' => $id,
|
|
':name' => $encName,
|
|
':phone' => $phone,
|
|
':pass' => $hashedPassword,
|
|
':fp' => $encFp,
|
|
':fp_hash' => $fpHash
|
|
]);
|
|
|
|
printSuccess([
|
|
"status" => "pending",
|
|
"message" => "تم تقديم طلب التسجيل بنجاح. يرجى انتظار موافقة الإدارة."
|
|
]);
|
|
|
|
} catch (Exception $e) {
|
|
error_log("[Admin Register Error] " . $e->getMessage());
|
|
jsonError("خطأ في السيرفر: " . $e->getMessage());
|
|
}
|