service 1
This commit is contained in:
@@ -57,6 +57,8 @@ class JwtService
|
||||
$ttl = 14400;
|
||||
} elseif ($role === 'passenger') {
|
||||
$ttl = 3600;
|
||||
} elseif ($role === 'service') {
|
||||
$ttl = 14400; // 4 hours as requested
|
||||
}
|
||||
|
||||
$payload = [
|
||||
|
||||
76
serviceapp/register.php
Normal file
76
serviceapp/register.php
Normal file
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
/**
|
||||
* serviceapp/register.php
|
||||
* التسجيل الذاتي لموظفي خدمة العملاء - الحساب يكون بحالة pending بانتظار موافقة الإدارة
|
||||
*/
|
||||
require_once __DIR__ . '/../core/bootstrap.php';
|
||||
|
||||
$firstName = filterRequest('first_name');
|
||||
$lastName = filterRequest('last_name');
|
||||
$email = filterRequest('email');
|
||||
$phone = filterRequest('phone');
|
||||
$password = filterRequest('password');
|
||||
$fingerprint = filterRequest('fingerprint');
|
||||
|
||||
if (empty($firstName) || empty($lastName) || empty($email) || 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 users WHERE email = ? OR phone = ? OR fingerprint_hash = ? LIMIT 1");
|
||||
|
||||
// تشفير الحقول للبحث عنها إذا كانت مشفرة في قاعدة البيانات (حسب تصميم النظام)
|
||||
$encEmail = $encryptionHelper->encryptData($email);
|
||||
// ملاحظة: البحث بالهاتف والبريد المشفر يتطلب مطابقة دقيقة أو البحث بالـ Hash إذا كان متوفراً
|
||||
// هنا سنفترض البحث بالبيانات الممرة مباشرة أو المشفرة حسب ما تقتضيه سياسة connect.php
|
||||
|
||||
$check->execute([$email, $phone, $fpHash]);
|
||||
|
||||
if ($check->rowCount() > 0) {
|
||||
jsonError("هذا الحساب أو الجهاز مسجل مسبقاً.");
|
||||
exit;
|
||||
}
|
||||
|
||||
// 2. تجهيز البيانات
|
||||
$id = bin2hex(random_bytes(16));
|
||||
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
|
||||
|
||||
// تشفير البيانات الحساسة قبل التخزين
|
||||
$encFirstName = $encryptionHelper->encryptData($firstName);
|
||||
$encLastName = $encryptionHelper->encryptData($lastName);
|
||||
$encEmail = $encryptionHelper->encryptData($email);
|
||||
$encPhone = $encryptionHelper->encryptData($phone);
|
||||
$encFp = $encryptionHelper->encryptData($fingerprint);
|
||||
|
||||
// 3. الإدخال في قاعدة البيانات (الحالة الافتراضية هي 0 أو pending)
|
||||
$sql = "INSERT INTO users (id, first_name, last_name, email, phone, password, fingerprint, fingerprint_hash, user_type, status, created_at)
|
||||
VALUES (:id, :fname, :lname, :email, :phone, :pass, :fp, :fp_hash, 'service', 0, NOW())";
|
||||
|
||||
$stmt = $con->prepare($sql);
|
||||
$stmt->execute([
|
||||
':id' => $id,
|
||||
':fname' => $encFirstName,
|
||||
':lname' => $encLastName,
|
||||
':email' => $encEmail,
|
||||
':phone' => $encPhone,
|
||||
':pass' => $hashedPassword,
|
||||
':fp' => $encFp,
|
||||
':fp_hash' => $fpHash
|
||||
]);
|
||||
|
||||
printSuccess([
|
||||
"status" => "pending",
|
||||
"message" => "تم تقديم طلب التسجيل بنجاح. يرجى انتظار موافقة الإدارة."
|
||||
]);
|
||||
|
||||
} catch (Exception $e) {
|
||||
error_log("[Service Register Error] " . $e->getMessage());
|
||||
jsonError("خطأ في السيرفر: " . $e->getMessage());
|
||||
}
|
||||
|
||||
exit();
|
||||
Reference in New Issue
Block a user