diff --git a/ecrire/lang/spip_fr.php3 b/ecrire/lang/spip_fr.php3 index bbec002484969e7b2b0ea2d3bced7e5287b21273..67af8d3c26c3652c3ef096534cec0e36a66173cf 100644 --- a/ecrire/lang/spip_fr.php3 +++ b/ecrire/lang/spip_fr.php3 @@ -615,7 +615,7 @@ Pour retrouver votre accès au site Veuillez vous rendre à l\'adresse suivante : - @adresse_site@/spip_pass.php3?p=@cookie@ + @sendcookie@ Vous pourrez alors entrer un nouveau mot de passe et vous reconnecter au site. diff --git a/formulaires/formulaire_oubli.html b/formulaires/formulaire_oubli.html index 018acdb229091c809549bd3cbf58dab23b912022..512dafc22207d32773bacbccad568425ba324c04 100644 --- a/formulaires/formulaire_oubli.html +++ b/formulaires/formulaire_oubli.html @@ -1,4 +1,3 @@ -<h3 class='spip'><:pass_mot_oublie:></h3> <div class='spip_serif'>[ (#ENV*{message}) ][ diff --git a/spip_pass.php3 b/spip_pass.php3 index 50dd13cac1b55965b5a5574780580c446cc54d90..f36e7898cdbfa2f2daa484cdeac88dd6f960762c 100644 --- a/spip_pass.php3 +++ b/spip_pass.php3 @@ -12,89 +12,87 @@ include ("ecrire/inc_version.php3"); +include_ecrire('inc_minipres'); include_ecrire("inc_session"); # pour creer_uniq_id include_ecrire("inc_mail"); # pour envoyer_mail include_ecrire("inc_acces"); # pour generer_htpass include_local("inc-public-global"); # pour calculer la page -include_ecrire("inc_lang"); include_ecrire("inc_filtres"); # pour email_valide() -include_ecrire('inc_headers'); + utiliser_langue_site(); utiliser_langue_visiteur(); // Ce fichier est celui d'une balise dynamique qui s'ignore. +function spip_pass_passcookie($email, $param) +{ + if (!email_valide($email) ) + return _T('pass_erreur_non_valide', array('email_oubli' => htmlspecialchars($email))); + + $smail = addslashes($email); + $res = spip_query("SELECT statut,pass FROM spip_auteurs WHERE email ='$smail'"); + if (!$row = spip_fetch_array($res)) + return _T('pass_erreur_non_enregistre', array('email_oubli' => htmlspecialchars($email))); + if ($row['statut'] == '5poubelle' OR $row['pass'] == '') + return _T('pass_erreur_acces_refuse'); + + $cookie = creer_uniqid(); + $nom = $GLOBALS['meta']["nom_site"]; + $url = $GLOBALS['meta']["adresse_site"]; + spip_query("UPDATE spip_auteurs SET cookie_oubli = '$cookie' WHERE email ='$smail'"); + + if ( envoyer_mail($email, + ("[$nom] " . _T('pass_oubli_mot')), + _T('pass_mail_passcookie', + array('nom_site_spip' => $nom, + 'adresse_site' => $url, + 'sendcookie' => generer_url_ecrire("$url/spip_pass", "$param=$cookie")))) ) + return _T('pass_recevoir_mail'); + else + return _T('pass_erreur_probleme_technique'); +} + + function formulaire_oubli_dyn($p, $oubli) { $message = ''; -// au 3e appel la variable P est positionnee par le script lui-meme -// et oubli = mot passe. Le choix du nom P est impose par pass_mail_passcookie -if ($p = addslashes($p)) { - $res = spip_query("SELECT * FROM spip_auteurs WHERE cookie_oubli='$p' AND statut<>'5poubelle' AND pass<>''"); +// au 3e appel la variable P est positionnee et oubli = mot passe. +// au 2e appel, P est vide et oubli vaut le mail a qui envoye le cookie +// au 1er appel, P et oubli sont vides + + if (!$p) { + if ($oubli) $message = spip_pass_passcookie($oubli, 'p'); + } else { + $p = addslashes($p); + $res = spip_query("SELECT login FROM spip_auteurs WHERE cookie_oubli='$p' AND statut<>'5poubelle' AND pass<>''"); if (!$row = spip_fetch_array($res)) $message = _T('pass_erreur_code_inconnu'); else { if ($oubli) { $mdpass = md5($oubli); $htpass = generer_htpass($oubli); - spip_query("UPDATE spip_auteurs SET htpass='$htpass', pass='$mdpass', alea_actuel='', - cookie_oubli='' WHERE cookie_oubli='$p'"); + spip_query("UPDATE spip_auteurs SET htpass='$htpass', pass='$mdpass', alea_actuel='', cookie_oubli='' WHERE cookie_oubli='$p'"); $login = $row['login']; $message = "<b>" . _T('pass_nouveau_enregistre') . "</b>". "<p>" . _T('pass_rappel_login', array('login' => $login)); } } - } else { - // si p absent, oubli vaut alors le mail au 2e appel, vide au 1e - if ($oubli) { - if ( email_valide($oubli) ) { - $email = addslashes($oubli); - $res = spip_query("SELECT * FROM spip_auteurs WHERE email ='$email'"); - if ($row = spip_fetch_array($res)) { - if ($row['statut'] == '5poubelle' OR $row['pass'] == '') - $message = _T('pass_erreur_acces_refuse'); - else { - $cookie = creer_uniqid(); - spip_query("UPDATE spip_auteurs SET cookie_oubli = '$cookie' WHERE email ='$email'"); - - if ( envoyer_mail($email, - "[" . $GLOBALS['meta']["nom_site"] .'] ' . _T('pass_oubli_mot'), - _T('pass_mail_passcookie', - array('nom_site_spip' => $GLOBALS['meta']["nom_site"], - 'adresse_site' => $GLOBALS['meta']["adresse_site"], - 'cookie' => $cookie)))) - $message = _T('pass_recevoir_mail'); - else - $message = _T('pass_erreur_probleme_technique'); - } - } - else - $message = _T('pass_erreur_non_enregistre', array('email_oubli' => htmlspecialchars($oubli))); - } else { - $message = _T('pass_erreur_non_valide', array('email_oubli' => htmlspecialchars($oubli))); - } - } } return array('formulaire_oubli', 0, array('p' => $p, 'message' => $message)); } -http_no_cache(); -echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html lang="', - $GLOBALS['spip_lang'], - '" dir="', - ($GLOBALS['spip_lang_rtl'] ? 'rtl' : 'ltr'), - '"> -<head><title>', - _T('pass_mot_oublie'), - '</title> -<link rel="stylesheet" type="text/css" href="spip_style.css" /> -</head><body>'; -inclure_balise_dynamique(formulaire_oubli_dyn($p, $oubli)); -echo "</body></html>"; +function spip_pass_dist() +{ + global $p, $oubli; + install_debut_html( _T('pass_mot_oublie')); + inclure_balise_dynamique(formulaire_oubli_dyn($p, $oubli)); + install_fin_html(); +} + +spip_pass_dist(); + ?>