'Username and password are required']); // Debug version dengan data yang diterima: // echo json_encode(['error' => 'Username and password are required', 'received_data' => $data]); exit; } try { // Debug: tampilkan raw query dan parameters (uncomment jika perlu debug) // $table = 'tbusers'; // $where = 'userName = ?'; // $params = [$data['username']]; // $pdo = Database::getConnection(); // $sql = "SELECT * FROM {$table} WHERE {$where}"; // error_log("Debug - Raw query: " . $sql); // error_log("Debug - Parameters: " . json_encode($params)); // error_log("Debug - Input data: " . json_encode($data)); // error_log("Debug - Password hash: " . sha1(md5($data['password']))); // Cari user berdasarkan username $user = Database::findOne('tbusers', 'userName = ?', [$data['username']]); // Validasi user existence if (!$user) { // Debug: Log failed login attempt // error_log("Login failed - User not found: " . $data['username']); http_response_code(401); echo json_encode(['error' => 'User not found']); exit; } // Validasi password dengan hash yang sesuai sistem legacy $inputPasswordHash = sha1(md5($data['password'])); if ($user['newpass'] !== $inputPasswordHash) { // Debug: Log password mismatch // error_log("Login failed - Password mismatch for user: " . $data['username']); // error_log("Expected hash: " . $user['newpass']); // error_log("Provided hash: " . $inputPasswordHash); http_response_code(401); echo json_encode(['error' => 'Invalid password']); exit; } // Debug: Log successful authentication // error_log("Login successful - User authenticated: " . $data['username']); // Mulai session untuk user session_start(); $_SESSION['user'] = $user['userName']; $_SESSION['username'] = $user['userName']; // ← TAMBAH INI untuk consistency // Setup user session dengan semua data yang diperlukan // Ini akan mengisi session dengan user groups, licenses, dll SessionHelper::dbUserLogin($user['userName']); // Log history login untuk audit trail SessionHelper::infHistoryLogin(); // Setup map configuration untuk user SessionHelper::checkViewMap(); // Generate secure token untuk API authentication $token = DatabaseHelper::generateSecureToken(32); // Simpan token ke database untuk authentication $tokenSaved = SessionHelper::saveToken($user['userName'], $token); // Debug: Log token generation dan penyimpanan // error_log("Login completed - Token generated for user: " . $user['userName']); // error_log("Token saved to database: " . ($tokenSaved ? "Success" : "Failed")); // error_log("Session data: " . json_encode([ // 'username' => $_SESSION['username'] ?? 'not set', // 'fullName' => $_SESSION['fullName'] ?? 'not set', // 'userGroupID' => $_SESSION['userGroupID'] ?? 'not set', // 'license_count' => count($_SESSION['license'] ?? []) // ])); // Return response dengan informasi lengkap user echo json_encode([ 'token' => $token, 'user' => $user['userName'], 'fullName' => isset($_SESSION['fullName']) ? $_SESSION['fullName'] : '', 'userGroupID' => isset($_SESSION['userGroupID']) ? $_SESSION['userGroupID'] : '', 'map_settings' => [ 'latitude' => $_SESSION['map_init_lat'], 'longitude' => $_SESSION['map_init_lng'], 'zoom' => $_SESSION['map_init_zoom'], 'GMT' => $_SESSION['GMT'] ] // Debug: Tambahkan info token untuk debugging // 'token_saved' => $tokenSaved, // 'license_count' => count($_SESSION['license'] ?? []) ]); } catch (Exception $e) { // Log error untuk debugging error_log("Login error: " . $e->getMessage()); error_log("Login error trace: " . $e->getTraceAsString()); http_response_code(500); echo json_encode([ 'error' => 'Database connection failed: ' . $e->getMessage() // Debug version dengan stack trace: // 'error' => 'Database connection failed: ' . $e->getMessage(), // 'trace' => $e->getTraceAsString() ]); }