diff options
author | polo <ordipolo@gmx.fr> | 2021-08-18 10:45:26 +0200 |
---|---|---|
committer | polo <ordipolo@gmx.fr> | 2021-08-18 10:45:26 +0200 |
commit | 452420d0cd05822a9974fe27f0edc4cc4dc300cc (patch) | |
tree | b9f3e14e598080f54bf5ab4ee0657ba3624908aa | |
parent | 84cb077b39d990c240976a6b20024c89c903ba91 (diff) | |
download | melaine-452420d0cd05822a9974fe27f0edc4cc4dc300cc.zip |
password
-rw-r--r-- | controller/admin.php | 52 | ||||
-rw-r--r-- | controller/installation.php | 14 | ||||
-rw-r--r-- | controller/password.php | 178 | ||||
-rw-r--r-- | controller/visitor.php | 51 | ||||
-rw-r--r-- | index.php | 38 | ||||
-rw-r--r-- | model/Classes.php | 19 | ||||
-rw-r--r-- | public/accueil.css | 46 | ||||
-rw-r--r-- | public/main.js | 11 | ||||
-rw-r--r-- | view/password.php (renamed from view/connexion.php) | 30 | ||||
-rw-r--r-- | view/template.php | 4 |
10 files changed, 275 insertions, 168 deletions
diff --git a/controller/admin.php b/controller/admin.php index 29ccd41..0abdb1c 100644 --- a/controller/admin.php +++ b/controller/admin.php | |||
@@ -90,55 +90,3 @@ function discoEdit($numArticle, $suppression) | |||
90 | // fin de l'assemblage | 90 | // fin de l'assemblage |
91 | require('view/template.php'); | 91 | require('view/template.php'); |
92 | } | 92 | } |
93 | |||
94 | function changerMotDePasse($secret) | ||
95 | { | ||
96 | // vérification supplémentaire | ||
97 | if($_SESSION['admin'] !== 1) | ||
98 | { | ||
99 | $_SESSION['admin'] = 0; | ||
100 | header('Location: index.php?page=' . $_GET['from']); | ||
101 | exit(); | ||
102 | } | ||
103 | |||
104 | // Ajouter une sécurité par cpatcha avec un "input" supplémentaire | ||
105 | // Et créer une variable de session pour la réponse au CAPTCHA | ||
106 | |||
107 | $title = "nouveau mot de passe"; | ||
108 | $subHeading = "Veuillez saisir votre actuel mot de passe suivi du nouveau."; | ||
109 | |||
110 | // cette page utilise la même vue que la fonction connexion() dans controller/visiteur.php | ||
111 | require('view/connexion.php'); | ||
112 | |||
113 | echo($header); | ||
114 | |||
115 | // traitements: vérification ancien mot de passe et choix du nouveau | ||
116 | // bon mot de passe | ||
117 | if(isset ($_POST["ancienMotdepasse"]) AND $_POST["ancienMotdepasse"] == $secret) | ||
118 | { | ||
119 | // confirmation | ||
120 | echo($message); | ||
121 | //exit(); | ||
122 | |||
123 | /*header('Location: index.php?page=' . $_GET['from'] . '&message=nouveau_mdp'); | ||
124 | exit();*/ | ||
125 | } | ||
126 | |||
127 | // mauvais mot de passe | ||
128 | elseif(isset ($_POST["ancienMotdepasse"]) AND $_POST["ancienMotdepasse"] != $secret) | ||
129 | { | ||
130 | // défense aux attaques par force brute | ||
131 | // pas parfait, ne marche pas si l'attaquant multiplie les connexions au site | ||
132 | echo($erreurMDP); | ||
133 | sleep(1); | ||
134 | echo($formulaireNouveauMDP); | ||
135 | } | ||
136 | |||
137 | // première arrivée sur la page | ||
138 | else | ||
139 | { | ||
140 | echo($formulaireNouveauMDP); | ||
141 | } | ||
142 | |||
143 | echo($footer); | ||
144 | } | ||
diff --git a/controller/installation.php b/controller/installation.php index e7136a5..42212f5 100644 --- a/controller/installation.php +++ b/controller/installation.php | |||
@@ -49,7 +49,7 @@ function installation() | |||
49 | // - modifier ceux du dossier parent (nom du site) avec son client FTP à la mise en ligne chez l'hébergeur et ensuite remettre tout comme avant | 49 | // - modifier ceux du dossier parent (nom du site) avec son client FTP à la mise en ligne chez l'hébergeur et ensuite remettre tout comme avant |
50 | 50 | ||
51 | // le 0 devant signifie que le nombre est en octal | 51 | // le 0 devant signifie que le nombre est en octal |
52 | // on pourra changer cette valeur à la mise en production du site si le script d'upload des données est bon | 52 | // changer cette valeur à la mise en production du site si le script d'upload des données est bon |
53 | $droitsDossiers = 0777; | 53 | $droitsDossiers = 0777; |
54 | 54 | ||
55 | $listePages = array('melaine', 'discographie', 'concerts', 'presse', 'ateliers', 'liens', 'peinture', 'archives'); | 55 | $listePages = array('melaine', 'discographie', 'concerts', 'presse', 'ateliers', 'liens', 'peinture', 'archives'); |
@@ -82,5 +82,15 @@ function installation() | |||
82 | mkdir('data/discographie/json'); | 82 | mkdir('data/discographie/json'); |
83 | chmod('data/discographie/json', $droitsDossiers); | 83 | chmod('data/discographie/json', $droitsDossiers); |
84 | } | 84 | } |
85 | // donner les droits 666 aux fichiers à l'intérieur | 85 | // fichier password.txt |
86 | if(!file_exists('data/password.txt')) | ||
87 | { | ||
88 | touch('data/password.txt'); | ||
89 | chmod('data/password.txt', 0600); | ||
90 | } | ||
91 | |||
92 | // le modèle donnera les droits 0666 (octal) aux nouveaux fichiers à l'intérieur des dossiers | ||
93 | |||
94 | // création d'un mot de passe si password.txt est vide | ||
95 | createPassword(); | ||
86 | } | 96 | } |
diff --git a/controller/password.php b/controller/password.php index 987670f..4ca9f4f 100644 --- a/controller/password.php +++ b/controller/password.php | |||
@@ -1,16 +1,180 @@ | |||
1 | <?php | 1 | <?php |
2 | // password.php | 2 | // password.php |
3 | 3 | ||
4 | function hashNewPassword() | 4 | |
5 | // affichage | ||
6 | function createPassword() | ||
5 | { | 7 | { |
6 | //$hash = password_hash($password, PASSWORD_DEFAULT); | 8 | // si installation() vient de créer un fichier vide |
9 | $hashedPassword = trim(file_get_contents('data/password.txt')); | ||
10 | if(empty($hashedPassword)) | ||
11 | { | ||
12 | // paranoïa | ||
13 | if(isset($_SESSION['admin'])) | ||
14 | { | ||
15 | unset($_SESSION['admin']); | ||
16 | header("Location: index.php"); | ||
17 | exit(); | ||
18 | } | ||
19 | |||
20 | // au rechargement: un mot de passe a été saisi | ||
21 | // les espaces/tabulations sont considérés commes des erreurs | ||
22 | if(isset($_POST['motdepasse']) && !empty(trim($_POST['motdepasse']))) | ||
23 | { | ||
24 | // enregistrement | ||
25 | hashNewPassword($_POST['motdepasse']); | ||
26 | header('Location: index.php'); | ||
27 | } | ||
28 | // 1ère fois | ||
29 | else | ||
30 | { | ||
31 | $title = "Créer un mot de passe"; | ||
32 | $subHeading = "Veuillez choisir le mot de passe que vous utiliserez pour gérer le site."; | ||
33 | |||
34 | require('view/password.php'); | ||
7 | 35 | ||
8 | // écrire dans un fichier | 36 | echo($header); |
37 | echo($formulaireNouveauMDP); | ||
38 | echo($warning); | ||
39 | } | ||
40 | exit(); | ||
41 | } | ||
9 | } | 42 | } |
10 | 43 | ||
11 | function testPassword() | 44 | function connect() |
12 | { | 45 | { |
13 | // lire dans un fichier | 46 | // déjà en mode admin |
14 | 47 | if($_SESSION['admin'] == 1) | |
15 | //if(password_verify($password, $hash)) | 48 | { |
49 | header('Location: index.php?page=' . $_GET['from']); | ||
50 | exit(); | ||
51 | } | ||
52 | |||
53 | // Ajouter une sécurité par cpatcha avec un "input" supplémentaire | ||
54 | // Et créer une variable de session pour la réponse au CAPTCHA | ||
55 | |||
56 | $title = "Connexion"; | ||
57 | $subHeading = "Veuillez saisir votre mot de passe pour pouvoir apporter des modifications au site."; | ||
58 | |||
59 | // cette page utilise la même vue que la fonction changerMotDePasse() dans controller/admin.php | ||
60 | require('view/password.php'); | ||
61 | |||
62 | echo($header); | ||
63 | |||
64 | // bon mot de passe | ||
65 | if(isset ($_POST["motdepasse"]) AND testPassword($_POST["motdepasse"])) | ||
66 | { | ||
67 | $_SESSION['admin'] = 1; | ||
68 | header('Location: index.php?page=' . $_GET['from']); | ||
69 | exit(); | ||
70 | } | ||
71 | |||
72 | // mauvais mot de passe | ||
73 | elseif(isset ($_POST["motdepasse"]) AND !testPassword($_POST["motdepasse"])) | ||
74 | { | ||
75 | // défense aux attaques par force brute | ||
76 | // pas parfait, ne marche pas si l'attaquant multiplie les connexions au site | ||
77 | echo($erreurMDP); | ||
78 | sleep(1); | ||
79 | echo($formulaireConnexion); | ||
80 | } | ||
81 | |||
82 | // première arrivée sur la page | ||
83 | else | ||
84 | { | ||
85 | echo($formulaireConnexion); | ||
86 | } | ||
87 | |||
88 | echo($footer); | ||
89 | } | ||
90 | |||
91 | function changePassword() | ||
92 | { | ||
93 | // vérification supplémentaire | ||
94 | if($_SESSION['admin'] !== 1) | ||
95 | { | ||
96 | $_SESSION['admin'] = 0; | ||
97 | header('Location: index.php?page=' . $_GET['from']); | ||
98 | exit(); | ||
99 | } | ||
100 | |||
101 | // Ajouter une sécurité par cpatcha avec un "input" supplémentaire | ||
102 | // Et créer une variable de session pour la réponse au CAPTCHA | ||
103 | $title = "Nouveau mot de passe"; | ||
104 | $subHeading = "Veuillez saisir votre actuel mot de passe suivi du nouveau."; | ||
105 | |||
106 | // cette page utilise la même vue que la fonction connexion() dans controller/visiteur.php | ||
107 | require('view/password.php'); | ||
108 | |||
109 | echo($header); | ||
110 | |||
111 | // traitements: vérification ancien mot de passe et choix du nouveau | ||
112 | // bon mot de passe | ||
113 | //if(isset ($_POST["ancienMotdepasse"]) AND $_POST["ancienMotdepasse"] == $secret) | ||
114 | if(isset ($_POST["ancienMotdepasse"]) AND testPassword($_POST["ancienMotdepasse"])) | ||
115 | { | ||
116 | // enregistrement | ||
117 | hashNewPassword($_POST["nouveauMotdepasse"]); | ||
118 | |||
119 | // confirmation | ||
120 | echo($message); | ||
121 | //exit(); | ||
122 | |||
123 | /*header('Location: index.php?page=' . $_GET['from'] . '&message=nouveau_mdp'); | ||
124 | exit();*/ | ||
125 | } | ||
126 | |||
127 | // mauvais mot de passe | ||
128 | elseif(isset ($_POST["ancienMotdepasse"]) AND !testPassword($_POST["ancienMotdepasse"])) | ||
129 | { | ||
130 | // défense aux attaques par force brute | ||
131 | // pas parfait, ne marche pas si l'attaquant multiplie les connexions au site | ||
132 | echo($erreurMDP); | ||
133 | sleep(1); | ||
134 | echo($formulaireModifMDP); | ||
135 | } | ||
136 | |||
137 | // première arrivée sur la page | ||
138 | else | ||
139 | { | ||
140 | echo($formulaireModifMDP); | ||
141 | } | ||
142 | |||
143 | echo($warning); | ||
144 | echo($footer); | ||
145 | } | ||
146 | |||
147 | |||
148 | // hachage | ||
149 | function hashNewPassword($newPassword) | ||
150 | { | ||
151 | // "réparation" des espaces accidentels | ||
152 | $newPassword= trim($newPassword); | ||
153 | // hachage | ||
154 | $newHashedPassword = password_hash($newPassword, PASSWORD_DEFAULT); | ||
155 | |||
156 | // écriture | ||
157 | $file = fopen('data/password.txt', 'w'); | ||
158 | fputs($file, $newHashedPassword); | ||
159 | fclose($file); | ||
160 | chmod('data/password.txt', 0600); | ||
161 | } | ||
162 | |||
163 | function testPassword($password) | ||
164 | { | ||
165 | // lecture | ||
166 | $oldHashedPassword = file_get_contents('data/password.txt'); | ||
167 | |||
168 | // "réparation" des espaces accidentels | ||
169 | $password= trim($password); | ||
170 | $oldHashedPassword = trim($oldHashedPassword); | ||
171 | |||
172 | if(password_verify($password, $oldHashedPassword)) | ||
173 | { | ||
174 | return true; | ||
175 | } | ||
176 | else | ||
177 | { | ||
178 | return false; | ||
179 | } | ||
16 | } \ No newline at end of file | 180 | } \ No newline at end of file |
diff --git a/controller/visitor.php b/controller/visitor.php index 539df1f..4f51dda 100644 --- a/controller/visitor.php +++ b/controller/visitor.php | |||
@@ -37,7 +37,7 @@ function melaineVisitor() | |||
37 | $Articles->setPage($page_actuelle); | 37 | $Articles->setPage($page_actuelle); |
38 | $Articles->getFiles(); | 38 | $Articles->getFiles(); |
39 | $Articles->reverseFilesArray(); | 39 | $Articles->reverseFilesArray(); |
40 | $articles = $Articles->getAll(); | 40 | $articles = $Articles->getAll(); // lourd |
41 | 41 | ||
42 | // vérification pour protéger les visiteurs | 42 | // vérification pour protéger les visiteurs |
43 | // normalement déjà faite dans submit.php, au cas où la base a été trafiquée | 43 | // normalement déjà faite dans submit.php, au cas où la base a été trafiquée |
@@ -79,51 +79,4 @@ function peinture() | |||
79 | {} | 79 | {} |
80 | 80 | ||
81 | function archives() | 81 | function archives() |
82 | {} | 82 | {} \ No newline at end of file |
83 | |||
84 | function connexion($secret) | ||
85 | { | ||
86 | // déjà en mode admin | ||
87 | if($_SESSION['admin'] == 1) | ||
88 | { | ||
89 | header('Location: index.php?page=' . $_GET['from']); | ||
90 | exit(); | ||
91 | } | ||
92 | |||
93 | // Ajouter une sécurité par cpatcha avec un "input" supplémentaire | ||
94 | // Et créer une variable de session pour la réponse au CAPTCHA | ||
95 | |||
96 | $title = "connexion"; | ||
97 | $subHeading = "Veuillez saisir votre mot de passe pour pouvoir apporter des modifications au site."; | ||
98 | |||
99 | // cette page utilise la même vue que la fonction changerMotDePasse() dans controller/admin.php | ||
100 | require('view/connexion.php'); | ||
101 | |||
102 | echo($header); | ||
103 | |||
104 | // bon mot de passe | ||
105 | if(isset ($_POST["motdepasse"]) AND $_POST["motdepasse"] == $secret) | ||
106 | { | ||
107 | $_SESSION['admin'] = 1; | ||
108 | header('Location: index.php?page=' . $_GET['from']); | ||
109 | exit(); | ||
110 | } | ||
111 | |||
112 | // mauvais mot de passe | ||
113 | elseif(isset ($_POST["motdepasse"]) AND $_POST["motdepasse"] != $secret) | ||
114 | { | ||
115 | // défense aux attaques par force brute | ||
116 | // pas parfait, ne marche pas si l'attaquant multiplie les connexions au site | ||
117 | echo($erreurMDP); | ||
118 | sleep(1); | ||
119 | echo($formulaireConnexion); | ||
120 | } | ||
121 | |||
122 | // première arrivée sur la page | ||
123 | else | ||
124 | { | ||
125 | echo($formulaireConnexion); | ||
126 | } | ||
127 | |||
128 | echo($footer); | ||
129 | } | ||
@@ -38,12 +38,7 @@ | |||
38 | // - autoriser PHP (sinon, c'est comme si on avait un site statique) | 38 | // - autoriser PHP (sinon, c'est comme si on avait un site statique) |
39 | // -> pour pouvoir installer le site en n'ayant qu'à modifier les droits du dossier data uniquement et éviter les situations pénibles ou l'utilisateur est bloqué sans rien comprendre, on pourra créer ou utiliser des sauvegardes au format ZIP depuis une page spéciale accessible avec le compte admin | 39 | // -> pour pouvoir installer le site en n'ayant qu'à modifier les droits du dossier data uniquement et éviter les situations pénibles ou l'utilisateur est bloqué sans rien comprendre, on pourra créer ou utiliser des sauvegardes au format ZIP depuis une page spéciale accessible avec le compte admin |
40 | 40 | ||
41 | // au premier démarrage du site | 41 | // sessions, penser aux attaques CSRF (cross-site request forgery): |
42 | // l'explication des éventuels problèmes de droits en lecture/écriture est à chercher ici: | ||
43 | require('controller/installation.php'); | ||
44 | installation(); | ||
45 | |||
46 | // à propos des sessions, penser aux attaques CSRF (cross-site request forgery): | ||
47 | // ça consite à faire qu'un utilisateur connecté avec une session envoie malgré lui une requête GET ou POST qu'un hacker aura cachée par exemple dans une fausse image clicable | 42 | // ça consite à faire qu'un utilisateur connecté avec une session envoie malgré lui une requête GET ou POST qu'un hacker aura cachée par exemple dans une fausse image clicable |
48 | // - solution: faire qu'un GET seul dans une session ne suffise pas à effectuer une action (les GET ne doivent servir qu'à afficher la bonne page), une attaque sur un POST est possible aussi mais plus difficile et nécessite d'injecter du javascript | 43 | // - solution: faire qu'un GET seul dans une session ne suffise pas à effectuer une action (les GET ne doivent servir qu'à afficher la bonne page), une attaque sur un POST est possible aussi mais plus difficile et nécessite d'injecter du javascript |
49 | // - on peut demander à l'utilisateur une vérification supplémentaire avant chaque action, mais c'est plutôt chiant | 44 | // - on peut demander à l'utilisateur une vérification supplémentaire avant chaque action, mais c'est plutôt chiant |
@@ -52,6 +47,14 @@ installation(); | |||
52 | // infos: https://fr.wikipedia.org/wiki/Cross-site_request_forgery | 47 | // infos: https://fr.wikipedia.org/wiki/Cross-site_request_forgery |
53 | session_start(); | 48 | session_start(); |
54 | 49 | ||
50 | // au premier démarrage du site | ||
51 | // l'explication des éventuels problèmes de droits en lecture/écriture est à chercher ici: | ||
52 | require('controller/installation.php'); | ||
53 | require('controller/password.php'); | ||
54 | installation(); | ||
55 | |||
56 | |||
57 | |||
55 | // traitement des POST du ckeditor | 58 | // traitement des POST du ckeditor |
56 | // la fonction submitCKeditor n'affiche rien (controller/admin.php n'est pas utilisé) puis redirige sans GET | 59 | // la fonction submitCKeditor n'affiche rien (controller/admin.php n'est pas utilisé) puis redirige sans GET |
57 | if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1 | 60 | if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1 |
@@ -116,21 +119,20 @@ else | |||
116 | } | 119 | } |
117 | 120 | ||
118 | 121 | ||
119 | // mot de passe de connexion à hacher! | ||
120 | // utiliser php pour ça, plus le .htaccess | ||
121 | require('controller/password.php'); | ||
122 | $secret = "julian"; | ||
123 | |||
124 | 122 | ||
125 | // page du site demandée | 123 | // page du site demandée |
126 | if(isset($_GET['page'])) | 124 | if(isset($_GET['page'])) |
127 | { | 125 | { |
126 | // page d'accueil | ||
127 | if($_GET['page'] == 'accueil') | ||
128 | { | ||
129 | accueil(); | ||
130 | } | ||
128 | // page menu | 131 | // page menu |
129 | if($_GET['page'] == 'menu') | 132 | elseif($_GET['page'] == 'menu') |
130 | { | 133 | { |
131 | menu(); | 134 | menu(); |
132 | } | 135 | } |
133 | |||
134 | // page melaine | 136 | // page melaine |
135 | elseif($_GET['page'] == 'melaine') | 137 | elseif($_GET['page'] == 'melaine') |
136 | { | 138 | { |
@@ -200,10 +202,10 @@ if(isset($_GET['page'])) | |||
200 | discoVisitor(); | 202 | discoVisitor(); |
201 | } | 203 | } |
202 | } | 204 | } |
203 | // page connexion au mode admin | 205 | // page connexion |
204 | elseif($_GET['page'] == 'connexion') | 206 | elseif($_GET['page'] == 'connexion') |
205 | { | 207 | { |
206 | connexion($secret); | 208 | connect(); |
207 | } | 209 | } |
208 | // $_GET['page'] = n'importe quoi! | 210 | // $_GET['page'] = n'importe quoi! |
209 | else | 211 | else |
@@ -216,9 +218,10 @@ if(isset($_GET['page'])) | |||
216 | // actions en mode admin, recharger une des pages principales | 218 | // actions en mode admin, recharger une des pages principales |
217 | elseif($_SESSION['admin'] == 1 && isset($_GET['action'])) | 219 | elseif($_SESSION['admin'] == 1 && isset($_GET['action'])) |
218 | { | 220 | { |
219 | if($_GET['action'] == 'nouveau_mdp') | 221 | if($_GET['action'] == 'modif_mdp') |
220 | { | 222 | { |
221 | changerMotDePasse($secret); | 223 | //changePassword($secret); |
224 | changePassword(); | ||
222 | } | 225 | } |
223 | // extraction du contenu du dossier data | 226 | // extraction du contenu du dossier data |
224 | else if($_GET['action'] == 'extraction') | 227 | else if($_GET['action'] == 'extraction') |
@@ -250,7 +253,6 @@ elseif(isset($_GET['erreur'])) | |||
250 | //else | 253 | //else |
251 | //{ | 254 | //{ |
252 | accueil(); | 255 | accueil(); |
253 | // accueil_404(); // à créer | ||
254 | //} | 256 | //} |
255 | } | 257 | } |
256 | 258 | ||
diff --git a/model/Classes.php b/model/Classes.php index 1b2a463..e574eeb 100644 --- a/model/Classes.php +++ b/model/Classes.php | |||
@@ -1,5 +1,5 @@ | |||
1 | <?php | 1 | <?php |
2 | // model/ArticlesManager.php | 2 | // model/Classes.php |
3 | 3 | ||
4 | class ArticlesManager | 4 | class ArticlesManager |
5 | { | 5 | { |
@@ -16,11 +16,6 @@ class ArticlesManager | |||
16 | $this->page = $page; | 16 | $this->page = $page; |
17 | } | 17 | } |
18 | 18 | ||
19 | //public function setAscending($croissant) | ||
20 | //{ | ||
21 | // $this->Ascending = $croissant; | ||
22 | //} | ||
23 | |||
24 | public function findFileName($numArticle) | 19 | public function findFileName($numArticle) |
25 | { | 20 | { |
26 | $this->fileName = $this->files[$numArticle - 1]; | 21 | $this->fileName = $this->files[$numArticle - 1]; |
@@ -53,12 +48,10 @@ class ArticlesManager | |||
53 | { | 48 | { |
54 | if($this->page == '') | 49 | if($this->page == '') |
55 | { | 50 | { |
56 | die("debug: la méthode setPage() doit être appelée avant toute autre."); | 51 | die("debug: la méthode setPage() doit être appelée avant getFiles()."); |
57 | } | 52 | } |
58 | 53 | ||
59 | $this->files = glob('data/' . $this->page . '/html/*.html'); | 54 | $this->files = glob('data/' . $this->page . '/html/*.html'); |
60 | |||
61 | //$this->nbArticles = count($this->files); | ||
62 | } | 55 | } |
63 | 56 | ||
64 | // ordre du tableau des noms de fichiers | 57 | // ordre du tableau des noms de fichiers |
@@ -160,8 +153,8 @@ class AlbumsManager extends ArticlesManager | |||
160 | 153 | ||
161 | // create | 154 | // create |
162 | //public function create($titre, $annee, $pochette) | 155 | //public function create($titre, $annee, $pochette) |
163 | //public function create($content) | 156 | public function create($content) |
164 | public function create($content, $titre, $annee, $pochette) | 157 | //public function create($content, $titre, $annee, $pochette) |
165 | {} | 158 | {} |
166 | 159 | ||
167 | // read | 160 | // read |
@@ -170,8 +163,8 @@ class AlbumsManager extends ArticlesManager | |||
170 | 163 | ||
171 | // update | 164 | // update |
172 | //public function update($titre, $annee, $pochette) | 165 | //public function update($titre, $annee, $pochette) |
173 | //public function update($content) | 166 | public function update($content) |
174 | public function update($content, $titre, $annee, $pochette) | 167 | //public function update($content, $titre, $annee, $pochette) |
175 | {} | 168 | {} |
176 | 169 | ||
177 | // delete | 170 | // delete |
diff --git a/public/accueil.css b/public/accueil.css index 2e4426a..7f33393 100644 --- a/public/accueil.css +++ b/public/accueil.css | |||
@@ -112,7 +112,7 @@ form | |||
112 | 112 | ||
113 | .zoneVideAdmin | 113 | .zoneVideAdmin |
114 | { | 114 | { |
115 | padding-top: 30px; | 115 | padding-top: 20px; |
116 | } | 116 | } |
117 | 117 | ||
118 | #modeAdmin | 118 | #modeAdmin |
@@ -122,17 +122,22 @@ form | |||
122 | bottom: 0px; | 122 | bottom: 0px; |
123 | width: 700px; | 123 | width: 700px; |
124 | z-index: 2; | 124 | z-index: 2; |
125 | padding-top: 10px; | 125 | padding-top: 5px; |
126 | text-align: center; | 126 | text-align: center; |
127 | } | 127 | } |
128 | 128 | ||
129 | #modeAdmin p | 129 | #modeAdmin p |
130 | { | 130 | { |
131 | text-align: center; | 131 | text-align: center; |
132 | margin-top: 0px; | 132 | margin: 0px; |
133 | padding: 2px; | 133 | padding: 2px; |
134 | } | 134 | } |
135 | 135 | #modeAdmin>div p | |
136 | { | ||
137 | /*border: 1px black solid;*/ | ||
138 | margin: 5px; | ||
139 | padding: 0px; | ||
140 | } | ||
136 | #modeAdmin>p a | 141 | #modeAdmin>p a |
137 | { | 142 | { |
138 | padding: 2px; | 143 | padding: 2px; |
@@ -142,8 +147,8 @@ form | |||
142 | { | 147 | { |
143 | display: flex; | 148 | display: flex; |
144 | justify-content: space-around; | 149 | justify-content: space-around; |
145 | border: 1px black solid; | 150 | |
146 | margin: 10px; | 151 | margin: 0px; |
147 | font-size: 85%; | 152 | font-size: 85%; |
148 | } | 153 | } |
149 | 154 | ||
@@ -258,7 +263,7 @@ form | |||
258 | 263 | ||
259 | .zoneVideAdmin, #modeAdmin | 264 | .zoneVideAdmin, #modeAdmin |
260 | { | 265 | { |
261 | height: 100px; | 266 | height: 70px; |
262 | } | 267 | } |
263 | } | 268 | } |
264 | 269 | ||
@@ -333,7 +338,7 @@ form | |||
333 | 338 | ||
334 | .zoneVideAdmin, #modeAdmin | 339 | .zoneVideAdmin, #modeAdmin |
335 | { | 340 | { |
336 | height: 90px; | 341 | height: 75px; |
337 | } | 342 | } |
338 | 343 | ||
339 | #modeAdmin | 344 | #modeAdmin |
@@ -351,6 +356,14 @@ form | |||
351 | margin: 0px; | 356 | margin: 0px; |
352 | border: none; | 357 | border: none; |
353 | } | 358 | } |
359 | #modeAdmin | ||
360 | { | ||
361 | font-size: 90%; | ||
362 | } | ||
363 | .zoneVideAdmin, #modeAdmin | ||
364 | { | ||
365 | height: 70px; | ||
366 | } | ||
354 | } | 367 | } |
355 | 368 | ||
356 | @media screen and (max-width: 479px) | 369 | @media screen and (max-width: 479px) |
@@ -427,7 +440,7 @@ form | |||
427 | 440 | ||
428 | .zoneVideAdmin, #modeAdmin | 441 | .zoneVideAdmin, #modeAdmin |
429 | { | 442 | { |
430 | height: 80px; | 443 | height: 65px; |
431 | } | 444 | } |
432 | 445 | ||
433 | #modeAdmin | 446 | #modeAdmin |
@@ -437,7 +450,7 @@ form | |||
437 | 450 | ||
438 | #modeAdmin div | 451 | #modeAdmin div |
439 | { | 452 | { |
440 | margin: 5px; | 453 | /*margin: 5px;*/ |
441 | } | 454 | } |
442 | } | 455 | } |
443 | 456 | ||
@@ -446,21 +459,26 @@ form | |||
446 | { | 459 | { |
447 | .zoneVideAdmin, #modeAdmin | 460 | .zoneVideAdmin, #modeAdmin |
448 | { | 461 | { |
449 | height: 100px; | 462 | height: 80px; |
450 | } | 463 | } |
451 | 464 | ||
452 | #modeAdmin | 465 | #modeAdmin |
453 | { | 466 | { |
454 | font-size: 95%; | 467 | font-size: 95%; |
468 | padding: 0px; | ||
455 | } | 469 | } |
456 | 470 | #modeAdmin>p | |
457 | #modeAdmin>p a | ||
458 | { | 471 | { |
459 | display: block; | 472 | font-size: 90%; |
473 | margin: 3px; | ||
460 | } | 474 | } |
461 | 475 | ||
462 | #modeAdmin div | 476 | #modeAdmin div |
463 | { | 477 | { |
464 | max-width: 320px; | 478 | max-width: 320px; |
465 | } | 479 | } |
480 | #modeAdmin>div p | ||
481 | { | ||
482 | margin: 0px 5px; | ||
483 | } | ||
466 | } | 484 | } |
diff --git a/public/main.js b/public/main.js index ec2b2f1..c392590 100644 --- a/public/main.js +++ b/public/main.js | |||
@@ -3,25 +3,24 @@ | |||
3 | function versMenu() | 3 | function versMenu() |
4 | { | 4 | { |
5 | // ergonomique | 5 | // ergonomique |
6 | //window.setTimeout("location=('index.php?page=menu');", 10000); | 6 | window.setTimeout("location=('index.php?page=menu');", 10000); |
7 | window.setTimeout(function(){location.href="index.php?page=menu"}, 3000); | 7 | window.setTimeout(function(){location.href="index.php?page=menu"}, 3000); |
8 | } | 8 | } |
9 | 9 | ||
10 | function deconnexionAutomatique() | 10 | function deconnexionAutomatique() |
11 | { | 11 | { |
12 | // minuterie réinitialisée après une action de l'utilisateur | 12 | // minuterie réinitialisée après une action de l'utilisateur |
13 | // et sauvegarde avec le plugin "autosave" de l'éditeur | ||
14 | |||
15 | // 600000 ms = 10 min | 13 | // 600000 ms = 10 min |
16 | //window.setTimeout("location=('index.php?action=deconnexion');", 600000); | 14 | //window.setTimeout("location=('index.php?action=deconnexion');", 600000); |
15 | |||
16 | // sauvegarde de la rédaction en cours avec le plugin "autosave" de l'éditeur | ||
17 | } | 17 | } |
18 | 18 | ||
19 | // fonction appelée avec onClick dans un lien, | 19 | // fonction appelée avec onClick dans un lien, |
20 | // si on sélectionne pas "oui", on ne doit pas suivre le lien | 20 | // si JS est activé, on ne suit le lien qu'avec un "oui" |
21 | // si javascript est désactivé, le lien fonctionne | 21 | // si JS est désactivé, le lien fonctionne |
22 | function confirmerSuppression() | 22 | function confirmerSuppression() |
23 | { | 23 | { |
24 | // ne suivre le lien "href" que si on clique sur oui | ||
25 | var oui = confirm('Confirmer la suppression de cet article.'); | 24 | var oui = confirm('Confirmer la suppression de cet article.'); |
26 | if(!oui) | 25 | if(!oui) |
27 | { | 26 | { |
diff --git a/view/connexion.php b/view/password.php index 1c3aceb..c315610 100644 --- a/view/connexion.php +++ b/view/password.php | |||
@@ -1,10 +1,21 @@ | |||
1 | <?php | 1 | <?php |
2 | // view/connexion.php | 2 | // view/password.php |
3 | // | 3 | // |
4 | // ce fichier contient le HTML de deux pages du site: | 4 | // ce fichier contient le HTML de deux pages du site: |
5 | // - connexion au mode admin | 5 | // - connexion au mode admin |
6 | // - changement de mot de passe | 6 | // - changement de mot de passe |
7 | 7 | ||
8 | // formulaire création du mot de passe | ||
9 | ob_start(); | ||
10 | ?> | ||
11 | <form class="connexionFormulaire" method="post" action="index.php" > | ||
12 | <label for="motdepasse" >Mot de passe:</label> | ||
13 | <input type="password" name="motdepasse" autofocus required > | ||
14 | <input type="submit" value="Valider" > | ||
15 | </form> | ||
16 | <?php | ||
17 | $formulaireNouveauMDP = ob_get_clean(); | ||
18 | |||
8 | // formulaire connexion | 19 | // formulaire connexion |
9 | ob_start(); | 20 | ob_start(); |
10 | ?> | 21 | ?> |
@@ -20,7 +31,7 @@ $formulaireConnexion = ob_get_clean(); | |||
20 | // vérification de l'ancien et choix du nouveau à taper deux fois dont une à l'aveugle | 31 | // vérification de l'ancien et choix du nouveau à taper deux fois dont une à l'aveugle |
21 | ob_start(); | 32 | ob_start(); |
22 | ?> | 33 | ?> |
23 | <form class="connexionFormulaire" method="post" action="index.php?from=<?= $_GET['from'] ?>&action=nouveau_mdp" > | 34 | <form class="connexionFormulaire" method="post" action="index.php?from=<?= $_GET['from'] ?>&action=modif_mdp" > |
24 | <label for="motdepasse" >Ancien mot de passe:</label> | 35 | <label for="motdepasse" >Ancien mot de passe:</label> |
25 | <input type="password" name="ancienMotdepasse" autofocus required ><br /><br /> | 36 | <input type="password" name="ancienMotdepasse" autofocus required ><br /><br /> |
26 | <label for="motdepasse" >Nouveau mot de passe:</label> | 37 | <label for="motdepasse" >Nouveau mot de passe:</label> |
@@ -29,7 +40,8 @@ ob_start(); | |||
29 | <input type="submit" value="Valider" > | 40 | <input type="submit" value="Valider" > |
30 | </form> | 41 | </form> |
31 | <?php | 42 | <?php |
32 | $formulaireNouveauMDP = ob_get_clean(); | 43 | $formulaireModifMDP = ob_get_clean(); |
44 | |||
33 | 45 | ||
34 | // en-tête | 46 | // en-tête |
35 | ob_start(); | 47 | ob_start(); |
@@ -60,7 +72,8 @@ $header = ob_get_clean(); | |||
60 | // message d'erreur | 72 | // message d'erreur |
61 | $erreurMDP = '<p class="avertissement" >Mauvais mot de passe</p>'; | 73 | $erreurMDP = '<p class="avertissement" >Mauvais mot de passe</p>'; |
62 | 74 | ||
63 | // confirmation modification mot de passe | 75 | |
76 | // confirmation modification du mot de passe | ||
64 | ob_start(); | 77 | ob_start(); |
65 | ?> | 78 | ?> |
66 | <script type="text/javascript" >nouveauMotdepasse('<?= $_GET["from"] ?>');</script> | 79 | <script type="text/javascript" >nouveauMotdepasse('<?= $_GET["from"] ?>');</script> |
@@ -72,10 +85,17 @@ ob_start(); | |||
72 | $message = ob_get_clean(); | 85 | $message = ob_get_clean(); |
73 | 86 | ||
74 | 87 | ||
88 | // avertissement | ||
89 | ob_start(); | ||
90 | ?> | ||
91 | <p class="avertissement" >Rappel de sécurité<br />Vous n'utilisez pas votre propre ordinateur ou téléphone? Utilisez la navigation privée!</p> | ||
92 | <?php | ||
93 | $warning = ob_get_clean(); | ||
94 | |||
95 | |||
75 | // pied de page | 96 | // pied de page |
76 | ob_start(); | 97 | ob_start(); |
77 | ?> | 98 | ?> |
78 | <p class="avertissement" >Rappel de sécurité<br />Vous n'utilisez pas votre propre ordinateur ou téléphone: utilisez la navigation privée!</p> | ||
79 | <p class="connexionFooter" > | 99 | <p class="connexionFooter" > |
80 | <i>N'oubliez de cliquer sur "déconnexion" quand vous aurez fini.</i><br /> | 100 | <i>N'oubliez de cliquer sur "déconnexion" quand vous aurez fini.</i><br /> |
81 | <a href="index.php?page=<?= $_GET['from'] ?>" >Retour à la page précédente</a> | 101 | <a href="index.php?page=<?= $_GET['from'] ?>" >Retour à la page précédente</a> |
diff --git a/view/template.php b/view/template.php index ded1d08..dad4e17 100644 --- a/view/template.php +++ b/view/template.php | |||
@@ -71,11 +71,11 @@ if($_SESSION['admin'] == 1) | |||
71 | 71 | ||
72 | <div id="modeAdmin" > | 72 | <div id="modeAdmin" > |
73 | <p>Vous êtes en mode administrateur. | 73 | <p>Vous êtes en mode administrateur. |
74 | <a href="" >Options</a> | 74 | <!-- <a id="options" >Options</a> --> |
75 | <a href="index.php?page=<?= $page_actuelle ?>&action=deconnexion" >Déconnexion</a> | 75 | <a href="index.php?page=<?= $page_actuelle ?>&action=deconnexion" >Déconnexion</a> |
76 | </p> | 76 | </p> |
77 | <div> | 77 | <div> |
78 | <p><a href="index.php?from=<?= $page_actuelle ?>&action=nouveau_mdp" > | 78 | <p><a href="index.php?from=<?= $page_actuelle ?>&action=modif_mdp" > |
79 | Changer le mot de passe de connexion.</a></p> | 79 | Changer le mot de passe de connexion.</a></p> |
80 | <p><a href="index.php?from=<?= $page_actuelle ?>&action=sauvegarde" > | 80 | <p><a href="index.php?from=<?= $page_actuelle ?>&action=sauvegarde" > |
81 | Sauvegarder les données de tout le site.</a></p> | 81 | Sauvegarder les données de tout le site.</a></p> |