Paaxio 1.0
Plateforme de streaming musical - SAE IUT Bayonne
Chargement...
Recherche...
Aucune correspondance
passwordResetToken.dao.php
Aller à la documentation de ce fichier.
1<?php
2
26{
30 private ?PDO $pdo;
31
37 public function __construct(?PDO $pdo)
38 {
39 $this->pdo = $pdo;
40 }
41
51 public function create(string $email): ?PasswordResetToken
52 {
53 // Invalider tous les tokens existants pour cet utilisateur
54 $this->invalidateTokensForUser($email);
55
56 // Générer un nouveau token
58 $dateCreation = new DateTime();
59 $dateExpiration = (clone $dateCreation)->modify('+1 hour');
60
61 $sql = "INSERT INTO passwordResetToken (token, emailUtilisateur, dateCreation, dateExpiration, estUtilise)
62 VALUES (:token, :email, :dateCreation, :dateExpiration, 0)";
63
64 $stmt = $this->pdo->prepare($sql);
65 $result = $stmt->execute([
66 ':token' => $tokenValue,
67 ':email' => $email,
68 ':dateCreation' => $dateCreation->format('Y-m-d H:i:s'),
69 ':dateExpiration' => $dateExpiration->format('Y-m-d H:i:s')
70 ]);
71
72 if ($result) {
73 return new PasswordResetToken(
74 (int)$this->pdo->lastInsertId(),
75 $tokenValue,
76 $email,
77 $dateCreation,
78 $dateExpiration,
79 false
80 );
81 }
82
83 return null;
84 }
85
92 public function findByToken(string $token): ?PasswordResetToken
93 {
94 $sql = "SELECT * FROM passwordResetToken WHERE token = :token";
95 $stmt = $this->pdo->prepare($sql);
96 $stmt->execute([':token' => $token]);
97 $row = $stmt->fetch(PDO::FETCH_ASSOC);
98
99 if ($row) {
100 return $this->hydrate($row);
101 }
102
103 return null;
104 }
105
117 public function findValidToken(string $token): ?PasswordResetToken
118 {
119 $sql = "SELECT * FROM passwordResetToken
120 WHERE token = :token
121 AND estUtilise = 0
122 AND dateExpiration > NOW()";
123 $stmt = $this->pdo->prepare($sql);
124 $stmt->execute([':token' => $token]);
125 $row = $stmt->fetch(PDO::FETCH_ASSOC);
126
127 if ($row) {
128 return $this->hydrate($row);
129 }
130
131 return null;
132 }
133
140 public function findActiveTokensByEmail(string $email): array
141 {
142 $sql = "SELECT * FROM passwordResetToken
143 WHERE emailUtilisateur = :email
144 AND estUtilise = 0
145 AND dateExpiration > NOW()
146 ORDER BY dateCreation DESC";
147 $stmt = $this->pdo->prepare($sql);
148 $stmt->execute([':email' => $email]);
149 $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
150
151 return $this->hydrateAll($rows);
152 }
153
163 public function markAsUsed(string $token): bool
164 {
165 $sql = "UPDATE passwordResetToken SET estUtilise = 1 WHERE token = :token";
166 $stmt = $this->pdo->prepare($sql);
167 return $stmt->execute([':token' => $token]);
168 }
169
179 public function invalidateTokensForUser(string $email): bool
180 {
181 $sql = "UPDATE passwordResetToken SET estUtilise = 1
182 WHERE emailUtilisateur = :email AND estUtilise = 0";
183 $stmt = $this->pdo->prepare($sql);
184 return $stmt->execute([':email' => $email]);
185 }
186
195 public function deleteExpiredTokens(): int
196 {
197 $sql = "DELETE FROM passwordResetToken WHERE dateExpiration < NOW()";
198 $stmt = $this->pdo->prepare($sql);
199 $stmt->execute();
200 return $stmt->rowCount();
201 }
202
213 public function updatePassword(string $email, string $nouveauMotDePasse): bool
214 {
215 $hashedPassword = password_hash($nouveauMotDePasse, PASSWORD_ARGON2ID);
216
217 $sql = "UPDATE utilisateur SET motDePasseUtilisateur = :password
218 WHERE emailUtilisateur = :email";
219 $stmt = $this->pdo->prepare($sql);
220 return $stmt->execute([
221 ':password' => $hashedPassword,
222 ':email' => $email
223 ]);
224 }
225
232 private function hydrate(array $row): PasswordResetToken
233 {
234 return new PasswordResetToken(
235 (int)$row['idToken'],
236 $row['token'],
237 $row['emailUtilisateur'],
238 new DateTime($row['dateCreation']),
239 new DateTime($row['dateExpiration']),
240 (bool)$row['estUtilise']
241 );
242 }
243
250 private function hydrateAll(array $rows): array
251 {
252 $tokens = [];
253 foreach ($rows as $row) {
254 $tokens[] = $this->hydrate($row);
255 }
256 return $tokens;
257 }
258
263 public function getPdo(): ?PDO
264 {
265 return $this->pdo;
266 }
267
273 public function setPdo(?PDO $pdo): void
274 {
275 $this->pdo = $pdo;
276 }
277}
Data Access Object pour les tokens de réinitialisation de mot de passe.
__construct(?PDO $pdo)
Constructeur de la classe PasswordResetTokenDAO.
create(string $email)
Crée un nouveau token de réinitialisation de mot de passe.
deleteExpiredTokens()
Supprime les tokens expirés de la base de données.
hydrateAll(array $rows)
Hydrate un tableau de lignes en tableau d'objets PasswordResetToken.
getPdo()
Récupère l'instance PDO.
setPdo(?PDO $pdo)
Définit l'instance PDO.
updatePassword(string $email, string $nouveauMotDePasse)
Met à jour le mot de passe d'un utilisateur.
markAsUsed(string $token)
Marque un token comme utilisé.
findValidToken(string $token)
Recherche un token valide par sa valeur.
findByToken(string $token)
Recherche un token par sa valeur.
invalidateTokensForUser(string $email)
Invalide tous les tokens d'un utilisateur.
hydrate(array $row)
Hydrate un tableau de données en objet PasswordResetToken.
findActiveTokensByEmail(string $email)
Recherche tous les tokens actifs d'un utilisateur.
Entité représentant un token de réinitialisation de mot de passe.
static genererToken()
Génère un nouveau token sécurisé.