Add files via upload

This commit is contained in:
tips-of-mine
2025-06-14 19:03:54 +02:00
committed by GitHub
parent 2df60f551b
commit b17c666c5a
51 changed files with 4363 additions and 0 deletions

162
app/public/index.php.bak Normal file
View File

@ -0,0 +1,162 @@
<?php
// Démarrer la session PHP
session_start();
// Inclusion des fichiers fondamentaux
require_once __DIR__ . '/../src/Core/Autoloader.php';
require_once __DIR__ . '/../src/Core/Router.php';
require_once __DIR__ . '/../src/Core/Database.php';
require_once __DIR__ . '/../src/config/app.php'; // Charge les constantes d'application
// Enregistrement de l'autoloader pour charger les classes automatiquement
\App\Core\Autoloader::register();
// Importation des classes à utiliser
use App\Core\Database;
use App\Core\Router;
use App\Services\AuthService;
use App\Services\LanguageService;
use App\Services\LogService;
use App\Utils\DarkMode;
// Initialisation de la connexion à la base de données
try {
Database::connect(DB_HOST, DB_NAME, DB_USER, DB_PASSWORD);
} catch (PDOException $e) {
// En cas d'erreur de connexion, logguer et afficher un message générique
error_log("Database connection error: " . $e->getMessage());
die("Une erreur est survenue lors de la connexion à la base de données. Veuillez réessayer plus tard.");
}
// Initialisation des services principaux
$dbInstance = Database::getInstance(); // Récupère l'instance PDO
$authService = new AuthService($dbInstance);
$logService = new LogService(APP_LOG_PATH);
$langService = new LanguageService(APP_ROOT_DIR . '/src/Lang/');
// ----------------------------------------------------
// Gestion de la Langue et du Mode Sombre via URL ou Session
// ----------------------------------------------------
// Traitement du changement de langue
if (isset($_GET['lang'])) {
$langService->setLanguage($_GET['lang']);
// Redirige pour nettoyer le paramètre GET de l'URL
header('Location: ' . strtok($_SERVER['REQUEST_URI'], '?'));
exit();
}
$currentLang = $langService->getLanguage();
$translations = $langService->getTranslations(); // Charge les traductions pour la langue actuelle
// Traitement du mode sombre
DarkMode::init(); // Initialise le mode sombre si ce n'est pas déjà fait
if (isset($_GET['dark_mode'])) {
DarkMode::toggle($_GET['dark_mode']);
// Redirige pour nettoyer le paramètre GET de l'URL
header('Location: ' . strtok($_SERVER['REQUEST_URI'], '?'));
exit();
}
// ----------------------------------------------------
// Log de chaque requête entrante (pour le débogage/audit)
// ----------------------------------------------------
$logService->log('info', 'Requête reçue: ' . $_SERVER['REQUEST_METHOD'] . ' ' . $_SERVER['REQUEST_URI'], $authService->getUserId(), $_SERVER['REMOTE_ADDR']);
// ----------------------------------------------------
// Processus d'initialisation de l'application au premier lancement
// Crée le Root CA et le premier compte administrateur si non existants.
// ----------------------------------------------------
$stmt = $dbInstance->query("SELECT COUNT(*) FROM users");
$userCount = $stmt->fetchColumn();
// Vérifier l'existence du certificat root
$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 "<!DOCTYPE html><html lang=\"fr\"><head><meta charset=\"UTF-8\"><title>Initialisation</title><link rel=\"stylesheet\" href=\"/css/style.css\"></head><body>";
echo "<div class=\"container\"><h1>Initialisation de l'Application</h1>";
echo "<p>Ceci est le premier lancement. Nous allons configurer la base de données, créer le certificat Root CA et le premier compte administrateur.</p>";
// Création du certificat Root CA si non existant
if (!$rootCertExists) {
echo "<p>Création du certificat Root CA en cours...</p>";
$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
$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 "<p>Certificat Root CA créé avec succès.</p>";
// 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]);
} else {
echo "<p style=\"color: red;\">Erreur lors de la création du certificat Root CA. Veuillez vérifier les logs PHP et Docker.</p>";
echo "<pre>" . htmlspecialchars($output) . "</pre>";
// Arrête l'exécution pour que l'utilisateur puisse voir l'erreur
exit();
}
}
// Création du premier compte administrateur si non existant
if ($userCount === 0) {
echo "<p>Création du premier compte administrateur...</p>";
$adminUsername = 'admin';
$adminPasswordPlain = 'adminpass'; // Mot de passe par défaut très faible, À CHANGER IMMÉDIATEMENT EN PRODUCTION !
$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 "<p>Compte administrateur 'admin' créé avec succès. Mot de passe initial: <b>{$adminPasswordPlain}</b> (veuillez le changer après la première connexion !)</p>";
}
echo "<p>Initialisation terminée. Redirection vers la page de connexion dans 5 secondes...</p>";
echo "</div></body></html>";
// Redirection automatique après l'initialisation
header('Refresh: 5; URL=/login');
exit();
}
// ----------------------------------------------------
// Fin du processus d'initialisation
// ----------------------------------------------------
// ----------------------------------------------------
// Configuration du routeur de l'application
// ----------------------------------------------------
$router = new Router();
// Routes publiques (accessibles sans authentification)
$router->addRoute('GET', '/', 'HomeController@index');
$router->addRoute('GET', '/login', 'AuthController@showLoginForm');
$router->addRoute('POST', '/login', 'AuthController@login');
// Routes protégées (nécessitent une authentification)
// Le dernier paramètre 'true' indique que la route nécessite une authentification
$router->addRoute('GET', '/dashboard', 'DashboardController@index', true);
$router->addRoute('GET', '/certificates', 'CertificateController@index', true);
$router->addRoute('GET', '/certificates/create', 'CertificateController@showCreateForm', true);
$router->addRoute('POST', '/certificates/create', 'CertificateController@create', true);
$router->addRoute('POST', '/certificates/revoke', 'CertificateController@revoke', true);
$router->addRoute('GET', '/perimeters', 'PerimeterController@index', true);
$router->addRoute('GET', '/perimeters/create', 'PerimeterController@showCreateForm', true);
$router->addRoute('POST', '/perimeters/create', 'PerimeterController@create', true);
$router->addRoute('GET', '/users', 'UserController@index', true);
$router->addRoute('GET', '/users/create', 'UserController@showCreateForm', true);
$router->addRoute('POST', '/users/create', 'UserController@create', true);
$router->addRoute('POST', '/users/delete', 'UserController@delete', true);
$router->addRoute('GET', '/logout', 'AuthController@logout', true); # CORRIGÉ: de AuthController@@logout à AuthController@logout
// Exécuter le routage
$router->dispatch();