Compare commits

3 Commits
4 changed files with 45 additions and 29 deletions
+3 -10
View File
@@ -45,10 +45,9 @@ try {
$pepper = getenv('SECRET_KEY_HMAC'); $pepper = getenv('SECRET_KEY_HMAC');
$stmt = $con->prepare(' $stmt = $con->prepare('
SELECT d.id, d.phone, d.national_number, d.email, d.password, d.birthdate, c.year SELECT id, phone, national_number, email, password, birthdate
FROM driver d FROM driver
LEFT JOIN CarRegistration c ON c.driverID = d.id WHERE id = :id
WHERE d.id = :id
LIMIT 1 LIMIT 1
'); ');
$stmt->execute([':id' => $id]); $stmt->execute([':id' => $id]);
@@ -76,9 +75,6 @@ try {
if (!empty($decNat)) { if (!empty($decNat)) {
$newParts[] = trim($decNat); $newParts[] = trim($decNat);
} }
if (!empty($driver['year']) && preg_match('/^\d{4}$/', $driver['year'])) {
$newParts[] = $driver['year'];
}
$newString = implode('|', $newParts); $newString = implode('|', $newParts);
$newSecret = hash_hmac('sha256', $newString, $pepper, true); $newSecret = hash_hmac('sha256', $newString, $pepper, true);
@@ -93,9 +89,6 @@ try {
if (!empty($driver['national_number'])) { if (!empty($driver['national_number'])) {
$oldParts[] = $driver['national_number']; $oldParts[] = $driver['national_number'];
} }
if (!empty($driver['year']) && preg_match('/^\d{4}$/', $driver['year'])) {
$oldParts[] = $driver['year'];
}
$oldString = implode('|', $oldParts); $oldString = implode('|', $oldParts);
$oldSecret = hash_hmac('sha256', $oldString, $pepper, true); $oldSecret = hash_hmac('sha256', $oldString, $pepper, true);
+1 -8
View File
@@ -53,14 +53,7 @@ try {
]; ];
$con = new PDO($dsn, $user, $pass, $options); $con = new PDO($dsn, $user, $pass, $options);
// Ride DB Connection (for cross-db queries)
$rideDbname = getenv('DB_RIDE_NAME') ?: 'rideDB';
$rideDbHost = getenv('DB_RIDE_HOST') ?: (getenv('DB_HOST') ?: 'mysql');
$rideUser = getenv('DB_RIDE_USER') ?: 'root';
$ridePass = getenv('DB_RIDE_PASS') ?: getenv('MYSQL_ROOT_PASSWORD') ?: '';
$dsnRide = "mysql:host=$rideDbHost;dbname=$rideDbname;charset=utf8mb4";
$conRide = new PDO($dsnRide, $rideUser, $ridePass, $options);
// 5. JWT Authentication // 5. JWT Authentication
include __DIR__ . "/functions.php"; include __DIR__ . "/functions.php";
@@ -3,17 +3,35 @@ include "../../connect.php";
$driverID = filterRequest("driverID"); $driverID = filterRequest("driverID");
try { try {
// 1. Get ride stats using $conRide // 1. Get ride stats using local $conRide
$sqlRide = "SELECT $rideStats = [];
(SELECT COUNT(*) FROM `ride` WHERE LOWER(`status`) IN ('finished','completed') AND `created_at` BETWEEN CURRENT_DATE() + INTERVAL 7 HOUR AND CURRENT_DATE() + INTERVAL 10 HOUR AND `driver_id` = :driverID) AS morning_count, try {
(SELECT COUNT(*) FROM `ride` WHERE LOWER(`status`) IN ('finished','completed') AND `created_at` BETWEEN CURRENT_DATE() + INTERVAL 15 HOUR AND CURRENT_DATE() + INTERVAL 18 HOUR AND `driver_id` = :driverID) AS afternoon_count, $rideDbname = getenv('DB_RIDE_NAME') ?: 'rideDB';
(SELECT COALESCE(SUM(price), 0) FROM `ride` WHERE `driver_id` = :driverID AND LOWER(`status`) IN ('finished','completed') AND `created_at` > CURRENT_DATE() - INTERVAL 1 WEEK) AS total_amount_last_week $rideDbHost = getenv('DB_RIDE_HOST') ?: (getenv('DB_HOST') ?: 'mysql');
FROM dual"; $rideUser = getenv('DB_RIDE_USER') ?: 'root';
$ridePass = getenv('DB_RIDE_PASS') ?: getenv('MYSQL_ROOT_PASSWORD') ?: '';
$stmtRide = $conRide->prepare($sqlRide); $dsnRide = "mysql:host=$rideDbHost;dbname=$rideDbname;charset=utf8mb4";
$stmtRide->bindValue(':driverID', $driverID); $options = [
$stmtRide->execute(); PDO::ATTR_EMULATE_PREPARES => false,
$rideStats = $stmtRide->fetch(PDO::FETCH_ASSOC) ?: []; PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
$conRide = new PDO($dsnRide, $rideUser, $ridePass, $options);
$sqlRide = "SELECT
(SELECT COUNT(*) FROM `ride` WHERE LOWER(`status`) IN ('finished','completed') AND `created_at` BETWEEN CURRENT_DATE() + INTERVAL 7 HOUR AND CURRENT_DATE() + INTERVAL 10 HOUR AND `driver_id` = :driverID) AS morning_count,
(SELECT COUNT(*) FROM `ride` WHERE LOWER(`status`) IN ('finished','completed') AND `created_at` BETWEEN CURRENT_DATE() + INTERVAL 15 HOUR AND CURRENT_DATE() + INTERVAL 18 HOUR AND `driver_id` = :driverID) AS afternoon_count,
(SELECT COALESCE(SUM(price), 0) FROM `ride` WHERE `driver_id` = :driverID AND LOWER(`status`) IN ('finished','completed') AND `created_at` > CURRENT_DATE() - INTERVAL 1 WEEK) AS total_amount_last_week
FROM dual";
$stmtRide = $conRide->prepare($sqlRide);
$stmtRide->bindValue(':driverID', $driverID);
$stmtRide->execute();
$rideStats = $stmtRide->fetch(PDO::FETCH_ASSOC) ?: [];
} catch (Exception $e) {
error_log('[getAllPayment] DB_RIDE Connection Error: ' . $e->getMessage());
$rideStats = ['morning_count' => 0, 'afternoon_count' => 0, 'total_amount_last_week' => 0];
}
// 2. Get payment stats using $con // 2. Get payment stats using $con
$sqlPayment = "SELECT COALESCE(SUM(amount), 0) AS total_amount FROM payments WHERE isGiven = 'waiting' AND `driverID` = :driverID"; $sqlPayment = "SELECT COALESCE(SUM(amount), 0) AS total_amount FROM payments WHERE isGiven = 'waiting' AND `driverID` = :driverID";
@@ -13,6 +13,18 @@ WHERE
"; ";
// كان المعرّف يُدمج في نص الاستعلام مباشرةً — حقن SQL. // كان المعرّف يُدمج في نص الاستعلام مباشرةً — حقن SQL.
try { try {
$rideDbname = getenv('DB_RIDE_NAME') ?: 'rideDB';
$rideDbHost = getenv('DB_RIDE_HOST') ?: (getenv('DB_HOST') ?: 'mysql');
$rideUser = getenv('DB_RIDE_USER') ?: 'root';
$ridePass = getenv('DB_RIDE_PASS') ?: getenv('MYSQL_ROOT_PASSWORD') ?: '';
$dsnRide = "mysql:host=$rideDbHost;dbname=$rideDbname;charset=utf8mb4";
$options = [
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
$conRide = new PDO($dsnRide, $rideUser, $ridePass, $options);
$stmt = $conRide->prepare($sql); $stmt = $conRide->prepare($sql);
$stmt->bindValue(':driver_id', $driver_id); $stmt->bindValue(':driver_id', $driver_id);
$stmt->execute(); $stmt->execute();