--- /dev/null
+<?php
+require("auto.prepend.inc.php");
+new_skinned_page('recovery.tpl', AUTH_PUBLIC);
+
+$errors = Array();
+
+if (isset($_REQUEST['login']) and isset($_REQUEST['birth'])) {
+ if (!ereg("[0-3][0-9][0-1][0-9][1][9]([0-9]{2})", $_REQUEST['birth'])) {
+ $page->assign('error', "Date de naissance incorrecte ou incohérente");
+ $page->run();
+ }
+
+ $mailorg=strtok($_REQUEST['login'],"@");
+
+ // paragraphe rajouté : si la date de naissance dans la base n'existe pas, on l'update
+ // avec celle fournie ici en espérant que c'est la bonne
+
+ $sql="SELECT user_id, naissance FROM auth_user_md5 WHERE username='$mailorg'";
+ $result=$globals->db->query($sql);
+ if (list($uid,$naissance)=mysql_fetch_array($result)) {
+ if((strlen($naissance))<5) {
+ $globals->db->query("UPDATE auth_user_md5 SET naissance={$_REQUEST['birth']} WHERE user_id=$uid");
+ $naissance = $_REQUEST['birth'];
+ }
+ }
+ mysql_free_result($result);
+
+ if ($naissance == $_REQUEST['birth']) {
+ $page->assign('ok', true);
+ $url=rand_url_id();
+ $stamp=date("Y-m-d H:i:s");
+ $sql="INSERT INTO perte_pass (certificat,uid,created) VALUES ('$url',$uid,'$stamp')";
+
+ $globals->db->query($sql);
+
+ // on recupere les emails sans tenir comptes du flags active (ni des autres)
+ // sauf qu'il ne faut pas prendre la ligne qui possède l'éventuel appel
+ // au filtre personnel (ligne dont le num = 0)
+ $result=$globals->db->query("select email from emails where uid = $uid and num != 0");
+
+ $emails = array();
+ while(list($email) = mysql_fetch_row($result)) {
+ $emails[] = $email;
+ }
+ mysql_free_result($result);
+ $emails = implode(',', $emails);
+
+ require("diogenes.mailer.inc.php");
+ $mymail = new DiogenesMailer('Gestion des mots de passe <support+password@polytechnique.org>',
+ $emails, 'Ton certificat d\'authentification', false);
+
+ $mymail->setBody("Visite la page suivante qui expire dans six heures :
+$baseurl/tmpPWD.php?certificat=$url
+
+Si en cliquant dessus tu n'y arrives pas, copie intégralement l'adresse dans la barre de ton navigateur.
+
+--
+Polytechnique.org
+\"Le portail des élèves & anciens élèves de l'Ecole polytechnique\"".((!empty($_POST["email"])) ? "
+
+Adresse de secours : {$_POST['email']}" : "")."
+
+
+Mail envoyé à {$_REQUEST['login']}");
+ $mymail->send();
+
+ // on cree un objet logger et on log l'evenement
+ $logger = $_SESSION['log'] = (isset($logger) ? $logger : new DiogenesCoreLogger($uid));
+ $logger->log("recovery",$emails);
+ } else {
+ $page->assign('error', "Pas de résultat correspondant aux champs entrés dans notre base de données.");
+ }
+}
+
+$page->run();
+?>
--- /dev/null
+{* $Id: recovery.tpl,v 1.1 2004-07-17 15:03:12 x2000habouzit Exp $ *}
+
+<div class="rubrique">
+ Perte du mot de passe
+</div>
+
+{dynamic}
+
+<p class="erreur">{$error}</div>
+
+{if $ok}
+
+<p class="normal">
+<strong>Un certificat d'authentification aléatoire</strong> vient de t'être attribué et envoyé à
+ton adresse en polytechnique.org.<span class="mef"> Il expire dans six heures.</span> Tu dois donc
+<strong>consulter ton mail avant son expiration</strong> et utiliser le certificat comme expliqué
+dans le mail pour changer ton mot de passe.
+</p>
+<p class="normal">
+Si tu n'accèdes pas à ton mail dans les
+6 heures, sollicite un nouveau
+certificat sur cette page.
+</p>
+
+{else}
+
+<form action="{$smarty.server.PHP_SELF}" method="post">
+ <p class="normal">
+ Il est impossible de récupérer le mot de passe perdu (nous n'avons que le résultat après un
+ chiffrement irréversible de ton mot de passe). La procédure suivante va te permettre de choisir un
+ nouveau mot de passe.
+ </p>
+ <p>
+ Après avoir complété les informations suivantes, tu recevras à ton adresse Polytechnique.org un
+ courrier électronique te permettant de choisir ce nouveau mot de passe. Si jamais tu n'as plus
+ accès aux boîtes aux lettres vers lesquelles ton adresse Polytechnique.org reroute ton courrier,
+ alors indique nous ci-dessous l'adresse à laquelle tu souhaites recevoir le courrier. Nous t'y
+ adresserons le message de création d'un nouveau mot de passe si et seulement si tes anciennes
+ boîtes sont réellement inaccessibles.
+ </p>
+ <table class="tinybicol" cellpadding="3" cellspacing="0" summary="Récupération du mot de passe">
+ <tr>
+ <th colspan="2">
+ Perte de mot de passe
+ </th>
+ </tr>
+ <tr>
+ <td class="titre">
+ Login :<br />
+ <span class="smaller">"prenom.nom"</span>
+ </td>
+ <td>
+ <input type="text" size="20" maxlength="50" name="login" />
+ </td>
+ </tr>
+ <tr>
+ <td class="titre">
+ Adresse électronique : <span class="smaller">(facultatif)</span>
+ </td>
+ <td>
+ <input type="text" size="20" maxlength="50" name="email" />
+ </td>
+ </tr>
+ <tr>
+ <td class="titre">
+ Date de naissance :
+ </td>
+ <td>
+ <input type="text" size="8" maxlength="8" name="birth" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <span class="smaller">
+ (format JJMMAAAA soit 01032000 pour 1er mars 2000)
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="center">
+ <input type="submit" value="Continuer" name="submit" />
+ </td>
+ </tr>
+ </table>
+</form>
+{/if}
+{/dynamic}
+
+{* vim:set et sw=2 sts=2 sws=2: *}