#!/usr/bin/env php */ require_once __DIR__ . '/../lib/CryptoService.php'; require_once __DIR__ . '/../lib/DatabaseConnection.php'; require_once __DIR__ . '/../lib/helpers.php'; // Vérifier les arguments if ($argc < 3) { error("Usage: " . basename($argv[0]) . " "); error("Exemple: " . basename($argv[0]) . " dev contact@example.com"); exit(1); } $environment = strtoupper($argv[1]); $searchEmail = strtolower(trim($argv[2])); try { // Ouvrir le tunnel SSH si nécessaire $tunnelScript = __DIR__ . '/_ssh-tunnel.sh'; exec("$tunnelScript open $environment 2>&1", $output, $exitCode); if ($exitCode !== 0) { error("Impossible d'ouvrir le tunnel SSH"); exit(1); } // Connexion à la base de données $db = new DatabaseConnection($environment); $pdo = $db->connect(); info("Environnement: $environment"); info("Recherche de l'email: $searchEmail\n"); // Récupérer TOUS les utilisateurs (on doit déchiffrer pour chercher) $stmt = $pdo->query(" SELECT u.id, u.encrypted_user_name, u.encrypted_email, u.encrypted_name, u.first_name, u.fk_role, u.fk_entite, r.libelle as role_name, e.encrypted_name as entite_encrypted_name FROM users u LEFT JOIN x_users_roles r ON u.fk_role = r.id LEFT JOIN entites e ON u.fk_entite = e.id ORDER BY u.id "); $allUsers = $stmt->fetchAll(); // Déchiffrer et filtrer $config = DatabaseConfig::getInstance(); $crypto = new CryptoService($config->getEncryptionKey()); $matchedUsers = []; info("Analyse de " . count($allUsers) . " utilisateurs..."); foreach ($allUsers as $user) { $email = $crypto->decryptSearchable($user['encrypted_email']); if ($email && strtolower($email) === $searchEmail) { $matchedUsers[] = [ 'id' => $user['id'], 'username' => $crypto->decryptSearchable($user['encrypted_user_name']), 'email' => $email, 'prenom' => $user['first_name'], 'nom' => $crypto->decryptWithIV($user['encrypted_name']), 'role' => $user['role_name'], 'entite_id' => $user['fk_entite'], 'entite' => $crypto->decryptWithIV($user['entite_encrypted_name']), ]; } } if (empty($matchedUsers)) { warning("\nAucun utilisateur trouvé avec l'email: $searchEmail"); exit(0); } // Affichage echo "\n"; title("RÉSULTATS DE LA RECHERCHE - " . count($matchedUsers) . " utilisateur(s) trouvé(s)"); if (count($matchedUsers) > 1) { warning("Attention: Plusieurs comptes utilisent le même email (autorisé par le système)"); echo "\n"; } foreach ($matchedUsers as $index => $user) { echo color("═══ Utilisateur #" . $user['id'] . " ═══", 'cyan') . "\n"; display("Username", $user['username']); display("Prénom", $user['prenom']); display("Nom", $user['nom']); display("Email", $user['email']); display("Rôle", $user['role']); display("Entité ID", (string)$user['entite_id']); display("Entité Nom", $user['entite']); echo "\n"; } success("Recherche terminée"); // Proposer d'afficher les détails complets if (count($matchedUsers) === 1) { echo "\n"; if (confirm("Afficher les détails complets de cet utilisateur ?")) { echo "\n"; $userId = $matchedUsers[0]['id']; $decryptUserScript = __DIR__ . '/decrypt-user'; passthru("$decryptUserScript $environment $userId"); } } } catch (Exception $e) { error("Erreur: " . $e->getMessage()); exit(1); }