diff --git a/privé/auth.php b/privé/auth.php new file mode 100644 index 0000000..709705d --- /dev/null +++ b/privé/auth.php @@ -0,0 +1,96 @@ +config = require 'config.php'; + } + + public function isAuthenticated() { + if (!isset($_SESSION['auth_time']) || !isset($_SESSION['username'])) { + return false; + } + + // Vérifier si la session n'a pas expiré + $elapsed = time() - $_SESSION['auth_time']; + if ($elapsed > $this->config['session_duration']) { + $this->logout(); + return false; + } + + return true; + } + + public function login($username, $password) { + if (!isset($this->config['users'][$username])) { + return false; + } + + if ($this->config['users'][$username]['password'] === $password) { + $_SESSION['auth_time'] = time(); + $_SESSION['username'] = $username; + $_SESSION['user_description'] = $this->config['users'][$username]['description']; + return true; + } + return false; + } + + public function logout() { + session_destroy(); + } + + public function getCurrentUser() { + if ($this->isAuthenticated()) { + return [ + 'username' => $_SESSION['username'], + 'description' => $_SESSION['user_description'] + ]; + } + return null; + } +} + +// Point d'entrée API pour l'authentification +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + header('Content-Type: application/json'); + + $auth = new Auth(); + $data = json_decode(file_get_contents('php://input'), true); + + if (isset($data['action'])) { + switch ($data['action']) { + case 'login': + if (isset($data['username']) && isset($data['password'])) { + $success = $auth->login($data['username'], $data['password']); + if ($success) { + $user = $auth->getCurrentUser(); + echo json_encode(['success' => true, 'user' => $user]); + } else { + echo json_encode(['success' => false, 'error' => 'Identifiants incorrects']); + } + } else { + echo json_encode(['success' => false, 'error' => 'Identifiants manquants']); + } + break; + + case 'logout': + $auth->logout(); + echo json_encode(['success' => true]); + break; + + case 'check': + $isAuthenticated = $auth->isAuthenticated(); + $user = $isAuthenticated ? $auth->getCurrentUser() : null; + echo json_encode([ + 'authenticated' => $isAuthenticated, + 'user' => $user + ]); + break; + } + } + exit; +} +?> diff --git a/privé/config.php b/privé/config.php new file mode 100644 index 0000000..1cdb203 --- /dev/null +++ b/privé/config.php @@ -0,0 +1,21 @@ + [ + 'admin' => [ + 'password' => 'votre_mot_de_passe_admin', // À changer ! + 'description' => 'Administrateur' + ], + 'user1' => [ + 'password' => 'votre_mot_de_passe_user1', // À changer ! + 'description' => 'Utilisateur 1' + ], + 'invite' => [ + 'password' => 'votre_mot_de_passe_invite', // À changer ! + 'description' => 'Invité' + ] + ], + 'session_duration' => 3600, // Durée de la session en secondes (1 heure) + // Vous pouvez ajouter autant d'utilisateurs que nécessaire +]; +?> diff --git a/privé/get-file.php b/privé/get-file.php new file mode 100644 index 0000000..b86e2ca --- /dev/null +++ b/privé/get-file.php @@ -0,0 +1,40 @@ +isAuthenticated()) { + http_response_code(401); + exit; +} + +// Vérifier si un fichier est spécifié +if (!isset($_GET['file'])) { + http_response_code(400); + exit; +} + +$filename = $_GET['file']; +$filepath = './' . $filename; + +// Vérifier que le fichier existe et est dans le dossier courant +if (!file_exists($filepath) || !is_file($filepath) || dirname(realpath($filepath)) !== realpath('.')) { + http_response_code(404); + exit; +} + +// Fichiers système à ne pas servir +$forbidden_files = ['index.html', 'list-files.php', 'auth.php', 'config.php', 'get-file.php']; +if (in_array($filename, $forbidden_files)) { + http_response_code(403); + exit; +} + +// Servir le fichier +$mime_type = mime_content_type($filepath); +header('Content-Type: ' . $mime_type); +header('Content-Disposition: inline; filename="' . basename($filepath) . '"'); +readfile($filepath); +?> diff --git a/privé/index.html b/privé/index.html new file mode 100644 index 0000000..af39282 --- /dev/null +++ b/privé/index.html @@ -0,0 +1,778 @@ + + +
+ + +