aboutsummaryrefslogtreecommitdiff
path: root/src/controller/UserController.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/controller/UserController.php')
-rw-r--r--src/controller/UserController.php65
1 files changed, 31 insertions, 34 deletions
diff --git a/src/controller/UserController.php b/src/controller/UserController.php
index f3c99e7..6928e86 100644
--- a/src/controller/UserController.php
+++ b/src/controller/UserController.php
@@ -22,14 +22,12 @@ class UserController
22 // account 22 // account
23 static public function existUsers(EntityManager $entityManager): bool 23 static public function existUsers(EntityManager $entityManager): bool
24 { 24 {
25 $nb_users = $entityManager 25 if(!$entityManager // table vide
26 ->createQuery('SELECT COUNT(u.id_user) FROM App\Entity\User u') 26 ->createQuery("SELECT u FROM App\Entity\User u")
27 ->getSingleScalarResult(); 27 ->setMaxResults(1)
28 28 ->getOneOrNullResult())
29 if($nb_users === 0) // table vide
30 { 29 {
31 $_SESSION['user'] = ''; 30 unset($_SESSION['user']);
32 $_SESSION['admin'] = false;
33 return false; 31 return false;
34 } 32 }
35 else{ 33 else{
@@ -38,7 +36,7 @@ class UserController
38 } 36 }
39 37
40 // account 38 // account
41 static public function createUser(EntityManager $entityManager) 39 static public function createAdminUser(EntityManager $entityManager)
42 { 40 {
43 unset($_SESSION['user']); 41 unset($_SESSION['user']);
44 42
@@ -48,7 +46,7 @@ class UserController
48 $error = ''; 46 $error = '';
49 if($form->validate()){ 47 if($form->validate()){
50 $password = password_hash($_POST['password'], PASSWORD_DEFAULT); 48 $password = password_hash($_POST['password'], PASSWORD_DEFAULT);
51 $user = new App\Entity\User($_POST['login'], $password); 49 $user = new User($_POST['login'], 'admin', $password);
52 $entityManager->persist($user); 50 $entityManager->persist($user);
53 $entityManager->flush(); 51 $entityManager->flush();
54 } 52 }
@@ -64,31 +62,34 @@ class UserController
64 die; 62 die;
65 } 63 }
66 64
65 // account
66 //static public function createUser(EntityManager $entityManager){}
67
67 // auth 68 // auth
68 static public function connect(EntityManager $entityManager): void 69 static public function connect(EntityManager $entityManager): void
69 { 70 {
70 if($_SESSION['admin']) // déjà connecté? 71 if(IS_ADMIN) // déjà connecté?
71 { 72 {
72 header('Location: ' . new URL); 73 header('Location: ' . new URL);
73 die; 74 die;
74 } 75 }
75 $_SESSION['user'] = ''; 76 unset($_SESSION['user']);
76 $_SESSION['admin'] = false;
77 77
78 $form = new FormValidation($_POST, 'connection'); 78 $form = new FormValidation($_POST, 'connection');
79 79
80 $error = ''; 80 $error = '';
81 if($form->validate()){ 81 if($form->validate()){
82 // à mettre dans une classe métier UserService, Authentication, AuthService? 82 // à mettre dans une classe métier UserService, Authentication, AuthService?
83 $user = self::getUser($_POST['login'], $entityManager); 83 $user = self::getUserByName($_POST['login'], $entityManager);
84 if(!empty($user) && $_POST['login'] === $user->getLogin() && password_verify($_POST['password'], $user->getPassword())) 84 if(!empty($user) && $_POST['login'] === $user->getLogin() && password_verify($_POST['password'], $user->getPassword()))
85 { 85 {
86 $log = new Log(true); 86 $log = new Log(true);
87 87
88 // protection fixation de session, si l'attaquant crée un cookie de session, il est remplacé 88 // protection fixation de session, si l'attaquant crée un cookie de session, il est remplacé
89 session_regenerate_id(true); 89 session_regenerate_id(true);
90 $_SESSION['user'] = $_POST['login']; 90 $_SESSION['user']['id'] = $user->getId();
91 $_SESSION['admin'] = true; 91 $_SESSION['user']['username'] = $user->getLogin();
92 $_SESSION['user']['role'] = $user->getRole();
92 93
93 EmailService::cleanEmails($entityManager); 94 EmailService::cleanEmails($entityManager);
94 95
@@ -123,7 +124,7 @@ class UserController
123 static public function disconnect(): void 124 static public function disconnect(): void
124 { 125 {
125 // nettoyage complet 126 // nettoyage complet
126 $_SESSION = []; // mémoire vive 127 unset($_SESSION['user']); // mémoire vive
127 session_destroy(); // fichier côté serveur 128 session_destroy(); // fichier côté serveur
128 setcookie('PHPSESSID', '', time() - 86400, '/'); // cookie de session 129 setcookie('PHPSESSID', '', time() - 86400, '/'); // cookie de session
129 130
@@ -138,7 +139,7 @@ class UserController
138 // user 139 // user
139 static public function updateUsername(EntityManager $entityManager): void 140 static public function updateUsername(EntityManager $entityManager): void
140 { 141 {
141 if(!$_SESSION['admin']){ // superflux, fait dans le routeur 142 if(!IS_ADMIN){ // superflux, fait dans le routeur
142 self::disconnect(); 143 self::disconnect();
143 } 144 }
144 145
@@ -150,11 +151,11 @@ class UserController
150 $error = ''; 151 $error = '';
151 if($form->validate()){ 152 if($form->validate()){
152 // à mettre dans une classe métier UserService? 153 // à mettre dans une classe métier UserService?
153 $user = self::getUser($_POST['login'], $entityManager); 154 $user = self::getUserByName($_POST['login'], $entityManager);
154 if(password_verify($_POST['password'], $user->getPassword())){ 155 if(password_verify($_POST['password'], $user->getPassword())){
155 $user->setLogin($_POST['new_login']); 156 $user->setLogin($_POST['new_login']);
156 $entityManager->flush(); 157 $entityManager->flush();
157 $_SESSION['user'] = $_POST['new_login']; 158 $_SESSION['user']['username'] = $_POST['new_login'];
158 159
159 $url->addParams(['success_username' => 'new_login']); 160 $url->addParams(['success_username' => 'new_login']);
160 $error = ''; 161 $error = '';
@@ -178,7 +179,7 @@ class UserController
178 // user 179 // user
179 static public function updatePassword(EntityManager $entityManager): void 180 static public function updatePassword(EntityManager $entityManager): void
180 { 181 {
181 if(!$_SESSION['admin']){ // superflux, fait dans le routeur 182 if(!IS_ADMIN){ // superflux, fait dans le routeur
182 self::disconnect(); 183 self::disconnect();
183 } 184 }
184 185
@@ -190,7 +191,7 @@ class UserController
190 $error = ''; 191 $error = '';
191 if($form->validate()){ 192 if($form->validate()){
192 // à mettre dans une classe métier UserService? 193 // à mettre dans une classe métier UserService?
193 $user = self::getUser($_POST['login'], $entityManager); 194 $user = self::getUserByName($_POST['login'], $entityManager);
194 if(password_verify($_POST['password'], $user->getPassword())){ 195 if(password_verify($_POST['password'], $user->getPassword())){
195 $new_password = password_hash($_POST['new_password'], PASSWORD_DEFAULT); 196 $new_password = password_hash($_POST['new_password'], PASSWORD_DEFAULT);
196 $user->setPassword($new_password); 197 $user->setPassword($new_password);
@@ -216,26 +217,22 @@ class UserController
216 } 217 }
217 218
218 // dans une classe mère ou un trait après découpage de UserController? 219 // dans une classe mère ou un trait après découpage de UserController?
219 static private function getUser(string $login, EntityManager $entityManager): ?User 220 static private function getUserByName(string $login, EntityManager $entityManager): ?User
220 { 221 {
221 $users = $entityManager->getRepository('App\Entity\User')->findBy(['login' => $login]); 222 $users = $entityManager->getRepository(User::class)->findBy(['login' => $login]);
222 223 foreach($users as $user){
223 if(count($users) === 0) 224 if($user->getLogin() === $login){
224 {
225 $_SESSION['user'] = '';
226 $_SESSION['admin'] = false;
227 }
228
229 foreach($users as $user)
230 {
231 if($user->getLogin() === $login)
232 {
233 return $user; 225 return $user;
234 } 226 }
235 } 227 }
236 return null; 228 return null;
237 } 229 }
238 230
231 static public function getUserById(int $id, EntityManager $entityManager): ?User
232 {
233 return $entityManager->find(User::class, $id);
234 }
235
239 // dans une classe Form? 236 // dans une classe Form?
240 // erreurs à la création des mots de passe 237 // erreurs à la création des mots de passe
241 static private function removeSpacesTabsCRLF(string $chaine): string 238 static private function removeSpacesTabsCRLF(string $chaine): string