diff --git a/app/public/index.php.bak b/app/public/index.php.bak deleted file mode 100644 index e89fe8f..0000000 --- a/app/public/index.php.bak +++ /dev/null @@ -1,162 +0,0 @@ -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 "Initialisation"; - echo "

Initialisation de l'Application

"; - 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.

"; - - // 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 - $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.

"; - // 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 "

Erreur lors de la création du certificat Root CA. Veuillez vérifier les logs PHP et Docker.

"; - echo "
" . htmlspecialchars($output) . "
"; - // 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 "

Création du premier compte administrateur...

"; - $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 "

Compte administrateur 'admin' créé avec succès. Mot de passe initial: {$adminPasswordPlain} (veuillez le changer après la première connexion !)

"; - } - - echo "

Initialisation terminée. Redirection vers la page de connexion dans 5 secondes...

"; - echo "
"; - // 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(); diff --git a/app/public/ocsp_responder.php.bak b/app/public/ocsp_responder.php.bak deleted file mode 100644 index 5ad3363..0000000 --- a/app/public/ocsp_responder.php.bak +++ /dev/null @@ -1,47 +0,0 @@ -getMessage()); - http_response_code(500); - die("OCSP service temporarily unavailable."); -} - -$dbInstance = Database::getInstance(); -$authService = new AuthService($dbInstance); // Peut être utilisé pour logguer des requêtes OCSP anonymes -$logService = new LogService(APP_LOG_PATH); - - -// La logique OCSP réelle serait plus complexe. -// Ce script attendrait une requête POST OCSP (application/ocsp-request) -// et appellerait le contrôleur OCSP pour la traiter. - -// Pour un POC, nous allons simplement appeler la méthode du contrôleur dédiée. -// En production, Nginx redirigerait une requête HTTP POST spécifique vers ce script. -// Le client OCSP enverrait une requête binaire. -// Pour l'instant, ce script est juste un point d'entrée. - -$controller = new OcspController(); -$controller->handleRequest(); - -// Log la requête OCSP -$logService->log('info', 'Requête OCSP reçue.', null, $_SERVER['REMOTE_ADDR']); diff --git a/app/src/Services/LanguageService.php.bak b/app/src/Services/LanguageService.php.bak deleted file mode 100644 index 337b4ec..0000000 --- a/app/src/Services/LanguageService.php.bak +++ /dev/null @@ -1,117 +0,0 @@ -langDir = rtrim($langDir, '/') . '/'; // Assure qu'il y a un slash final - // Récupère la langue de la session ou utilise 'en' par défaut - $this->currentLang = $_SESSION['lang'] ?? 'en'; - // Vérifie si la langue est supportée, sinon revient à 'en' - if (!in_array($this->currentLang, SUPPORTED_LANGUAGES)) { - $this->currentLang = 'en'; - } - } - - /** - * Définit la langue de l'application. - * - * @param string $lang Le code de la langue (ex: 'fr', 'en'). - * @return bool Vrai si la langue a été définie avec succès, faux sinon. - */ - public function setLanguage($lang) - { - if (in_array($lang, SUPPORTED_LANGUAGES)) { - $_SESSION['lang'] = $lang; - $this->currentLang = $lang; - return true; - } - return false; - } - - /** - * Retourne la langue actuellement sélectionnée. - * - * @return string Le code de la langue. - */ - public function getLanguage() - { - return $this->currentLang; - } - - /** - * Charge et retourne toutes les traductions pour la langue actuelle. - * - * @return array Tableau associatif des traductions. - */ - public function getTranslations() - { - $filePath = $this->langDir . $this->currentLang . '.json'; - if (file_exists($filePath)) { - $content = file_get_contents($filePath); - if ($content === false) { - error_log("LanguageService: Impossible de lire le fichier de traduction: " . $filePath); - return []; - } - $translations = json_decode($content, true); - if (json_last_error() !== JSON_ERROR_NONE) { - error_log("LanguageService: Erreur de décodage JSON pour le fichier: " . $filePath . " - " . json_last_error_msg()); - return []; - } - return $translations; - } - // Fallback à l'anglais si le fichier de la langue actuelle est manquant - $englishFilePath = $this->langDir . 'en.json'; - if (file_exists($englishFilePath)) { - $content = file_get_contents($englishFilePath); - if ($content === false) { - error_log("LanguageService: Impossible de lire le fichier de traduction anglais de secours: " . $englishFilePath); - return []; - } - $translations = json_decode($content, true); - if (json_last_error() !== JSON_ERROR_NONE) { - error_log("LanguageService: Erreur de décodage JSON pour le fichier anglais de secours: " . $englishFilePath . " - " . json_last_error_msg()); - return []; - } - return $translations; - } - error_log("LanguageService: Aucun fichier de traduction trouvé pour la langue '" . $this->currentLang . "' ou 'en'."); - return []; // Retourne un tableau vide si aucune traduction n'est trouvée - } - - /** - * Traduit une clé donnée. - * - * @param string $key La clé de traduction. - * @param array $replacements Tableau associatif de [placeholder => valeur] pour les remplacements. - * @return string La chaîne traduite ou la clé si non trouvée. - */ - public function __($key, $replacements = []) - { - // Utilise la variable globale $translations qui est chargée dans index.php - global $translations; - - $translatedString = $translations[$key] ?? $key; - - // Effectuer les remplacements de placeholders - foreach ($replacements as $placeholder => $value) { - $translatedString = str_replace("{" . $placeholder . "}", $value, $translatedString); - } - - return $translatedString; - } -}