comunic/solvepassword.php
2016-11-19 12:08:12 +01:00

338 lines
15 KiB
PHP
Executable File

<?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&egrave;re phrase ne doit pas &ecirc;tre enlev&eacute;e ou modifi&eacute;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&eacute;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&eacute;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&eacute;cup&eacute;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 &ecirc;tes connect&eacute;. Cette page ne pr&eacute;sente aucun int&eacute;r&ecirc;t pour les personnes connect&eacute;es. Vous pouvez <a href='index.php'>retourner &agrave; 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&eacute;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 &eacute;t&eacute; r&eacute;initialis&eacute;. <a href='connecter.php'>Connexion</a></p>";
unset($_SESSION['reset_password']);
die();
}
else
{
$erreur = "Une erreur a survenue lors de la mise &agrave; jour de la base de donn&eacute;es, veuillez rafra&icirc;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&eacute; dans votre bo&icirc;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&eacute;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&eacute;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&eacute;cifi&eacute; inexistant. <a href=".$_SERVER['PHP_SELF']." title='Resaisir l\'adresse mail'>R&eacute;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&eacute;initialisation de votre mot de passe</h3>
<p>Vous avez r&eacute;cemment demand&eacute; une r&eacute;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&eacute;finir un plus facile &agrave; 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&eacute;initialis&eacute; votre mot de passe, ignorez ce message.</p>
<p><a href='".$urlsite."'>Connectez-vous</a> pour acc&eacute;der &agrave; toute les param&egrave;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 &eacute;t&eacute; envoy&eacute; dans votre bo&icirc;te mail. <a href='solvepassword.php'>Valider le mot de passe</a></p>";
exit();
}
}
else
{
echo "<p class='acceuil_solve_password'>Informations s&eacute;cifi&eacute;es incorrectes. <a href=".$_SERVER['PHP_SELF']." title='Resaisir l\'adresse mail'>R&eacute;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&eacute;cifi&eacute;e est incorrecte. <a href=".$_SERVER['PHP_SELF']." title='Resaisir l\'adresse mail'>R&eacute;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&eacute;cup&eacute;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&eacute;tablir un mot de passe fonctionnel. <a href='".$_SERVER['PHP_SELF']."'>Continuer avec les questions de s&eacute;curit&eacute;</a></p>";
}
else
{
//Message d'erreur
echo "<p>Impossible de d&eacute;finir un nouveau mot de passe en utilisant les questions de s&eacute;curit&eacute; pour ce compte car elles n'ont pas &eacute;t&eacute; d&eacute;finies. ";
if($active_envoi_mail == "non")
{
echo "<a href='".$_SERVER['PHP_SELF']."'>R&eacute;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&eacute;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&eacute;cup&eacute;ration du mot de passe</h2>
<p>Bienvenue dans l'assistant de r&eacute;cup&eacute;ration de mot de passe. Veuillez v&eacute;rifier que vous disposez de vos questions de s&eacute;curit&eacute;. 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&eacute;essayer ult&eacute;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&eacute;licitations! les r&eacute;ponses donn&eacuteses sont correctes! Votre compte est accessible. Le mot de passe est d&eacute;sormais votre adresse mail. <a href='parametres.php?c=password'>Cliquez ici pour d&eacute;finir un nouveau mot de passe.</a> ou <a href='index.php'>Cliquez ici pour acc&eacute;der &agrave; votre page d'acceuil.</a></p>";
die();
}
else
{
echo "<p>La r&eacute;ponse 1 et/ou la r&eacute;ponse 2 est/sont incorrectes. Vous pouvez : soit compl&eacute;ter &agrave; nouveau les questions de s&eacute;curit&eacute;, soit nous contacter afin que nous r&eacute;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&eacute;pondre aux questions de s&eacute;curit&eacute; suivantes : (Le syst&egrave;me ne prend pas en compte la casse : les majuscules et les minuscules peuvent &ecirc;tre librement utilis&eacute;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>