diff --git a/core/module/config/view/network/network.php b/core/module/config/view/network/network.php
index 0a0b900..a419595 100644
--- a/core/module/config/view/network/network.php
+++ b/core/module/config/view/network/network.php
@@ -4,11 +4,6 @@
-
@@ -40,11 +35,6 @@
-
@@ -97,7 +87,7 @@
'Mot de passe',
'autocomplete' => 'off',
- 'value' => $this->getData(['config', 'smtp', 'password'])
+ 'value' => $this->getData(['config', 'smtp', 'password'])
]); ?>
@@ -112,4 +102,5 @@
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/core/module/user/user.php b/core/module/user/user.php
index 563afa7..f9ac8df 100644
--- a/core/module/user/user.php
+++ b/core/module/user/user.php
@@ -1228,6 +1228,9 @@ class user extends common
}
}
+ /**
+ * Connexion
+ */
public function login()
{
// Soumission du formulaire
@@ -1324,22 +1327,48 @@ class user extends common
* Le site n'est pas en maintenance
* Double authentification en cas de saisie correcte
*/
-
- // Clé d'authenfication utlisée pour lié le compte au cookie au lieu de stocke le hash du mot de passe
+ // Clé d'authenfication utilisée pour lier le compte au cookie au lieu de stocker le hash du mot de passe
$authKey = uniqid('', true) . bin2hex(random_bytes(8));
- if ($this->getData(['config', 'connect', 'mailAuth']) >= $this->getData(['user', $userId, 'group'])) {
- $logStatus = 'Envoi du mail d\'authentification';
- // Redirection vers la page d'authentification
- $authRedirect = 'user/auth/';
- // Stocker la clé envoyée par email
- $this->setData(['user', $userId, 'authKey', rand(100000, 999999)]);
+ // Clé pour la double validation
+ $keyByMail = rand(100000, 999999);
+ // La page d'authentification est vide
+ $authRedirect = '';
+ if (
+ $this->getData(['config', 'connect', 'mailAuth']) > 0
+ && $this->getData(['user', $userId, 'group']) >= $this->getData(['config', 'connect', 'mailAuth'])
+ ) {
+ /**
+ * Envoi d'un email contenant une clé
+ * Stockage de la clé dans le compte de l'utilisateur
+ */
+ $sent = $this->sendMail(
+ $this->getData(['user', $userId, 'mail']),
+ 'Validation de la connexion à votre compte',
+ '
Clé de validation à saisir dans le formulaire de connexion :
' .
+ '
' . $keyByMail . '
',
+ null,
+ $this->getData(['config', 'smtp', 'from'])
+ );
+
+ // L'email a été envoyé avec succès, redirection vers la page de double authentification
+ if ($sent === true) {
+ $logStatus = helper::translate('Envoi du message d\'authentification');
+ // Redirection vers la page d'authentification
+ $authRedirect = 'user/auth/';
+ // Stocker la clé envoyée par email
+ $this->setData(['user', $userId, 'authKey', $keyByMail]);
+ } else {
+ // Impossible d'envoyer le message
+ // Double authentification désactivée
+ $this->setData(['config', 'connect', 'mailAuth', 0]);
+ $this->setData(['user', $userId, 'authKey', $authKey]);
+ // Journalisation
+ $this->saveLog($sent);
+ }
} else {
- $logStatus = 'Connexion réussie';
- // La page d'autentification est vide
- $authRedirect = '';
+ $logStatus = helper::translate('Connexion réussie');
$this->setData(['user', $userId, 'authKey', $authKey]);
-
}
// Validité du cookie
@@ -1381,7 +1410,7 @@ class user extends common
// Sinon notification d'échec
} else {
$notification = helper::translate('Captcha, identifiant ou mot de passe incorrects');
- $logStatus = $captcha === true ? 'Erreur de mot de passe' : 'Erreur de captcha';
+ $logStatus = $captcha === true ? helper::translate('Erreur de mot de passe') : helper::translate('Erreur de captcha');
// Cas 1 le nombre de connexions est inférieur aux tentatives autorisées : incrément compteur d'échec
if ($this->getData(['user', $userId, 'connectFail']) < $this->getData(['config', 'connect', 'attempt'], false)) {
$this->setData(['user', $userId, 'connectFail', $this->getdata(['user', $userId, 'connectFail']) + 1], false);
@@ -1397,7 +1426,7 @@ class user extends common
// Valeurs en sortie
$this->addOutput([
- 'notification' => $notification
+ 'notification' => $notification,
]);
}
}
@@ -1434,9 +1463,11 @@ class user extends common
$targetKey = $this->getData(['user', $this->getUser('id'), 'authKey']);
$inputKey = $this->getInput('userAuthKey', helper::FILTER_INT);
if (
- $targetKey === $inputKey &&
- $this->getData(['user', $this->getUser('id'), 'connectTimeout']) + 3600 >= time()
+ // La clé est valide ou le message n'ayant pas été expédié, la double authentification est désactivée
+ $targetKey === $inputKey || $this->getData(['config', 'connect', 'mailAuth', 0]) === 0
) {
+
+ // Redirection
$pageId = $this->getUrl(2);
// La fiche de l'utilisateur contient la clé d'authentification
$this->setData(['user', $this->getUser('id'), 'authKey', $this->getInput('ZWII_AUTH_KEY')]);
@@ -1470,39 +1501,12 @@ class user extends common
// Valeurs en sortie
$this->addOutput([
- 'redirect' => helper::baseUrl(),
+ 'redirect' => helper::baseUrl() . 'user/auth',
'notification' => helper::translate('La clé est incorrecte'),
'state' => false
]);
}
} else {
- /**
- * Envoi d'un email contenant une clé
- * Stockage de la clé dans le compte de l'utilisateur
- */
- // La clé est envoyée une seule fois
- $sent = false;
- if (
- $this->getData(['user', $this->getUser('id'), 'authKey'])
- && $this->getData(['user', $this->getUser('id'), 'connectTimeout']) === 0
- ) {
- $sent = $this->sendMail(
- $this->getUser('mail'),
- 'Tentative de connexion à votre',
- //'Bonjour
' . $item['prenom'] . ' ' . $item['nom'] . ',
' .
- '
Clé de validation à saisir dans le formulaire :
' .
- '
' . $this->getData(['user', $this->getUser('id'), 'authKey']) . '
',
- null,
- $this->getData(['config', 'smtp', 'from'])
- );
- // Stocker l'envoi de l'email
- $this->setData(['user', $this->getUser('id'), 'connectTimeout', time()]);
- }
-
- // Message envoyé sinon la connexion est réalisée pour ne pas bloquer.
- if ($sent === false) {
-
- }
// Valeurs en sortie
$this->addOutput([
'title' => helper::translate('Double authentification'),
diff --git a/core/module/user/view/auth/auth.php b/core/module/user/view/auth/auth.php
index fb152c7..fdcc801 100644
--- a/core/module/user/view/auth/auth.php
+++ b/core/module/user/view/auth/auth.php
@@ -2,7 +2,7 @@
helper::translate('Clé reçue par couriel')
+ 'label' => helper::translate('Clé envoyée par message')
]); ?>