mirror of
https://github.com/pierre42100/comunic
synced 2024-11-27 07:49:28 +00:00
338 lines
15 KiB
PHP
338 lines
15 KiB
PHP
|
<?php
|
|||
|
// R<>cup<75>ration de mot de passe //
|
|||
|
// Service Pierre 2014 //
|
|||
|
// Fichier confidentiel //
|
|||
|
// Ne pas r<>v<EFBFBD>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<6C> mes questions de s<>curit<69>.'."\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<63>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<72>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<75>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 <20> jour du mot de passe
|
|||
|
//Enregistrement de la modification dans la base de donn<6E>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<63>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<70>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 <20>t<EFBFBD> envoy<6F>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<74>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<EFBFBD>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 <20>tant g<>n<EFBFBD>r<EFBFBD>, on l'enregistre
|
|||
|
$motdepasse = sha1($new_password);
|
|||
|
$motdepasse = crypt($motdepasse, $motdepasse);
|
|||
|
|
|||
|
//Enregistrement de la modification dans la base de donn<6E>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<6E>
|
|||
|
$send_mail = true;
|
|||
|
$sujet = "Modification de votre mot de passe";
|
|||
|
$description_rapide = "Vous avez r<>initialis<69> 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 <20>t<EFBFBD> chang<6E>
|
|||
|
$_SESSION['changed_password'] = time();
|
|||
|
|
|||
|
//Message de succ<63>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<63>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<50>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<6E>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<69>
|
|||
|
?>
|
|||
|
<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>
|