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 @@ + + + + + + Esenjin | Explorateur de fichiers + + + + + +
+
+

Connexion

+ + + + +
+
+ +
+
+
+
+
+
+
+
+ +
+ + + +
+

De bric et de broc ...

+ + + +
+ +
+
+ + + + + + diff --git a/privé/list-files.php b/privé/list-files.php new file mode 100644 index 0000000..aee63ab --- /dev/null +++ b/privé/list-files.php @@ -0,0 +1,48 @@ +isAuthenticated()) { + http_response_code(401); + echo json_encode(['error' => 'Non authentifié']); + exit; +} + +header('Content-Type: application/json'); + +function scanDirectory($dir = '.') { + $files = []; + $scan = scandir($dir); + + foreach ($scan as $file) { + // Ignore les fichiers cachés, système et les fichiers de configuration + if ($file[0] === '.' || in_array($file, ['index.html', 'list-files.php', 'auth.php', 'config.php'])) { + continue; + } + + $path = $dir . '/' . $file; + + if (is_file($path)) { + $files[] = [ + 'name' => $file, + 'size' => filesize($path), + 'date' => date('Y-m-d', filemtime($path)), + 'path' => 'get-file.php?file=' . rawurlencode($file) + ]; + } + } + + return $files; +} + +try { + $files = scanDirectory('.'); + echo json_encode($files); +} catch (Exception $e) { + http_response_code(500); + echo json_encode(['error' => $e->getMessage()]); +} +?>