forked from pierre42100/comunic
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsolvepassword.php
More file actions
executable file
·337 lines (290 loc) · 15.4 KB
/
Copy pathsolvepassword.php
File metadata and controls
executable file
·337 lines (290 loc) · 15.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
<?php
// Récupération de mot de passe //
// Service Pierre 2014 //
// Fichier confidentiel //
// Ne pas révéler son contenu //
//Démarrage de la session
session_start();
//Init page
include('inc/initPage.php');
//Formulaire de contact
function forumlairecontact($mail, $nom, $prenom){
$output = "<p>Essayez de nous contacter : (la première phrase ne doit pas être enlevée ou modifiée. Sinon votre demande ne pourrait aboutir.)</p>";
$output .= '<form action="contact.php" method="post">';
$output .= '<textarea name="contact" cols="50" rows="10" noresize>Bonjour, j\'ai perdu mon mot de passe mais je n\'ai pas défini ou oublié mes questions de sécurité.'."\n";
$output .= 'Mon prénom : '.$prenom."\n";
$output .= 'Mon nom : '.$nom."\n";
$output .= "Merci de m'envoyer dans ma boite mail un mot de passe de confirmation qui me permettra de prouver que je suis le légal possesseur de ce compte.";
$output .= '</textarea><br /><input type="hidden" name="mail" value="'.$mail.'" />';
$output .= "<input type='hidden' name='id_type' value='5' />";
$output .= "<input type='submit' value='Envoyer' />";
$output .= '</form>';
//On renvoi le formulaire
return $output;
}
//On vérifie si il faut changer d'adresse mail
if(isset($_GET['change_email']))
{
unset($_SESSION['solvepassword_email']);
}
?><!DOCTYPE html>
<html>
<head>
<title>Récupération de votre mot de passe</title>
<?php include(pagesRelativePath('common/head.php')); ?>
</head>
<body>
<?php include(pagesRelativePath('common/pageTop.php')); ?>
<?php
//On vérifie si la personne est connectée ou non
if(isset($_SESSION['ID']))
affiche_message_erreur("Vous êtes connecté. Cette page ne présente aucun intérêt pour les personnes connectées. Vous pouvez <a href='index.php'>retourner à la page d'acceuil</a>.");
//On vérifie si il existe un nouveau mot de passe en attente
/* Structure : $_SESSION['reset_password'] = array(
'ID' => $infopersonne['ID'],
'mail' => $infopersonne['mail'],
'new_password' => $new_password
); */
if(isset($_SESSION['reset_password']) OR (isset($_GET['id']) AND isset($_GET['new_password'])))
{
//On vérifie si il y a une demande d'annulation
if(isset($_GET['cancel']))
{
unset($_SESSION['reset_password']);
die("<p class='acceuil_solve_password'><a href='".$_SERVER['PHP_SELF']."?change_email'>Continuer vers la page d'acceuil de réinitialisation de mot de passe</a></p>");
}
//On vérifie si on a reçu le mot de passe
if(isset($_POST['new_password']) OR isset($_GET['new_password']))
{
//Si le mot de passe provient du formulaire
if(isset($_POST['new_password']))
$_GET['new_password'] = crypt(sha1($_POST['new_password']), sha1($_POST['new_password']));
//Récupération des informations de l'utilisateur
$infos_user = cherchenomprenom((isset($_SESSION['reset_password']['ID']) ? $_SESSION['reset_password']['ID'] : $_GET['id']*1), $bdd);
if($_GET['new_password'] == $infos_user['new_password'])
{
//Mise à jour du mot de passe
//Enregistrement de la modification dans la base de donnée
$sql = "UPDATE utilisateurs SET new_password = ?, password = ? WHERE ID = ?";
$modif = $bdd->prepare($sql);
if($modif->execute(array("", $_GET['new_password'], $infos_user['ID'])))
{
//Message de succès
echo "<p class='acceuil_solve_password'> Le mot de passe a été réinitialisé. <a href='connecter.php'>Connexion</a></p>";
unset($_SESSION['reset_password']);
die();
}
else
{
$erreur = "Une erreur a survenue lors de la mise à jour de la base de données, veuillez rafraîchir la page.";
}
}
else
{
$erreur = "Mot de passe incorrect.";
}
}
?><div class='acceuil_solve_password'>
<?php
//Recherche de la présence d'erreur
if(isset($erreur))
echo "Erreur: ".$erreur." <br />";
?>
Veuillez maintenant saisir le nouveau mot de passe envoyé dans votre boîte mail :
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="password" name="new_password" placeholder="Mot de passe" /> <input type="submit" value="Valider" />
</form>
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?cancel">Réinitaliser le mot de passe d'un autre compte</a>
</div><?php
exit();
}
//On vérifie si une demande de mail a été envoyée
if(isset($_GET['mail']) AND isset($_GET['prenom']) AND isset($_GET['nom']) AND isset($_GET['id']) AND isset($_GET['date_create']) AND ($active_envoi_mail == "oui"))
{
$last_change_password_mail = (isset($_SESSION['changed_password']) ? $_SESSION['changed_password'] : 0);
if($last_change_password_mail > strtotime("-2 hours"))
{
echo "<p>Erreur : Vous ne pouvez pas réinitialiser plusieurs fois un mot de passe en moins de 48H.</p>";
}
elseif($_GET['mail'] != "")
{
//Définition des variables
$mail = $_GET['mail'];
$prenom = $_GET['prenom'];
$nom = $_GET['nom'];
$id = base64_decode($_GET['id'])*1;
$date_creation_compte = base64_decode($_GET['date_create']);
if($id > 0)
{
//Recherche des informations sur le compte
$infopersonne = cherchenomprenom($id, $bdd, 'ID', "<p class='acceuil_solve_password'>Compte spécifié inexistant. <a href=".$_SERVER['PHP_SELF']." title='Resaisir l\'adresse mail'>Réessayer</a></p>");
//Contrôle des informations
if($infopersonne['mail'] == $mail AND $infopersonne['prenom'] == $prenom AND $infopersonne['nom'] == $nom AND $infopersonne['date_creation'] == $date_creation_compte AND $infopersonne['ID'] == $id)
{
//Génération du nouveau mot de passe
$new_password = crypt($infopersonne['mail'].$infopersonne['prenom'].$infopersonne['nom'].$infopersonne['ID'].$infopersonne['date_creation'].$infopersonne['password'].time().(isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : "no_remote_addr").(isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : "no_user_agent"));
$new_password = crypt($new_password, $new_password);
$new_password = substr(str_replace(array('$', '/', "\\", "."), "", $new_password), 0, 8);
//Enregistrement du nouveau mot de passe dans la session
$_SESSION['reset_password'] = array(
'ID' => $infopersonne['ID'],
'mail' => $infopersonne['mail'],
'new_password' => $new_password
);
//Le nouveau mot de passe étant généré, on l'enregistre
$motdepasse = sha1($new_password);
$motdepasse = crypt($motdepasse, $motdepasse);
//Enregistrement de la modification dans la base de donnée
$sql = "UPDATE utilisateurs SET new_password = ? WHERE ID = ?";
$modif = $bdd->prepare($sql);
$modif->execute(array($motdepasse, $infopersonne['ID']));
//On envoi un mail
//Vérification de l'autorisation d'envoi de mails
if($active_envoi_mail == "oui")
{
//Envoi d'un message au demandé
$send_mail = true;
$sujet = "Modification de votre mot de passe";
$description_rapide = "Vous avez réinitialisé votre mot de passe.";
$nom_destinataire = $infopersonne['prenom']." ".$infopersonne['nom'];
$adresse_mail_destinataire = $infopersonne['mail'];
$texte_message = "
<h3 class='titre'>Réinitialisation de votre mot de passe</h3>
<p>Vous avez récemment demandé une réinitialisation de mot de passe. Voici quel est votre nouveau mot de passe : <b>".$new_password."</b>.
Nous vous recommandons de <a href='".$urlsite."connecter.php?redirect=".urlencode('parametres.php?c=password')."'> changer votre mot de passe </a> afin d'en définir un plus facile à retenir par vous.</p>
<p><b>Important :</b> Afin de valider ce nouveau mot de passe, <a href='".$urlsite."solvepassword.php?new_password=".urlencode($motdepasse)."&id=".$infopersonne['ID']."'> cliquez ici </a>.</p>
<p><strong>Important : Si vous n'avez pas réinitialisé votre mot de passe, ignorez ce message.</p>
<p><a href='".$urlsite."'>Connectez-vous</a> pour accéder à toute les paramètres de Comunic.</a></p>
";
//Envoi du message
include('inc/envoi_mail.php');
///On indique qu'un mot de passe a été changé
$_SESSION['changed_password'] = time();
//Message de succès
echo "<p class='acceuil_solve_password'>Un nouveau mot de passe a été envoyé dans votre boîte mail. <a href='solvepassword.php'>Valider le mot de passe</a></p>";
exit();
}
}
else
{
echo "<p class='acceuil_solve_password'>Informations sécifiées incorrectes. <a href=".$_SERVER['PHP_SELF']." title='Resaisir l\'adresse mail'>Réessayer</a></p>";
die();
}
}
}
}
//Recherche de l'adresse mail
if(!isset($_SESSION['solvepassword_email']))
{
if(isset($_POST['solvepassword_email']))
{
$infopersonne = cherchenomprenom($_POST['solvepassword_email'], $bdd, 'mail', "<p class='acceuil_solve_password'>L'adresse mail spécifiée est incorrecte. <a href=".$_SERVER['PHP_SELF']." title='Resaisir l\'adresse mail'>Réessayer</a>");
?><table class="info_user_solve_password">
<tr>
<td>
<?php echo avatar($infopersonne['ID'], './', 128, 128); ?>
</td>
<td>
<h3><?php echo $infopersonne['prenom'].' '.$infopersonne['nom']; ?></h3>
</td>
</tr>
<tr>
<td>Récupération <br /> de mot de passe</td>
<td>
<?php
if($infopersonne['question1'] != '' && $infopersonne['reponse1'] != '' && $infopersonne['question2'] != '' && $infopersonne['reponse2'] != '')
{
//Enregistrement de l'adresse mail
$_SESSION['solvepassword_email'] = $_POST['solvepassword_email'];
//Message de succès
echo "<p>Nous allons maintenant pouvoir vous rétablir un mot de passe fonctionnel. <a href='".$_SERVER['PHP_SELF']."'>Continuer avec les questions de sécurité</a></p>";
}
else
{
//Message d'erreur
echo "<p>Impossible de définir un nouveau mot de passe en utilisant les questions de sécurité pour ce compte car elles n'ont pas été définies. ";
if($active_envoi_mail == "non")
{
echo "<a href='".$_SERVER['PHP_SELF']."'>Réessayer</a></p>";
echo forumlairecontact($infopersonne['mail'], $infopersonne['nom'], $infopersonne['prenom']);
}
}
if($active_envoi_mail == "oui") {
echo "<p><a href='".$_SERVER['PHP_SELF']."?mail=".urlencode($infopersonne['mail'])."&prenom=".urlencode($infopersonne['prenom'])."&nom=".urlencode($infopersonne['nom'])."&id=".urlencode(base64_encode($infopersonne['ID']))."&date_create=".urlencode(base64_encode($infopersonne['date_creation']))."' title='Envoyer un mail' >";
echo code_inc_img(path_img_asset('mail_green.png'), "", "", "", "vertical-align: middle;");
echo " Envoyer un mail de réinitialisation de mot de passe";
echo "</a></p>";
}
?>
</td>
</tr>
</table><?php
die();
}
?><div class="acceuil_solve_password">
<h2><?php echo code_inc_img(path_img_asset('set_password.png')); ?> Récupération du mot de passe</h2>
<p>Bienvenue dans l'assistant de récupération de mot de passe. Veuillez vérifier que vous disposez de vos questions de sécurité. Nous allons commencer par vous demander votre adresse mail afin de vous identifier.</p>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method='post'>
Adresse mail : <input type='mail' name='solvepassword_email' /> <input type='submit' value='Envoyer' />
</form>
</div>
<?php
die();
}
//Préparation de l'affichage des questions
?><div class="questions_solve_password"><?php
//On recherche les informations de la personne
$infopersonne = cherchenomprenom($_SESSION['solvepassword_email'], $bdd, "mail", "<p>Une erreur est survenue. Veuillez réessayer ultérieurement ou actualiser la page.</p>");
if(isset($_POST['reponse1']) && isset($_POST['reponse2']))
{
//On vérifie les réponses
if((strtoupper($_POST['reponse1']) == strtoupper($infopersonne['reponse1'])) && (strtoupper($_POST['reponse2']) == strtoupper($infopersonne['reponse2'])))
{
//On modifie le mot de passe
$motdepasse = sha1($infopersonne['mail']);
$motdepasse = crypt($motdepasse, $motdepasse);
//Enregistrement de la modification dans la base de donnée
$sql = "UPDATE utilisateurs SET password = ? WHERE ID = ?";
$modif = $bdd->prepare($sql);
$modif->execute(array($motdepasse, $infopersonne['ID']));
//On connecte la personne
$_SESSION['ID'] = $infopersonne['ID'];
echo "<p>Félicitations! les réponses donnéses sont correctes! Votre compte est accessible. Le mot de passe est désormais votre adresse mail. <a href='parametres.php?c=password'>Cliquez ici pour définir un nouveau mot de passe.</a> ou <a href='index.php'>Cliquez ici pour accéder à votre page d'acceuil.</a></p>";
die();
}
else
{
echo "<p>La réponse 1 et/ou la réponse 2 est/sont incorrectes. Vous pouvez : soit compléter à nouveau les questions de sécurité, soit nous contacter afin que nous réinitilasions votre mot de passe.</p>";
echo forumlairecontact($infopersonne['mail'], $infopersonne['prenom'], $infopersonne['nom']);
}
}
else
{
//Message de bienvenue dans les questions
?><p><b><?php echo avatar($infopersonne['ID'], './'); echo $infopersonne['prenom'].' '.$infopersonne['nom']; ?></b>, veuillez maintenant répondre aux questions de sécurité suivantes : (Le système ne prend pas en compte la casse : les majuscules et les minuscules peuvent être librement utilisées)</p><?php
}
//On donne les questions de sécurité
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table>
<tr>
<td><?php echo $infopersonne['question1']; ?></td>
<td><input type='text' name='reponse1' value="<?php if(isset($_POST['reponse1'])) echo $_POST['reponse1']; ?>" /></td>
</tr>
<tr>
<td><?php echo $infopersonne['question2']; ?></td>
<td><input type='text' name='reponse2' value="<?php if(isset($_POST['reponse2'])) echo $_POST['reponse2']; ?>" /></td>
</tr>
<tr>
<td></td>
<td><input type='submit' value='Valider' />
</tr>
</table>
</form>
<!-- Message pour changer l'adresse mail -->
<p>Ce n'est pas votre adresse mail ? <a href="<?php echo $_SERVER['PHP_SELF']; ?>?change_email=1">Cliquez ici</a>.</p>
</div>
<hr />
<?php include(pagesRelativePath('common/pageBottom.php')); ?>
</body>
</html>