55 lines
1.9 KiB
PHP
Executable File
55 lines
1.9 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Admin/auth/login.php
|
|
* تسجيل دخول المشرفين باستخدام البصمة وكلمة المرور المشفرة
|
|
*/
|
|
require_once __DIR__ . '/../../core/bootstrap.php';
|
|
|
|
$fingerprint = filterRequest('fingerprint');
|
|
$password = filterRequest('password');
|
|
$audience = filterRequest('aud') ?? 'admin';
|
|
|
|
if (empty($fingerprint) || empty($password)) {
|
|
jsonError("Fingerprint and password are required.");
|
|
exit;
|
|
}
|
|
|
|
try {
|
|
$con = Database::get('main');
|
|
|
|
// البحث عن المشرف باستخدام بصمة الجهاز (Fingerprint Hash)
|
|
$fpHash = hash('sha256', $fingerprint);
|
|
$stmt = $con->prepare("SELECT * FROM adminUser WHERE fingerprint_hash = :fp LIMIT 1");
|
|
$stmt->execute([':fp' => $fpHash]);
|
|
$admin = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if ($admin) {
|
|
// التحقق من كلمة المرور الهاش
|
|
if (password_verify($password, $admin['password'])) {
|
|
|
|
// فك تشفير الاسم للعرض في التطبيق
|
|
$admin['name'] = $encryptionHelper->decryptData($admin['name']) ?: $admin['name'];
|
|
unset($admin['password']);
|
|
|
|
$jwtService = new JwtService($redis);
|
|
$role = $admin['role'] ?? 'admin';
|
|
|
|
// توليد توكن الدخول مع ربطه ببصمة الجهاز
|
|
$jwt = $jwtService->generateAccessToken($admin['id'], $role, $audience, $fingerprint);
|
|
|
|
printSuccess([
|
|
"message" => "Login successful",
|
|
"admin" => $admin,
|
|
"jwt" => $jwt,
|
|
"expires_in" => 3600
|
|
]);
|
|
} else {
|
|
jsonError("كلمة المرور غير صحيحة.");
|
|
}
|
|
} else {
|
|
jsonError("الجهاز غير مسجل كمشرف.");
|
|
}
|
|
} catch (Exception $e) {
|
|
error_log("[Admin Login Error] " . $e->getMessage());
|
|
jsonError("خطأ في السيرفر: " . $e->getMessage());
|
|
} |