From 2ab57c6c21e6bfff264d51d3d490855d738140b1 Mon Sep 17 00:00:00 2001 From: Pierre Date: Mon, 30 Mar 2020 23:30:22 +0200 Subject: [PATCH] =?UTF-8?q?pas=20besoin=20d'avoir=20un=20mot=20de=20passe?= =?UTF-8?q?=20pour=20red=C3=A9finir=20son=20mot=20de=20passe=20sur=20mot?= =?UTF-8?q?=5Fde=5Fpasse.php=20L30?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- formulaires/mot_de_passe.php | 173 +++++++++++++++++++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 formulaires/mot_de_passe.php diff --git a/formulaires/mot_de_passe.php b/formulaires/mot_de_passe.php new file mode 100644 index 0000000..ff5048c --- /dev/null +++ b/formulaires/mot_de_passe.php @@ -0,0 +1,173 @@ +'5poubelle'", "pass<>''") + ); + } elseif ($jeton) { + include_spip('action/inscrire_auteur'); + if ($auteur = auteur_verifier_jeton($jeton) + and $auteur['statut'] <> '5poubelle' + ) { + return $auteur; + } + } + + return false; +} + +// chargement des valeurs par defaut des champs du formulaire +/** + * Chargement de l'auteur qui peut changer son mot de passe. + * Soit un cookie d'oubli fourni par #FORMULAIRE_OUBLI est passe dans l'url par &p= + * Soit un id_auteur est passe en parametre #FORMULAIRE_MOT_DE_PASSE{#ID_AUTEUR} + * Dans les deux cas on verifie que l'auteur est autorise + * + * @param int $id_auteur + * @return array + */ +function formulaires_mot_de_passe_charger_dist($id_auteur = null, $jeton = null) { + + $valeurs = array(); + // compatibilite anciens appels du formulaire + if (is_null($jeton)) { + $jeton = _request('p'); + } + $auteur = retrouve_auteur($id_auteur, $jeton); + + if ($auteur) { + $valeurs['id_auteur'] = $id_auteur; // a toutes fins utiles pour le formulaire + if ($jeton) { + $valeurs['_hidden'] = ''; + } + } else { + $valeurs['_hidden'] = _T('pass_erreur_code_inconnu'); + $valeurs['editable'] = false; // pas de saisie + } + $valeurs['oubli'] = ''; + // le champ login n'est pas utilise, mais il est destine aux navigateurs smarts + // qui veulent remplir le formulaire avec login/mot de passe + // et qui sinon remplissent le champ nobot (autocomplete=off n'est pas une option, certains navigateurs l'ignorant) + $valeurs['login'] = ''; + $valeurs['nobot'] = ''; + + return $valeurs; +} + +/** + * Verification de la saisie du mot de passe. + * On verifie qu'un mot de passe est saisi, et que sa longuer est suffisante + * Ce serait le lieu pour verifier sa qualite (caracteres speciaux ...) + * + * @param int $id_auteur + */ +function formulaires_mot_de_passe_verifier_dist($id_auteur = null, $jeton = null) { + $erreurs = array(); + if (!_request('oubli')) { + $erreurs['oubli'] = _T('info_obligatoire'); + } else { + if (strlen($p = _request('oubli')) < _PASS_LONGUEUR_MINI) { + $erreurs['oubli'] = _T('info_passe_trop_court_car_pluriel', array('nb' => _PASS_LONGUEUR_MINI)); + } else { + if (!is_null($c = _request('oubli_confirm'))) { + if (!$c) { + $erreurs['oubli_confirm'] = _T('info_obligatoire'); + } elseif ($c !== $p) { + $erreurs['oubli'] = _T('info_passes_identiques'); + } + } + } + } + if (isset($erreurs['oubli'])) { + set_request('oubli'); + set_request('oubli_confirm'); + } + + if (_request('nobot')) { + $erreurs['message_erreur'] = _T('pass_rien_a_faire_ici'); + } + // precaution + if (_request('login')) { + set_request('login'); + } + + return $erreurs; +} + +/** + * Modification du mot de passe d'un auteur. + * Utilise le cookie d'oubli fourni en url ou l'argument du formulaire pour identifier l'auteur + * + * @param int $id_auteur + */ +function formulaires_mot_de_passe_traiter_dist($id_auteur = null, $jeton = null) { + $res = array('message_ok' => ''); + refuser_traiter_formulaire_ajax(); // puisqu'on va loger l'auteur a la volee (c'est bonus) + + // compatibilite anciens appels du formulaire + if (is_null($jeton)) { + $jeton = _request('p'); + } + $row = retrouve_auteur($id_auteur, $jeton); + + if ($row + && ($id_auteur = $row['id_auteur']) + && ($oubli = _request('oubli')) + ) { + include_spip('action/editer_auteur'); + include_spip('action/inscrire_auteur'); + if ($err = auteur_modifier($id_auteur, array('pass' => $oubli))) { + $res = array('message_erreur' => $err); + } else { + auteur_effacer_jeton($id_auteur); + + // Par défaut, on rappelle de s'identifier avec son email s'il existe + // et qu'il n'est PAS utilisé par quelqu'un d'autre + if ( + $row['email'] + and !sql_fetsel( + 'id_auteur', + 'spip_auteurs', + array( + '(email='.sql_quote($row['email']).' or login='.sql_quote($row['email']).')', + 'id_auteur != '.$id_auteur + ), + '', '', '0,1' + ) + ) { + $identifiant = $row['email']; + } + // Sinon on dit d'utiliser le login + else { + $identifiant = $row['login']; + } + $res['message_ok'] = '' . _T('pass_nouveau_enregistre') . '' . + '
' . _T('pass_rappel_login', array('login' => $identifiant)); + + include_spip('inc/auth'); + $row = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)); + auth_loger($row); + } + } + + return $res; +}