diff --git a/fonctions.php b/fonctions.php index 320e7da..2ea7bc6 100644 --- a/fonctions.php +++ b/fonctions.php @@ -319,7 +319,12 @@ function validateShareKey($key) { $result = $stmt->execute(); if ($row = $result->fetchArray(SQLITE3_ASSOC)) { - return $row; + // S'assurer que le chemin est valide et sécurisé + $path = realpath($row['path']); + if ($path && isSecurePrivatePath($path)) { + $row['path'] = $path; + return $row; + } } return false; diff --git a/galeries-privees.php b/galeries-privees.php new file mode 100644 index 0000000..5a77f4b --- /dev/null +++ b/galeries-privees.php @@ -0,0 +1,172 @@ +isDot()) continue; + if ($file->isFile()) { + $extension = strtolower($file->getExtension()); + if (in_array($extension, ALLOWED_EXTENSIONS)) { + // Obtenir le chemin relatif depuis la racine du projet + $relativePath = str_replace('\\', '/', substr($file->getPathname(), strlen(realpath('./')))); + $url = $baseUrl . '/' . ltrim($relativePath, '/'); + // Vérifier que le fichier existe et est accessible + if (file_exists($file->getPathname())) { + $images[] = $url; + } + } + } + } + } + + // Tri des images pour mettre les "top" en premier + usort($images, function($a, $b) { + $isTopA = strpos(basename($a), '--top--') !== false; + $isTopB = strpos(basename($b), '--top--') !== false; + + if ($isTopA && !$isTopB) return -1; + if (!$isTopA && $isTopB) return 1; + + $pathA = realpath('.') . str_replace(getBaseUrl(), '', $a); + $pathB = realpath('.') . str_replace(getBaseUrl(), '', $b); + return filectime($pathB) - filectime($pathA); + }); + + $headerImage = !empty($images) ? $images[0] : null; + } +} +?> + + + + + + <?php echo isset($albumData) ? htmlspecialchars($albumData['title']) : htmlspecialchars($errorTitle); ?> - ICO + + + + + + +
+
+

+

+ Retour à l'accueil +
+
+ + + + +
+
+
🔞
+

Cet album contient du contenu réservé à un public averti.

+ +
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/styles.css b/styles.css index b623b7c..f6a517a 100644 --- a/styles.css +++ b/styles.css @@ -514,6 +514,64 @@ body { transform: translateY(-2px); } +/* Galeries privées */ +.error-container { + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + padding: 2rem; +} + +.error-content { + background-color: rgba(0, 0, 0, 0.8); + padding: 2rem; + border-radius: 1rem; + text-align: center; + max-width: 500px; + backdrop-filter: blur(10px); +} + +.error-content h1 { + color: #dc3545; + margin-bottom: 1rem; +} + +.error-content p { + margin-bottom: 2rem; + color: #e0e0e0; + line-height: 1.6; +} + +.private-gallery-badge { + position: fixed; + top: 2rem; + right: 2rem; + background-color: rgba(0, 0, 0, 0.8); + color: white; + padding: 0.8rem 1.5rem; + border-radius: 2rem; + display: flex; + align-items: center; + gap: 0.5rem; + backdrop-filter: blur(10px); + z-index: 100; + font-weight: 500; +} + +.private-icon { + font-size: 1.2em; +} + +@media (max-width: 768px) { + .private-gallery-badge { + top: auto; + bottom: 2rem; + right: 50%; + transform: translateX(50%); + } +} + /* Media Queries */ @media (min-width: 1400px) { .albums-grid {