Page .../galerie/ fonctionne (plus ou moins) + Bugs.

Je sais pas trop ce que je commit... Très fatigué.
This commit is contained in:
Georges Dupéron 2010-08-03 07:36:18 +02:00
parent c8b2df3fc1
commit 4ffa811cf0
7 changed files with 22 additions and 14 deletions

View File

@ -7,9 +7,9 @@ define('CHEMIN_JOKER_SEGMENT', '*');
class Chemin { class Chemin {
// Si $chemin est un tableau, chaque segment doit vérifier les invariants de nettoyer_segment. // Si $chemin est un tableau, chaque segment doit vérifier les invariants de nettoyer_segment.
public function __construct($chemin) { public function __construct($chemin, $est_un_motif = false) {
if (! is_array($chemin)) { if (! is_array($chemin)) {
$this->segments = self::nettoyer_chemin($chemin); $this->segments = self::nettoyer_chemin($chemin, $est_un_motif);
} else { } else {
$this->segments = $chemin; $this->segments = $chemin;
} }
@ -86,7 +86,7 @@ class Chemin {
} }
public static function nettoyer_chemin($chemin) { public static function nettoyer_chemin($chemin, $est_un_motif = false) {
// SÉCURITÉ : $chemin nettoyé // SÉCURITÉ : $chemin nettoyé
// * Ne contient pas '\0' // * Ne contient pas '\0'
// * Ne contient pas '../' // * Ne contient pas '../'
@ -102,24 +102,33 @@ class Chemin {
$chemin = preg_replace("/\\/*$/", '', $chemin); $chemin = preg_replace("/\\/*$/", '', $chemin);
$segments = explode('/', $chemin); $segments = explode('/', $chemin);
$segments = array_map(array("self", "nettoyer_segment"), $segments); if ($est_un_motif) {
$segments = array_map(array("self", "nettoyer_segment_motif"), $segments);
} else {
$segments = array_map(array("self", "nettoyer_segment"), $segments);
}
return $segments; return $segments;
} }
public static function nettoyer_segment($segment) { public static function nettoyer_segment($segment, $est_un_motif = false) {
// SÉCURITÉ : $segment nettoyé : // SÉCURITÉ : $segment nettoyé :
// * /!\ Peut être vide /!\ // * /!\ Peut être vide /!\
// * Ne doit pas contenir '\0' (octet NULL).
// * Ne doit pas contenir '/' non plus, remplacer par '-'. // * Ne doit pas contenir '/' non plus, remplacer par '-'.
// * Ne doit pas contenir '*' non plus, remplacer par '-'. // * Ne doit pas contenir '*' non plus, remplacer par '-'.
// * Ne contient pas "__prop__", remplacer par "___prop___". // * Ne contient pas "__prop__", remplacer par "___prop___".
$segment = preg_replace("/\\0/", '', $segment); // TODO : vérifier si c'est bien ça ! (supprime _toutes_ les occurences ???) $segment = preg_replace("/\\0/", '', $segment); // TODO : vérifier si c'est bien ça ! (supprime _toutes_ les occurences ???)
$segment = preg_replace("/\\//", '', $segment); // TODO : vérifier si c'est bien ça ! (supprime _toutes_ les occurences ???) $segment = preg_replace("/\\//", '-', $segment); // TODO : vérifier si c'est bien ça ! (supprime _toutes_ les occurences ???)
$segment = preg_replace("/\\*/", '', $segment); // TODO : vérifier si c'est bien ça ! (supprime _toutes_ les occurences ???) if (!$est_un_motif) $segment = preg_replace("/\\*/", '-', $segment); // TODO : vérifier ...
$segment = preg_replace("/__prop__/", '___prop___', $segment); // TODO : vérifier si c'est bien ça ! (supprime _toutes_ les occurences ???) $segment = preg_replace("/__prop__/", '___prop___', $segment); // TODO : vérifier si c'est bien ça ! (supprime _toutes_ les occurences ???)
return $segment; return $segment;
} }
public static function nettoyer_segment_motif($segment) {
return self::nettoyer_segment($segment, true);
}
} }
?> ?>

View File

@ -15,7 +15,7 @@ class Modules {
public static function get_module($chemin) { public static function get_module($chemin) {
$type = Stockage::get_prop($chemin, "type"); $type = Stockage::get_prop($chemin, "type");
if ($type === false) return false; if ($type === false || !isset(self::$liste_modules[$type])) return false;
return self::$liste_modules[$type]; return self::$liste_modules[$type];
} }

View File

@ -87,7 +87,7 @@ class Permissions {
return false; return false;
} }
$regles[] = array( $regles[] = array(
"chemin" => new Chemin(self::unescape_element_regle($r[0])), "chemin" => new Chemin(self::unescape_element_regle($r[0]), true),
"action" => self::unescape_element_regle($r[1]), "action" => self::unescape_element_regle($r[1]),
"groupe" => self::unescape_element_regle($r[2]), "groupe" => self::unescape_element_regle($r[2]),
"autorisation" => ($r[3] == "oui"), "autorisation" => ($r[3] == "oui"),

View File

@ -4,6 +4,4 @@
/forum/|nouvelle_page|Utilisateurs|oui|Les utilisateurs peuvent créer de nouveaux sujets de discussion dans le forum. /forum/|nouvelle_page|Utilisateurs|oui|Les utilisateurs peuvent créer de nouveaux sujets de discussion dans le forum.
/forum/*|nouvelle_page|Utilisateurs|oui|Les utilisateurs peuvent créer des messages dans les sujets de discussion. /forum/*|nouvelle_page|Utilisateurs|oui|Les utilisateurs peuvent créer des messages dans les sujets de discussion.
/forum/*/*|set_prop|Propriétaire|oui|L'auteur d'un message peut en définir le contenu (pas les autres, ce n'est pas un wiki). /forum/*/*|set_prop|Propriétaire|oui|L'auteur d'un message peut en définir le contenu (pas les autres, ce n'est pas un wiki).
/galerie/**|get_prop|Utilisateurs|oui|Les utilisateurs peuvent consulter la galerie.
/galerie/**|*|Anonymes|non|Mais le reste du monde ne peut pas voir la galerie (photos privées par ex.)
/**|get_prop|Anonymes|oui|Le reste du monde peut consulter le site. /**|get_prop|Anonymes|oui|Le reste du monde peut consulter le site.

View File

@ -0,0 +1 @@
Galerie

View File

@ -1 +1 @@
Galerie galerie-index

View File

@ -1,7 +1,7 @@
<?php <?php
require_once("../__cms__/cms.php"); require_once("/home/js/github/2010-moteur-site-simple/__cms__/cms.php");
CMS::affiche("/galerie", $_GET); CMS::page("/galerie/");
?> ?>