diff --git a/app/public/index.php b/app/public/index.php index ed558e5..862c489 100644 --- a/app/public/index.php +++ b/app/public/index.php @@ -76,33 +76,60 @@ $userCount = $stmt->fetchColumn(); $rootCertExists = file_exists(ROOT_CA_PATH . '/certs/ca.cert.pem'); if ($userCount === 0 || !$rootCertExists) { - // Afficher une page d'initialisation ou un message d'attente - echo "
Veuillez fournir les informations suivantes pour la configuration initiale :
"; + echo ""; + echo "Ceci est le premier lancement. Nous allons configurer la base de données, créer le certificat Root CA et le premier compte administrateur.
"; + echo "Configuration en cours avec les informations fournies...
"; // Création du certificat Root CA si non existant if (!$rootCertExists) { echo "Création du certificat Root CA en cours...
"; - $logService->log('info', 'Lancement de la création du certificat Root CA.', null, $_SERVER['REMOTE_ADDR']); - // Exécution du script shell de création de certificat root - $command = escapeshellcmd(SCRIPTS_PATH . '/create_root_cert.sh'); // Utilise la constante + $logService->log('info', 'Lancement de la création du certificat Root CA pour le domaine: ' . $_SESSION['init_root_domain'], null, $_SERVER['REMOTE_ADDR']); + // Exécution du script shell de création de certificat root avec le domaine racine + $command = escapeshellcmd(SCRIPTS_PATH . '/create_root_cert.sh ' . escapeshellarg($_SESSION['init_root_domain'])); $output = shell_exec($command . ' 2>&1'); $logService->log('info', "Résultat création Root CA: " . $output, null, $_SERVER['REMOTE_ADDR']); if (file_exists(ROOT_CA_PATH . '/certs/ca.cert.pem')) { - echo "Certificat Root CA créé avec succès.
"; + echo "Certificat Root CA créé avec succès pour le domaine " . htmlspecialchars($_SESSION['init_root_domain']) . ".
"; // Extraire la date d'expiration du certificat créé pour l'enregistrer en BDD $certInfo = shell_exec("openssl x509 -in " . escapeshellarg(ROOT_CA_PATH . '/certs/ca.cert.pem') . " -noout -enddate 2>/dev/null | cut -d= -f2"); $expirationTimestamp = strtotime($certInfo); $expirationDate = $expirationTimestamp ? date('Y-m-d H:i:s', $expirationTimestamp) : (new DateTime('+10 years'))->format('Y-m-d H:i:s'); // Enregistrer le certificat root dans la base de données - $stmt = $dbInstance->prepare("INSERT INTO certificates (name, type, expiration_date) VALUES (?, ?, ?)"); - $stmt->execute(['ca.cert.pem', 'root', $expirationDate]); + $stmt = $dbInstance->prepare("INSERT INTO certificates (name, type, common_name, expiration_date) VALUES (?, ?, ?, ?)"); + $stmt->execute(['ca.cert.pem', 'root', $_SESSION['init_root_domain'], $expirationDate]); } else { echo "Erreur lors de la création du certificat Root CA. Veuillez vérifier les logs PHP et Docker.
"; echo "" . htmlspecialchars($output) . ""; + // Nettoyer les variables de session en cas d'erreur pour permettre une nouvelle tentative + unset($_SESSION['init_admin_password']); + unset($_SESSION['init_root_domain']); + echo ""; // Arrête l'exécution pour que l'utilisateur puisse voir l'erreur exit(); } @@ -112,15 +139,21 @@ if ($userCount === 0 || !$rootCertExists) { if ($userCount === 0) { echo "
Création du premier compte administrateur...
"; $adminUsername = 'admin'; - $adminPasswordPlain = 'adminpass'; // Mot de passe par défaut très faible, À CHANGER IMMÉDIATEMENT EN PRODUCTION ! + // Utiliser le mot de passe fourni via le formulaire et stocké en session + $adminPasswordPlain = $_SESSION['init_admin_password']; $adminPasswordHashed = password_hash($adminPasswordPlain, PASSWORD_DEFAULT); $stmt = $dbInstance->prepare("INSERT INTO users (username, password, role) VALUES (?, ?, ?)"); $stmt->execute([$adminUsername, $adminPasswordHashed, 'admin']); - $logService->log('info', "Compte administrateur '$adminUsername' créé.", $stmt->lastInsertId(), $_SERVER['REMOTE_ADDR']); - echo "Compte administrateur 'admin' créé avec succès. Mot de passe initial: {$adminPasswordPlain} (veuillez le changer après la première connexion !)
"; + $userId = $dbInstance->lastInsertId(); // Récupérer l'ID de l'utilisateur créé + $logService->log('info', "Compte administrateur '$adminUsername' créé.", $userId, $_SERVER['REMOTE_ADDR']); + echo "Compte administrateur 'admin' créé avec succès. Le mot de passe a été défini comme vous l'avez fourni. Veuillez le conserver précieusement.
"; } + // Nettoyer les variables de session d'initialisation après une initialisation réussie + unset($_SESSION['init_admin_password']); + unset($_SESSION['init_root_domain']); + echo "Initialisation terminée. Redirection vers la page de connexion dans 5 secondes...
"; echo "