Beaucoup de choses. Voir le reste du message pour le détail.
- Ajout d'une classe Erreur, pour des plantages en beauté \o/ ; - Ajout d'une classe Config (dans cms/configuration.php), qui gère la configuration. Plus propre que des constantes ou des variables globales ; - Utilisation de error_reporting(E_ALL) pour détecter les variables non initialisées (entre autres) ; - Obligation d'indiquer une adresse de courriel (valide de préférence ;-) ) pour contacter l'administrateur ; - Bug : enregister_module() => Modules::enregister_module() ; - Bug : is_set() => isset() ; - Ajout de la classe Modules (déjà utilisée, mais pas définie) ; - Utilisation du paramètre forcer_permissions pour éviter une récursion sans fin -_-' ; - Déclenchement d'une erreur si on ne peut pas lire les règles de sécurité. Il y a encore plein d'autres vérifications d'erreurs à ajouter ; - Un peu de détection d'erreur dans SystèmeFichiers ; - Suppression du require sur css.php (doit être include() uniquement quand on veut l'afficher) ; - Suppression de pas mal de bogues.
This commit is contained in:
parent
aa2817b397
commit
e0e55ce46a
|
@ -53,11 +53,11 @@ class Chemin {
|
|||
}
|
||||
|
||||
public function get_fs_stockage() {
|
||||
return Path::combine($config_chemin_base_stockage, $this->get());
|
||||
return Path::combine(Config::get('chemin_base_stockage'), $this->get());
|
||||
}
|
||||
|
||||
public function get_fs_public() {
|
||||
return Path::combine($config_chemin_base_public, $this->get());
|
||||
return Path::combine(Config::get('chemin_base_public'), $this->get());
|
||||
}
|
||||
|
||||
public function enfant($nom) {
|
||||
|
|
|
@ -1,6 +1,13 @@
|
|||
<?php
|
||||
|
||||
error_reporting(E_ALL); // || E_STRICT
|
||||
|
||||
require_once(dirname(__FILE__) . "/config.php");
|
||||
if (Config::get('courriel_admin') === null) {
|
||||
echo "Vous devez indiquer le courriel de l'administrateur dans le fichier config.php.";
|
||||
exit;
|
||||
}
|
||||
|
||||
require_once(dirname(__FILE__) . "/include.php");
|
||||
|
||||
class CMS {
|
||||
|
@ -8,7 +15,7 @@ class CMS {
|
|||
// TODO : appeller Modules::action($chemin, $action, $paramètres);
|
||||
|
||||
$chemin = new Chemin($chemin_str);
|
||||
$noms_params = Modules::liste_paramètres();
|
||||
$noms_params = Modules::liste_paramètres($chemin);
|
||||
$noms_params[] = "action";
|
||||
// récupérer $noms_params dans $_GET, $_POST et $_FILE
|
||||
$action = $paramètres["action"];
|
||||
|
|
21
__cms__/cms/configuration.php
Normal file
21
__cms__/cms/configuration.php
Normal file
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
|
||||
/***************************************
|
||||
* La configuration n'est pas ici, *
|
||||
* elle est dans le fichier config.php *
|
||||
***************************************/
|
||||
|
||||
class Config {
|
||||
static $config = array();
|
||||
|
||||
public static function get($nom) {
|
||||
if (!isset(self::$config[$nom])) return null;
|
||||
return self::$config[$nom];
|
||||
}
|
||||
|
||||
public static function set($nom, $valeur) {
|
||||
self::$config[$nom] = $valeur;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
|
@ -1,26 +1,29 @@
|
|||
<?php
|
||||
|
||||
// Fonction Path::normalize();
|
||||
require_once(dirname(__FILE__) . "/chemin/path.php");
|
||||
require_once(dirname(__FILE__) . "/cms/configuration.php");
|
||||
|
||||
// ========== CONFIGURATION =========
|
||||
|
||||
// Addresse de courriel de l'administrateur.
|
||||
Config::set('courriel_admin', "jahvascriptmaniac+github@free.fr");
|
||||
|
||||
// URL de la racine du site. Ex: http://www.monsite.com/cms/
|
||||
// Doit se terminer par '/'.
|
||||
$config_url_base = "http://127.0.0.1/2010-moteur-site-simple/";
|
||||
Config::set('url_base', "http://127.0.0.1/2010-moteur-site-simple/");
|
||||
|
||||
// Chemin absolu vers le dossier '__cms__'.
|
||||
// dirname(__FILE__) peut retourner un chemin relatif (PHP < 4.0.2),
|
||||
// donc utiliser realpath si on s'en sert.
|
||||
$config_chemin_base = realpath(dirname(__FILE__));
|
||||
Config::set('chemin_base', realpath(dirname(__FILE__)));
|
||||
|
||||
// Chemin vers le stockage interne des données.
|
||||
// En général, c'est le chemin ..../__cms__/modele
|
||||
$config_chemin_base_stockage = Path::combine($config_chemin_base, "modele");
|
||||
Config::set('chemin_base_stockage', Path::combine(Config::get("chemin_base"), "modele"));
|
||||
|
||||
// Chemin vers la partie visible du site.
|
||||
// En général, c'est le chemin vers le dossier contenant __cms__
|
||||
$config_chemin_base_public = Path::combine($config_chemin_base, "/..");
|
||||
Config::set('chemin_base_public', Path::combine(Config::get("chemin_base"), "/.."));
|
||||
|
||||
// ======== FIN CONFIGURATION =======
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ class AdminConnexion {
|
|||
déconnexion();
|
||||
return self::vue("déconnexion");
|
||||
} else {
|
||||
if (is_set($paramètres["vue"])) {
|
||||
if (isset($paramètres["vue"])) {
|
||||
self::vue($chemin, $paramètres["vue"]);
|
||||
} else {
|
||||
self::vue($chemin);
|
||||
|
@ -42,6 +42,6 @@ class AdminConnexion {
|
|||
}
|
||||
}
|
||||
|
||||
enregister_module("AdminConnexion", "admin-connexion");
|
||||
Modules::enregister_module("AdminConnexion", "admin-connexion");
|
||||
|
||||
?>
|
|
@ -5,18 +5,18 @@ class AdminCouleurs {
|
|||
if ($action == "anuler") {
|
||||
return redirect($chemin);
|
||||
} else {
|
||||
if (is_set($paramètres["Couleur_A"])) {
|
||||
if (isset($paramètres["Couleur_A"])) {
|
||||
// Stocker couleur A
|
||||
}
|
||||
if (is_set($paramètres["Couleur_B"])) {
|
||||
if (isset($paramètres["Couleur_B"])) {
|
||||
// Stocker couleur B
|
||||
}
|
||||
if (is_set($paramètres["Couleur_C"])) {
|
||||
if (isset($paramètres["Couleur_C"])) {
|
||||
// Stocker couleur C
|
||||
}
|
||||
// ...
|
||||
|
||||
if (is_set($paramètres["vue"])) {
|
||||
if (isset($paramètres["vue"])) {
|
||||
self::vue($chemin, $paramètres["vue"]);
|
||||
} else {
|
||||
self::vue($chemin);
|
||||
|
@ -45,6 +45,6 @@ class AdminCouleurs {
|
|||
}
|
||||
}
|
||||
|
||||
enregister_module("AdminCouleurs", "admin-couleurs");
|
||||
Modules::enregister_module("AdminCouleurs", "admin-couleurs");
|
||||
|
||||
?>
|
|
@ -6,11 +6,11 @@ class AdminPermissions {
|
|||
if ($action == "anuler") {
|
||||
return redirect($chemin);
|
||||
} else {
|
||||
if (is_set($paramètres["regles"])) {
|
||||
if (isset($paramètres["regles"])) {
|
||||
Stockage::set_prop($singleton, "regles", $paramètres["regles"]);
|
||||
}
|
||||
|
||||
if (is_set($paramètres["vue"])) {
|
||||
if (isset($paramètres["vue"])) {
|
||||
self::vue($chemin, $paramètres["vue"]);
|
||||
} else {
|
||||
self::vue($chemin);
|
||||
|
@ -34,6 +34,6 @@ class AdminPermissions {
|
|||
}
|
||||
}
|
||||
|
||||
enregister_module("AdminPermissions", "admin-permissions");
|
||||
Modules::enregister_module("AdminPermissions", "admin-permissions");
|
||||
|
||||
?>
|
|
@ -18,36 +18,36 @@ class AdminUtilisateurs {
|
|||
|
||||
// Solution B :
|
||||
} else {
|
||||
if (is_set($paramètres["nouveau_nom"]) && ($action == "nouvelle_page")) {
|
||||
if (isset($paramètres["nouveau_nom"]) && ($action == "nouvelle_page")) {
|
||||
// TODO : SECURITE : Si l'utilisateur existe déjà, laisser tomber et ne pas faire les set_* qui suivent !
|
||||
Authentification::nouvel_utilisateur($paramètres["nouveau_nom"]);
|
||||
$paramètres["nom"] = $paramètres["nouveau_nom"];
|
||||
// TODO : message de confirmation quelque part ?
|
||||
}
|
||||
|
||||
if (is_set($paramètres["nom"]) && is_set($paramètres["nouveau_nom"]) && ($action != "nouvelle_page")) {
|
||||
if (isset($paramètres["nom"]) && isset($paramètres["nouveau_nom"]) && ($action != "nouvelle_page")) {
|
||||
Authentification::renomer_utilisateur($paramètres["nom"], $paramètres["nouveau_nom"]);
|
||||
$paramètres["nom"] = $paramètres["nouveau_nom"];
|
||||
}
|
||||
|
||||
if (is_set($paramètres["nom"]) && is_set($paramètres["mot_de_passe"])) {
|
||||
if (isset($paramètres["nom"]) && isset($paramètres["mot_de_passe"])) {
|
||||
Authentification::set_mot_de_passe($paramètres["nom"], $paramètres["mot_de_passe"]);
|
||||
}
|
||||
|
||||
if (is_set($paramètres["nom"]) && is_set($paramètres["groupe"])) {
|
||||
if (isset($paramètres["nom"]) && isset($paramètres["groupe"])) {
|
||||
Authentification::set_groupe($paramètres["nom"], $paramètres["groupe"]);
|
||||
}
|
||||
|
||||
if (is_set($paramètres["nom"]) && is_set($paramètres["peut_se_connecter"])) {
|
||||
if (isset($paramètres["nom"]) && isset($paramètres["peut_se_connecter"])) {
|
||||
Authentification::set_peut_se_connecter($paramètres["nom"], ($paramètres["peut_se_connecter"] == "true"));
|
||||
}
|
||||
|
||||
if (is_set($paramètres["nom"]) && ($action == "supprimer")) {
|
||||
if (isset($paramètres["nom"]) && ($action == "supprimer")) {
|
||||
Authentification::supprimer_utilisateur($paramètres["nom"]);
|
||||
// TODO : message de confirmation quelque part ?
|
||||
}
|
||||
|
||||
if (is_set($paramètres["vue"])) {
|
||||
if (isset($paramètres["vue"])) {
|
||||
self::vue($chemin, $paramètres["vue"]);
|
||||
} else {
|
||||
self::vue($chemin);
|
||||
|
@ -87,6 +87,6 @@ class AdminUtilisateurs {
|
|||
}
|
||||
}
|
||||
|
||||
enregister_module("AdminUtilisateurs", "admin-utilisateurs");
|
||||
Modules::enregister_module("AdminUtilisateurs", "admin-utilisateurs");
|
||||
|
||||
?>
|
|
@ -11,7 +11,7 @@ class ForumIndex {
|
|||
Stockage::set_prop($np, "proprietaire", get_utilisateur());
|
||||
return redirect($np);
|
||||
} else {
|
||||
if (is_set($paramètres["vue"])) {
|
||||
if (isset($paramètres["vue"])) {
|
||||
self::vue($chemin, $paramètres["vue"]);
|
||||
} else {
|
||||
self::vue($chemin);
|
||||
|
@ -36,6 +36,6 @@ class ForumIndex {
|
|||
}
|
||||
}
|
||||
|
||||
enregister_module("ForumIndex", "forum-index");
|
||||
Modules::enregister_module("ForumIndex", "forum-index");
|
||||
|
||||
?>
|
|
@ -7,12 +7,12 @@ function action($chemin, $action, $paramètres) {
|
|||
Stockage::supprimer($chemin);
|
||||
return redirect($chemin->parent());
|
||||
} else {
|
||||
if (is_set($paramètres["message"])) {
|
||||
if (isset($paramètres["message"])) {
|
||||
Stockage::set_prop($chemin, "message", $paramètres["message"]);
|
||||
}
|
||||
|
||||
// TODO ... Quelles sont les interactions entre l'utilisateur et le message, dans quel ordre, ...
|
||||
if (is_set($paramètres["vue"])) {
|
||||
if (isset($paramètres["vue"])) {
|
||||
Modules::vue($chemin->parent(), $paramètres["vue"]);
|
||||
} else {
|
||||
Modules::vue($chemin->parent());
|
||||
|
@ -36,6 +36,6 @@ function vue($chemin, $vue = "normal") {
|
|||
}
|
||||
}
|
||||
|
||||
enregister_module("ForumMessage", "forum-message");
|
||||
Modules::enregister_module("ForumMessage", "forum-message");
|
||||
|
||||
?>
|
|
@ -16,13 +16,13 @@ class ForumSujet {
|
|||
Stockage::supprimer($chemin);
|
||||
return redirect($chemin->parent());
|
||||
} else {
|
||||
if (is_set($paramètres["titre"])) {
|
||||
if (isset($paramètres["titre"])) {
|
||||
Stockage::renomer($chemin, $paramètres["titre"]);
|
||||
$chemin = $chemin->renomer($paramètres["titre"]);
|
||||
// TODO : peut-être redirect($chemin) ?
|
||||
}
|
||||
|
||||
if (is_set($paramètres["vue"])) {
|
||||
if (isset($paramètres["vue"])) {
|
||||
self::vue($chemin, $paramètres["vue"]);
|
||||
} else {
|
||||
self::vue($chemin);
|
||||
|
@ -65,6 +65,6 @@ class ForumSujet {
|
|||
}
|
||||
}
|
||||
|
||||
enregister_module("ForumSujet", "forum-sujet");
|
||||
Modules::enregister_module("ForumSujet", "forum-sujet");
|
||||
|
||||
?>
|
|
@ -12,16 +12,16 @@ class GalerieÉvènement {
|
|||
Stockage::supprimer($chemin);
|
||||
return redirect($chemin->parent());
|
||||
} else {
|
||||
if (is_set($paramètres["titre"])) {
|
||||
if (isset($paramètres["titre"])) {
|
||||
Stockage::renomer($chemin, $paramètres["titre"]);
|
||||
$chemin = $chemin->renomer($paramètres["titre"]);
|
||||
// TODO : peut-être redirect($chemin) ?
|
||||
}
|
||||
if (is_set($paramètres["description"])) {
|
||||
if (isset($paramètres["description"])) {
|
||||
Stockage::set_prop($chemin, "description", $paramètres["description"]);
|
||||
}
|
||||
|
||||
if (is_set($paramètres["vue"])) {
|
||||
if (isset($paramètres["vue"])) {
|
||||
self::vue($chemin, $paramètres["vue"]);
|
||||
} else {
|
||||
self::vue($chemin);
|
||||
|
@ -59,12 +59,12 @@ class GalerieÉvènement {
|
|||
return $ret;
|
||||
} else if ($vue == "miniature") {
|
||||
$enfants = Stockage::liste_enfants($chemin);
|
||||
if (is_set($enfants[0])) return Modules::vue($enfants[0], 'miniature');
|
||||
if (isset($enfants[0])) return Modules::vue($enfants[0], 'miniature');
|
||||
else return "Aucune<br/>photo";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enregister_module("GalerieÉvènement", "galerie-evenement");
|
||||
Modules::enregister_module("GalerieÉvènement", "galerie-evenement");
|
||||
|
||||
?>
|
|
@ -12,16 +12,16 @@ class GalerieIndex {
|
|||
Stockage::supprimer($chemin);
|
||||
return redirect($chemin->parent());
|
||||
} else {
|
||||
if (is_set($paramètres["titre"])) {
|
||||
if (isset($paramètres["titre"])) {
|
||||
Stockage::renomer($chemin, $paramètres["titre"]);
|
||||
$chemin = $chemin->renomer($paramètres["titre"]);
|
||||
// TODO : peut-être redirect($chemin) ?
|
||||
}
|
||||
if (is_set($paramètres["description"])) {
|
||||
if (isset($paramètres["description"])) {
|
||||
Stockage::set_prop($chemin, "description", $paramètres["description"]);
|
||||
}
|
||||
|
||||
if (is_set($paramètres["vue"])) {
|
||||
if (isset($paramètres["vue"])) {
|
||||
self::vue($chemin, $paramètres["vue"]);
|
||||
} else {
|
||||
self::vue($chemin);
|
||||
|
@ -59,12 +59,12 @@ class GalerieIndex {
|
|||
return $ret;
|
||||
} else if ($vue == "miniature") {
|
||||
$enfants = Stockage::liste_enfants($chemin);
|
||||
if (is_set($enfants[0])) return Modules::vue($enfants[0], 'miniature');
|
||||
if (isset($enfants[0])) return Modules::vue($enfants[0], 'miniature');
|
||||
else return "Aucune<br/>photo";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enregister_module("GalerieIndex", "galerie-index");
|
||||
Modules::enregister_module("GalerieIndex", "galerie-index");
|
||||
|
||||
?>
|
|
@ -12,16 +12,16 @@ class GaleriePériode {
|
|||
Stockage::supprimer($chemin);
|
||||
return redirect($chemin->parent());
|
||||
} else {
|
||||
if (is_set($paramètres["titre"])) {
|
||||
if (isset($paramètres["titre"])) {
|
||||
Stockage::renomer($chemin, $paramètres["titre"]);
|
||||
$chemin = $chemin->renomer($paramètres["titre"]);
|
||||
// TODO : peut-être redirect($chemin) ?
|
||||
}
|
||||
if (is_set($paramètres["description"])) {
|
||||
if (isset($paramètres["description"])) {
|
||||
Stockage::set_prop($chemin, "description", $paramètres["description"]);
|
||||
}
|
||||
|
||||
if (is_set($paramètres["vue"])) {
|
||||
if (isset($paramètres["vue"])) {
|
||||
self::vue($chemin, $paramètres["vue"]);
|
||||
} else {
|
||||
self::vue($chemin);
|
||||
|
@ -59,12 +59,12 @@ class GaleriePériode {
|
|||
return $ret;
|
||||
} else if ($vue == "miniature") {
|
||||
$enfants = Stockage::liste_enfants($chemin);
|
||||
if (is_set($enfants[0])) return Modules::vue($enfants[0], 'miniature');
|
||||
if (isset($enfants[0])) return Modules::vue($enfants[0], 'miniature');
|
||||
else return "Aucune<br/>photo";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enregister_module("GaleriePériode", "galerie-periode");
|
||||
Modules::enregister_module("GaleriePériode", "galerie-periode");
|
||||
|
||||
?>
|
|
@ -8,23 +8,23 @@ class GaleriePhoto {
|
|||
Stockage::supprimer($chemin);
|
||||
return redirect($chemin->parent());
|
||||
} else {
|
||||
if (is_set($paramètres["fichier_image"])) {
|
||||
if (isset($paramètres["fichier_image"])) {
|
||||
// redimensionner l'image avec gd, stocker la miniature dans
|
||||
// prop_image_mini (set_prop_fichier()).
|
||||
// Pb : Où est-ce qu'on met temporairement la miniature
|
||||
// avant de la déplacer ???
|
||||
// stocker le fichier reçu dans prop_image (set_prop_fichier_reçu()).
|
||||
}
|
||||
/* if (is_set($paramètres["titre"])) {
|
||||
/* if (isset($paramètres["titre"])) {
|
||||
Stockage::renomer($chemin, $paramètres["titre"]);
|
||||
$chemin = $chemin->renomer($paramètres["titre"]);
|
||||
// TODO : peut-être redirect($chemin) ?
|
||||
}*/
|
||||
if (is_set($paramètres["description"])) {
|
||||
if (isset($paramètres["description"])) {
|
||||
Stockage::set_prop($chemin, "description", $paramètres["description"]);
|
||||
}
|
||||
|
||||
if (is_set($paramètres["vue"])) {
|
||||
if (isset($paramètres["vue"])) {
|
||||
self::vue($chemin, $paramètres["vue"]);
|
||||
} else {
|
||||
self::vue($chemin);
|
||||
|
@ -56,6 +56,6 @@ class GaleriePhoto {
|
|||
}
|
||||
}
|
||||
|
||||
enregister_module("GaleriePhoto", "galerie-photo");
|
||||
Modules::enregister_module("GaleriePhoto", "galerie-photo");
|
||||
|
||||
?>
|
|
@ -1,5 +1,7 @@
|
|||
<?php
|
||||
|
||||
require_once(dirname(__FILE__) . "/modules.php");
|
||||
|
||||
require_once(dirname(__FILE__) . "/admin/include.php");
|
||||
require_once(dirname(__FILE__) . "/forum/include.php");
|
||||
require_once(dirname(__FILE__) . "/galerie/include.php");
|
||||
|
|
22
__cms__/modules/modules.php
Normal file
22
__cms__/modules/modules.php
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
|
||||
class Modules {
|
||||
static $liste_modules = array();
|
||||
|
||||
public static function enregister_module($classe, $type) {
|
||||
self::$liste_modules[$type] = $classe;
|
||||
}
|
||||
|
||||
public static function get_module($chemin) {
|
||||
$type = Stockage::get_prop($chemin, "type");
|
||||
if ($type === false) return false;
|
||||
return self::$liste_modules[$type];
|
||||
}
|
||||
|
||||
public static function liste_paramètres($chemin) {
|
||||
// TODO
|
||||
return self::get_module($chemin);
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
|
@ -6,8 +6,9 @@ class Authentification {
|
|||
}
|
||||
|
||||
public function connexion($nom_utilisateur, $mdp) {
|
||||
$mdp_réel = Stockage::get_prop(self::singleton()->enfant($nom_utilisateur), "mot_de_passe");
|
||||
$peut_se_connecter = Stockage::get_prop(self::singleton()->enfant($nom_utilisateur), "peut_se_connecter");
|
||||
$ch_utilisateur = self::singleton()->enfant($nom_utilisateur);
|
||||
$mdp_réel = self::get_mot_de_passe($nom_utilisateur, true); // true => forcer permissions.
|
||||
$peut_se_connecter = self::get_peut_se_connecter($nom_utilisateur, true); // true => forcer permissions.
|
||||
if ($mdp == $mdp_réel && $peut_se_connecter === "true") { // Triple égale. Pas d'entourloupe avec des casts miteux !
|
||||
// TODO : Vérifier si c'est sécurisé => stocké _uniquement_ sur le serveur.
|
||||
Session::put("utilisateur", $nom_utilisateur);
|
||||
|
@ -57,8 +58,8 @@ class Authentification {
|
|||
Stockage::set_pop(self::singleton()->enfant($nom_utilisateur), "groupe", $groupe);
|
||||
}
|
||||
|
||||
public function get_groupe($nom_utilisateur) {
|
||||
return Stockage::get_prop(self::singleton()->enfant($nom_utilisateur), "groupe");
|
||||
public function get_groupe($nom_utilisateur, $forcer_permissions = false) {
|
||||
return Stockage::get_prop(self::singleton()->enfant($nom_utilisateur), "groupe", $forcer_permissions);
|
||||
}
|
||||
|
||||
public function set_mot_de_passe($nom_utilisateur, $mot_de_passe) {
|
||||
|
@ -69,16 +70,17 @@ class Authentification {
|
|||
self::set_mot_de_passe($utilisateur, substr(md5($utilisateur . rand() . microtime()) , 0, 8));
|
||||
}
|
||||
|
||||
public function get_mot_de_passe($nom_utilisateur) {
|
||||
return Stockage::get_prop(self::singleton()->enfant($nom_utilisateur), "mot_de_passe");
|
||||
public function get_mot_de_passe($nom_utilisateur, $forcer_permissions = false) {
|
||||
return Stockage::get_prop(self::singleton()->enfant($nom_utilisateur), "mot_de_passe", $forcer_permissions);
|
||||
}
|
||||
|
||||
public function set_peut_se_connecter($nom_utilisateur, $valeur) {
|
||||
Stockage::set_pop(self::singleton()->enfant($nom_utilisateur), "peut_se_connecter", $valeur ? "true" : "false");
|
||||
}
|
||||
|
||||
public function get_peut_se_connecter($nom_utilisateur) {
|
||||
return (Stockage::get_pop(self::singleton()->enfant($nom_utilisateur), "peut_se_connecter") == "true") ? true : false;
|
||||
public function get_peut_se_connecter($nom_utilisateur, $forcer_permissions = false) {
|
||||
$peut_se_connecter = Stockage::get_pop(self::singleton()->enfant($nom_utilisateur), "peut_se_connecter", $forcer_permissions);
|
||||
return ($peut_se_connecter == "true") ? true : false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
27
__cms__/securite/erreur.php
Normal file
27
__cms__/securite/erreur.php
Normal file
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
class Erreur {
|
||||
public static function fatale($message) {
|
||||
echo '<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
|
||||
<head>
|
||||
<title>Erreur</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Erreur</h1>
|
||||
<p>Désolé, une erreur est survenue. Contactez le créateur du site SVP :
|
||||
<a href="mailto:' . htmlspecialchars(Config::get('courriel_admin'))
|
||||
. '?subject=Erreur%20dans%20le%20programme%202010-moteur-site-simple&body='
|
||||
. htmlspecialchars(rawurlencode("Code de l'erreur : " . $message)) . '">'
|
||||
. htmlspecialchars(Config::get('courriel_admin'))
|
||||
. '</a>. Indiquez l\'erreur ci-dessous dans votre courriel.</p>
|
||||
<p><strong>' . htmlspecialchars($message) . '</strong></p>
|
||||
</body>
|
||||
</html>';
|
||||
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
|
@ -1,5 +1,6 @@
|
|||
<?php
|
||||
|
||||
require_once(dirname(__FILE__) . "/erreur.php");
|
||||
require_once(dirname(__FILE__) . "/authentification.php");
|
||||
require_once(dirname(__FILE__) . "/nettoyage.php");
|
||||
require_once(dirname(__FILE__) . "/permissions.php");
|
||||
|
|
|
@ -16,7 +16,7 @@ class Permissions {
|
|||
if ($utilisateur === null) {
|
||||
$utilisateur = Authentification::get_utilisateur();
|
||||
}
|
||||
$groupe = Authentification::get_groupe($utilisateur);
|
||||
$groupe = Authentification::get_groupe($utilisateur, true); // true => forcer permissions.
|
||||
|
||||
// Parcourt la liste les règles de sécurité (get_regles()), et
|
||||
// sélectionne la première pour laquelle $chemin correspond au motif
|
||||
|
@ -50,15 +50,17 @@ class Permissions {
|
|||
$str_regles .= "\n"; // TODO vérifier que la séquence d'échappement est bien comprise.
|
||||
}
|
||||
|
||||
return Stockage::get_prop(self::singleton(), "regles", $str_regles);
|
||||
return Stockage::set_prop(self::singleton(), "regles", $str_regles);
|
||||
}
|
||||
|
||||
public function get_regles() {
|
||||
// Renvoie un tableau de quadruplets
|
||||
// (chemin, action, groupe, autorisation).
|
||||
// ou false si erreur.
|
||||
$str_regles = Stockage::get_prop(self::singleton(), "regles");
|
||||
// TODO erreur si la propriété n'existe pas.
|
||||
|
||||
$str_regles = Stockage::get_prop(self::singleton(), "regles", true); // true => forcer permissions.
|
||||
if (!$str_regles) Erreur::fatale("Impossible de lire les règles de sécurité.");
|
||||
|
||||
$str_regles = preg_replace('/\r\n|\r/', "\n", $str_regles);
|
||||
$regles = array();
|
||||
// TODO : ignorer les lignes vides !
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
<?php
|
||||
|
||||
require_once(dirname(__FILE__) . "/css.php");
|
||||
require_once(dirname(__FILE__) . "/squelette.php");
|
||||
|
||||
?>
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
class Session {
|
||||
public function démarrer() {
|
||||
return session_id !== "" || session_start();
|
||||
return (session_id() !== "") || session_start();
|
||||
}
|
||||
|
||||
public function put($k, $v) {
|
||||
|
@ -12,7 +12,7 @@ class Session {
|
|||
|
||||
public function get($k) {
|
||||
self::démarrer();
|
||||
return is_set($_SESSION[$k]) ? $_SESSION[$k] : false;
|
||||
return isset($_SESSION[$k]) ? $_SESSION[$k] : false;
|
||||
}
|
||||
|
||||
public function effacer($k) {
|
||||
|
@ -21,4 +21,4 @@ class Session {
|
|||
}
|
||||
}
|
||||
|
||||
?>
|
||||
?>
|
||||
|
|
|
@ -63,10 +63,10 @@ class Stockage {
|
|||
// $forcer_permissions permet à vérifier_permission() et ses
|
||||
// dépendances get_regles() et get_groupe() de faire des get_prop
|
||||
// même si l'utilisateur courant n'en a pas le droit.
|
||||
if ($forcer_permissions || vérifier_permission($chemin, "get_prop")) {
|
||||
return SystemeFichiers::lire(Path::combine($chemin->get_fs_stockage(), $prop));
|
||||
if ($forcer_permissions || Permissions::vérifier_permission($chemin, "get_prop")) {
|
||||
return SystèmeFichiers::lire(Path::combine($chemin->get_fs_stockage(), $prop));
|
||||
} else {
|
||||
return "[Accès interdit]";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -25,15 +25,15 @@ class SystèmeFichiers {
|
|||
}
|
||||
|
||||
public function lire($chemin_fs) {
|
||||
file_get_contents($chermin_fs);
|
||||
return file_exists($chemin_fs) && file_get_contents($chemin_fs);
|
||||
}
|
||||
|
||||
public function écrire($chemin_fs, $données) {
|
||||
file_put_contents($chemin_fs, $données);
|
||||
return is_dir(dirname($chemin_fs)) && file_put_contents($chemin_fs, $données);
|
||||
}
|
||||
|
||||
public function liste_fichiers($chemin_fs) {
|
||||
return scandir($chemin_fs);
|
||||
return is_dir($chemin_fs) && scandir($chemin_fs);
|
||||
}
|
||||
|
||||
public function déplacer($chemin_fs_de, $chemin_fs_vers) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user