From: vincent@cubedesigners.com Date: Mon, 22 Jun 2020 12:15:23 +0000 (+0000) Subject: wip #3720 @1 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=7c41d5c7efc2eca6f99979db6cb3f73a4f364c8e;p=cubeextranet.git wip #3720 @1 --- diff --git a/.htaccess b/.htaccess index 800f2c9f8..4d5cfa724 100644 --- a/.htaccess +++ b/.htaccess @@ -90,7 +90,7 @@ AddCharset UTF-8 log RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] - RewriteRule ^([-,_a-zA-Z0-9\./]+)$ index.php/$1 [L] + RewriteRule ^([-,_a-zA-Z0-9\./\%\@]+)$ index.php/$1 [L] diff --git a/inc/commons/DAO/class.common.dao.utilisateur.php b/inc/commons/DAO/class.common.dao.utilisateur.php index 149044bae..3c3086260 100644 --- a/inc/commons/DAO/class.common.dao.utilisateur.php +++ b/inc/commons/DAO/class.common.dao.utilisateur.php @@ -78,6 +78,7 @@ class commonDAOUtilisateur extends commonDAO if (isset($r->tva_intra)) { $utilisateur->tva_intra = $r->tva_intra; } + $utilisateur->reset_password = $r->reset_password; return $utilisateur; } @@ -104,6 +105,7 @@ class commonDAOUtilisateur extends commonDAO $utilisateur->notes = ''; $utilisateur->entreprise = 0; $utilisateur->enabled = 1; + $utilisateur->reset_password = ''; $utilisateur->ws_settings = array('resolution' => 150, 'method' => 0, 'quality' => 85, 'objects' => 1800); return $utilisateur; } @@ -258,7 +260,7 @@ class commonDAOUtilisateur extends commonDAO $c->update('WHERE id=\'' . $this->con->escape($data['utilisateur_id']) . '\''); return $this->selectById($data['utilisateur_id']); } - }catch (Exception $e){ + } catch (Exception $e) { echo $e->getMessage(); } } @@ -295,6 +297,7 @@ class commonDAOUtilisateur extends commonDAO return $c->update('WHERE id=\'' . $this->con->escape($utilisateur_id) . '\''); } + public function changeMotdepasse($utilisateur_id, $nouveau) { $c = $this->con->openCursor('extranet_users.user'); @@ -302,6 +305,24 @@ class commonDAOUtilisateur extends commonDAO return $c->update('WHERE id=\'' . $this->con->escape($utilisateur_id) . '\''); } + public function resetPassword($utilisateur_id) + { + $characters = '0123456789abcdefghijklmnopqrstuvwxyz'; + $charactersLength = strlen($characters); + $randomString = ''; + for ($i = 0; $i < 60; $i++) { + $randomString .= $characters[random_int(0, $charactersLength - 1)]; + } + + $c = $this->con->openCursor('extranet_users.user'); + $c->e1_resetpassword = $randomString; + if ($c->update('WHERE id=\'' . $this->con->escape($utilisateur_id) . '\'')) { + return $randomString; + } else { + return false; + } + } + public function supprime($utilisateur_id) { $ok = $this->con->execute('DELETE FROM e2_u WHERE utilisateur_id=\'' . $this->con->escape($utilisateur_id) . '\''); diff --git a/inc/commons/Metier/class.common.utilisateur.php b/inc/commons/Metier/class.common.utilisateur.php index f14960494..4e8ebf6d8 100644 --- a/inc/commons/Metier/class.common.utilisateur.php +++ b/inc/commons/Metier/class.common.utilisateur.php @@ -35,6 +35,7 @@ class commonUtilisateur extends cubeMetier { protected $ws_password; protected $ca; protected $enabled; + protected $reset_password; public function getEmail() { return trim($this->prenom . ' ' . $this->nom . '<' . $this->email . '>'); diff --git a/inc/commons/class.common.ajax.php b/inc/commons/class.common.ajax.php index d21eb26a7..d36e6490e 100644 --- a/inc/commons/class.common.ajax.php +++ b/inc/commons/class.common.ajax.php @@ -75,7 +75,7 @@ class commonAjax public static function motdepasseOublie($args, &$x) { - self::form('recupMotdepasse', 'Mot de passe oublié ?', commonUrl::motdepasseOublie($args), __('Recevoir mon mot de passe par e-mail')); + self::form('recupMotdepasse', 'Mot de passe oublié ?', commonUrl::motdepasseOublie($args), __('Réinitialiser mon mot de passe')); } public static function mesParametres($args, &$x) @@ -91,32 +91,40 @@ class commonAjax $x->addRedirection(); } + public static function resetPassword($args, &$x) + { + + } + public static function recupMotdepasse($args, &$x) { global $core; $dao = new commonDAOUtilisateur($core->con); $utilisateur = $dao->selectByEmail($_POST['email']); + $okmsg = __('Nous vous avons envoyé un e-mail. Veuillez le consulter pour poursuivre la procédure.'); + if (!is_null($utilisateur) && $utilisateur->enabled) { + + $rand = $dao->resetPassword($utilisateur->utilisateur_id); + $mail = new cubeMail(); $mail->charset = 'UTF-8'; $mail->from = FROM_NAME . '<' . FROM_EMAIL . '>'; $mail->bcc = MAIL_BCC; - $mail->subject = '[' . EMAIL_SUBJECT . '] ' . __('Récupération de vos identifiants'); + $mail->subject = '[' . EMAIL_SUBJECT . '] ' . __('Réinitialisation de votre mot de passe'); $mail->to = $utilisateur->prenom . ' ' . $utilisateur->nom . '<' . $utilisateur->email . '>'; $body = __('Bonjour,') . "\r\n\r\n"; - $body .= ASK_IDENT . "\r\n"; - $body .= __('Voici toutes les informations vous permettant de vous y connecter à nouveau :') . "\r\n\r\n"; - $body .= __('Adresse') . ' : https://' . $_SERVER['HTTP_HOST'] . '/' . "\r\n"; - $body .= __('Identifiant') . ' : ' . $utilisateur->email . "\r\n"; - $body .= __('Mot de passe') . ' : ' . $utilisateur->password . "\r\n\r\n"; + $body .= __('Vous recevez cet email car nous avons reçu une demander de réinitialisation de mot de passe pour votre compte. Veuillez cliquer sur le lien ci-dessous pour poursuivre la procédure : ') . "\r\n"; + $body .= 'https://' . $_SERVER['HTTP_HOST'] . '/resetPassword/' . $utilisateur->email . '/' . $rand . "/\r\n\r\n"; $body .= __('Cordialement,') . "\r\n"; $body .= TEAM_NAME; $mail->body = $body; $ok = $mail->send(); - $message = $ok ? __('Vos identifiants vous ont été envoyé par e-mail') : __("Une erreur s'est produite lors de l'envoi de vos identifiants"); + $message = $ok ? $okmsg : __("Une erreur s'est produite lors de l'envoi de vos identifiants"); } else { - $message = __('Cet e-mail ne correspond à aucun utilisateur du système'); + sleep(2); + $message = $okmsg; } $x->addAlert($message); $x->addClosePopup(); @@ -139,7 +147,7 @@ class commonAjax $x->addOk('actuel'); } - if (strlen($_POST['nouveau']) > 10 || strlen($_POST['nouveau']) < 6 || $_POST['nouveau'] != $_POST['confirmation']) { + if (strlen($_POST['nouveau']) < 8 || $_POST['nouveau'] != $_POST['confirmation']) { $x->addError('nouveau', ''); $x->addError('confirmation', ''); $ok = false; diff --git a/inc/commons/class.common.core.php b/inc/commons/class.common.core.php index 737f41b24..e90ac8f9c 100644 --- a/inc/commons/class.common.core.php +++ b/inc/commons/class.common.core.php @@ -544,7 +544,7 @@ class commonCore extends cubeCore $this->views->createView('e2_u', 'SELECT id AS utilisateur_id, enabled, email, password, e1_ws_password AS ws_password, firstname AS prenom, lastname AS nom, phone AS telephone,e1_mobile AS mobile,e1_fax as fax, locale AS lang, - e1_ws_settings AS ws_settings, e1_settings AS settings, e1_ws_rights AS ws_rights, e1_ws_domains AS ws_domains, e1_login AS login,e1_grade AS grade, + e1_ws_settings AS ws_settings, e1_settings AS settings, e1_ws_rights AS ws_rights, e1_ws_domains AS ws_domains, e1_login AS login,e1_grade AS grade,e1_resetpassword AS reset_password, JSON_UNQUOTE(address->"$.address") AS adresse, JSON_UNQUOTE(address->"$.postcode") AS code_postal, JSON_UNQUOTE(address->"$.country") AS pays, diff --git a/inc/commons/class.common.url.php b/inc/commons/class.common.url.php index 5f2c0615c..11ec43553 100644 --- a/inc/commons/class.common.url.php +++ b/inc/commons/class.common.url.php @@ -10,7 +10,7 @@ class commonUrl // Si l'utilisateur n'est pas connecté, on affiche le formulaire // de login - $bypass = array('stats', 'telecharger', 'telechargerr', 'orpiref'); + $bypass = array('stats', 'telecharger', 'telechargerr', 'orpiref', 'resetPassword'); if ((!isset($args[0]) || !in_array($args[0], $bypass)) && (is_null($core->user) || !$core->user)) { $args = array('login'); @@ -84,6 +84,34 @@ class commonUrl return $res; } + public static function resetPassword($args) + { + global $core; + $dao = new commonDAOUtilisateur($core->con); + $u = $dao->selectByEmail($args[1]); + if (!$u || $u->reset_password != $args[2]) { + http::redirect('/'); + } + + $res = commonPage::barre(); + $res .= commonPage::tMain(); + $res .= commonPage::bh('resetpassword'); + $res .= '
'; + $res .= '
'; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= '
' . __('Réinitialisation de votre mot de passe') . '
' . __('Veuillez choisir un mot de passe contenant au moins 8 caractères') . '
' . __('Votre nouveau mot de passe') . ' : ' . form::password('new_password', 20, 64, '') . '
' . __('Confirmation de votre nouveau mot de passe') . ' : ' . form::password('user_password', 20, 64, '') . '
' . $core->typo->BoutonOK('Réinitialiser le mot de passe') . '
'; + $res .= '
'; + $res .= '
'; + $res .= commonPage::bf(); + $res .= commonPage::bMain(); + return $res; + } + public static function logout($args) { if (isset($_SESSION['user_email'])) { diff --git a/style/common.less b/style/common.less index bbf08f81d..e82a7b389 100644 --- a/style/common.less +++ b/style/common.less @@ -69,10 +69,16 @@ h1 { } .b.login { - width: 325px; + width: 450px; margin: 0 auto; } +.b.resetpassword { + width: 600px; + margin: 0 auto; +} + + .onglet { background: url('onglet.png'); background-position: top left;