Compare commits
No commits in common. "dcb1ee360d0dedfcf9346d6248dee64974fbedb9" and "dfdda38b1c8f1a88683f9ba029eafd5d953a47f8" have entirely different histories.
dcb1ee360d
...
dfdda38b1c
@ -529,8 +529,7 @@ class config extends common
|
|||||||
'autoDisconnect' => $this->getInput('connectAutoDisconnect', helper::FILTER_BOOLEAN),
|
'autoDisconnect' => $this->getInput('connectAutoDisconnect', helper::FILTER_BOOLEAN),
|
||||||
'captchaType' => $this->getInput('connectCaptchaType'),
|
'captchaType' => $this->getInput('connectCaptchaType'),
|
||||||
'showPassword' => $this->getInput('connectShowPassword', helper::FILTER_BOOLEAN),
|
'showPassword' => $this->getInput('connectShowPassword', helper::FILTER_BOOLEAN),
|
||||||
'redirectLogin' => $this->getInput('connectRedirectLogin', helper::FILTER_BOOLEAN),
|
'redirectLogin' => $this->getInput('connectRedirectLogin', helper::FILTER_BOOLEAN)
|
||||||
'mailAuth' => $this->getInput('connectAuthMail', helper::FILTER_BOOLEAN),
|
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
|
@ -3,7 +3,13 @@
|
|||||||
<div class="col12">
|
<div class="col12">
|
||||||
<div class="block">
|
<div class="block">
|
||||||
<h4><?php echo helper::translate('Sécurité de la connexion'); ?>
|
<h4><?php echo helper::translate('Sécurité de la connexion'); ?>
|
||||||
|
<!--<span id="specialeHelpButton" class="helpDisplayButton">
|
||||||
|
<a href="https://doc.zwiicms.fr/connexion" target="_blank" title="Cliquer pour consulter l'aide en ligne">
|
||||||
|
<?php // echo template::ico('help', ['margin' => 'left']); ?>
|
||||||
|
</a>
|
||||||
|
</span>-->
|
||||||
</h4>
|
</h4>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col4">
|
<div class="col4">
|
||||||
<?php echo template::checkbox('connectShowPassword', true, 'Dévoiler le mot de passe', [
|
<?php echo template::checkbox('connectShowPassword', true, 'Dévoiler le mot de passe', [
|
||||||
@ -25,35 +31,44 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col4">
|
<div class="col3">
|
||||||
<?php echo template::select('connectAttempt', $module::$connectAttempt, [
|
<?php echo template::select('connectAttempt', $module::$connectAttempt, [
|
||||||
'label' => 'Limitation des tentatives',
|
'label' => 'Limitation des tentatives',
|
||||||
'selected' => $this->getData(['config', 'connect', 'attempt'])
|
'selected' => $this->getData(['config', 'connect', 'attempt'])
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col4">
|
<div class="col3">
|
||||||
<?php echo template::select('connectTimeout', $module::$connectTimeout, [
|
<?php echo template::select('connectTimeout', $module::$connectTimeout, [
|
||||||
'label' => 'Blocage après échecs',
|
'label' => 'Blocage après échecs',
|
||||||
'selected' => $this->getData(['config', 'connect', 'timeout'])
|
'selected' => $this->getData(['config', 'connect', 'timeout'])
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col4">
|
<div class="col3 verticalAlignBottom">
|
||||||
<?php echo template::select('connectAuthMail', array_merge([''=>'Aucune'], self::$groupNews), [
|
<label id="helpBlacklist"><?php echo helper::translate('Liste noire'); ?>
|
||||||
'label' => 'Validation par messagerie',
|
<?php echo template::help(
|
||||||
'selected' => $this->getData(['config', 'connect', 'mailAuth']),
|
'La liste noire énumère les tentatives de connexion à partir de comptes inexistants. Sont stockés : la date, l\'heure, le nom du compte et l\'IP.
|
||||||
'help' => 'La connexion est confirmée par une clé adressée par messagerie. Depuis le groupe sélectionnée et les groupes supérieurs.' ]); ?>
|
Après le nombre de tentatives autorisées, l\'IP et le compte sont bloqués.'
|
||||||
|
);
|
||||||
|
?>
|
||||||
|
</label>
|
||||||
|
<?php echo template::button('ConnectBlackListDownload', [
|
||||||
|
'href' => helper::baseUrl() . 'config/blacklistDownload',
|
||||||
|
'value' => 'Télécharger la liste',
|
||||||
|
'ico' => 'download'
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col3 verticalAlignBottom">
|
||||||
|
<?php echo template::button('CnnectBlackListReset', [
|
||||||
|
'class' => 'buttonRed',
|
||||||
|
'href' => helper::baseUrl() . 'config/blacklistReset',
|
||||||
|
'value' => 'Réinitialiser la liste',
|
||||||
|
'ico' => 'trash'
|
||||||
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col12">
|
|
||||||
<div class="block">
|
|
||||||
<h4><?php echo helper::translate('Captcha à la connexion'); ?>
|
|
||||||
</h4>
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col3">
|
<div class="col3">
|
||||||
<?php echo template::checkbox('connectCaptcha', true, 'Activer', [
|
<?php echo template::checkbox('connectCaptcha', true, 'Captcha à la connexion', [
|
||||||
'checked' => $this->getData(['config', 'connect', 'captcha'])
|
'checked' => $this->getData(['config', 'connect', 'captcha'])
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
@ -77,66 +92,40 @@
|
|||||||
<div class="col12">
|
<div class="col12">
|
||||||
<div class="block">
|
<div class="block">
|
||||||
<h4><?php echo helper::translate('Journalisation'); ?>
|
<h4><?php echo helper::translate('Journalisation'); ?>
|
||||||
|
<!--<span id="specialeHelpButton" class="helpDisplayButton">
|
||||||
|
<a href="https://doc.zwiicms.fr/journalisation" target="_blank" title="Cliquer pour consulter l'aide en ligne">
|
||||||
|
<?php // echo template::ico('help', ['margin' => 'left']); ?>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
-->
|
||||||
</h4>
|
</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col6">
|
<div class="col3">
|
||||||
<div class="row">
|
<?php echo template::checkbox('connectLog', true, 'Activer la journalisation', [
|
||||||
<div class="col6">
|
'checked' => $this->getData(['config', 'connect', 'log'])
|
||||||
<?php echo template::checkbox('connectLog', true, 'Activer la journalisation', [
|
]); ?>
|
||||||
'checked' => $this->getData(['config', 'connect', 'log'])
|
|
||||||
]); ?>
|
|
||||||
</div>
|
|
||||||
<div class="col6">
|
|
||||||
<?php echo template::select('connectAnonymousIp', $module::$anonIP, [
|
|
||||||
'label' => 'Anonymat des adresses IP',
|
|
||||||
'selected' => $this->getData(['config', 'connect', 'anonymousIp']),
|
|
||||||
'help' => 'La règlementation française impose un anonymat de niveau 2'
|
|
||||||
]); ?>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col6 ">
|
|
||||||
<?php echo template::button('ConfigLogDownload', [
|
|
||||||
'href' => helper::baseUrl() . 'config/logDownload',
|
|
||||||
'value' => 'Télécharger le journal',
|
|
||||||
'ico' => 'download'
|
|
||||||
]); ?>
|
|
||||||
</div>
|
|
||||||
<div class="col6">
|
|
||||||
<?php echo template::button('ConnectLogReset', [
|
|
||||||
'class' => 'buttonRed',
|
|
||||||
'href' => helper::baseUrl() . 'config/logReset',
|
|
||||||
'value' => 'Réinitialiser le journal',
|
|
||||||
'ico' => 'trash'
|
|
||||||
]); ?>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col6 verticalAlignBottom">
|
<div class="col3">
|
||||||
<div class="row">
|
<?php echo template::select('connectAnonymousIp', $module::$anonIP, [
|
||||||
<div class="col6 verticalAlignBottom">
|
'label' => 'Anonymat des adresses IP',
|
||||||
<label id="helpBlacklist"><?php echo helper::translate('Liste noire'); ?>
|
'selected' => $this->getData(['config', 'connect', 'anonymousIp']),
|
||||||
<?php echo template::help(
|
'help' => 'La règlementation française impose un anonymat de niveau 2'
|
||||||
'La liste noire énumère les tentatives de connexion à partir de comptes inexistants. Sont stockés : la date, l\'heure, le nom du compte et l\'IP.
|
]); ?>
|
||||||
Après le nombre de tentatives autorisées, l\'IP et le compte sont bloqués.'
|
</div>
|
||||||
);
|
<div class="col3 verticalAlignBottom">
|
||||||
?>
|
<?php echo template::button('ConfigLogDownload', [
|
||||||
</label>
|
'href' => helper::baseUrl() . 'config/logDownload',
|
||||||
<?php echo template::button('ConnectBlackListDownload', [
|
'value' => 'Télécharger le journal',
|
||||||
'href' => helper::baseUrl() . 'config/blacklistDownload',
|
'ico' => 'download'
|
||||||
'value' => 'Télécharger la liste',
|
]); ?>
|
||||||
'ico' => 'download'
|
</div>
|
||||||
]); ?>
|
<div class="col3 verticalAlignBottom">
|
||||||
</div>
|
<?php echo template::button('ConnectLogReset', [
|
||||||
<div class="col6 verticalAlignBottom">
|
'class' => 'buttonRed',
|
||||||
<?php echo template::button('CnnectBlackListReset', [
|
'href' => helper::baseUrl() . 'config/logReset',
|
||||||
'class' => 'buttonRed',
|
'value' => 'Réinitialiser le journal',
|
||||||
'href' => helper::baseUrl() . 'config/blacklistReset',
|
'ico' => 'trash'
|
||||||
'value' => 'Réinitialiser la liste',
|
]); ?>
|
||||||
'ico' => 'trash'
|
|
||||||
]); ?>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -27,7 +27,6 @@ class user extends common
|
|||||||
'logout' => self::GROUP_MEMBER,
|
'logout' => self::GROUP_MEMBER,
|
||||||
'forgot' => self::GROUP_VISITOR,
|
'forgot' => self::GROUP_VISITOR,
|
||||||
'login' => self::GROUP_VISITOR,
|
'login' => self::GROUP_VISITOR,
|
||||||
'auth' => self::GROUP_VISITOR,
|
|
||||||
'reset' => self::GROUP_VISITOR,
|
'reset' => self::GROUP_VISITOR,
|
||||||
'profil' => self::GROUP_ADMIN,
|
'profil' => self::GROUP_ADMIN,
|
||||||
'profilEdit' => self::GROUP_ADMIN,
|
'profilEdit' => self::GROUP_ADMIN,
|
||||||
@ -1228,6 +1227,9 @@ class user extends common
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connexion
|
||||||
|
*/
|
||||||
public function login()
|
public function login()
|
||||||
{
|
{
|
||||||
// Soumission du formulaire
|
// Soumission du formulaire
|
||||||
@ -1260,7 +1262,7 @@ class user extends common
|
|||||||
'lastFail' => time(),
|
'lastFail' => time(),
|
||||||
'ip' => helper::getIp()
|
'ip' => helper::getIp()
|
||||||
]
|
]
|
||||||
]);
|
], false);
|
||||||
// Verrouillage des IP
|
// Verrouillage des IP
|
||||||
$ipBlackList = helper::arrayColumn($this->getData(['blacklist']), 'ip');
|
$ipBlackList = helper::arrayColumn($this->getData(['blacklist']), 'ip');
|
||||||
if (
|
if (
|
||||||
@ -1301,14 +1303,37 @@ class user extends common
|
|||||||
and $this->getData(['user', $userId, 'group']) >= self::GROUP_MEMBER
|
and $this->getData(['user', $userId, 'group']) >= self::GROUP_MEMBER
|
||||||
and $captcha === true
|
and $captcha === true
|
||||||
) {
|
) {
|
||||||
|
// RAZ
|
||||||
// RAZ des compteurs de blocage
|
|
||||||
$this->setData(['user', $userId, 'connectFail', 0], false);
|
$this->setData(['user', $userId, 'connectFail', 0], false);
|
||||||
$this->setData(['user', $userId, 'connectTimeout', 0], false);
|
$this->setData(['user', $userId, 'connectTimeout', 0], false);
|
||||||
|
|
||||||
|
// Clé d'authenfication
|
||||||
|
$authKey = uniqid('', true) . bin2hex(random_bytes(8));
|
||||||
|
$this->setData(['user', $userId, 'authKey', $authKey], false);
|
||||||
|
|
||||||
|
// Validité du cookie
|
||||||
|
$expire = $this->getInput('userLoginLongTime', helper::FILTER_BOOLEAN) === true ? strtotime("+1 year") : 0;
|
||||||
|
switch ($this->getInput('userLoginLongTime', helper::FILTER_BOOLEAN)) {
|
||||||
|
case false:
|
||||||
|
// Cookie de session
|
||||||
|
setcookie('ZWII_USER_ID', $userId, $expire, helper::baseUrl(false, false), '', helper::isHttps(), true);
|
||||||
|
//setcookie('ZWII_USER_PASSWORD', $this->getData(['user', $userId, 'password']), $expire, helper::baseUrl(false, false), '', helper::isHttps(), true);
|
||||||
|
|
||||||
|
// Connexion par clé
|
||||||
|
setcookie('ZWII_AUTH_KEY', $authKey, $expire, helper::baseUrl(false, false), '', helper::isHttps(), true);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Cookie persistant
|
||||||
|
setcookie('ZWII_USER_ID', $userId, $expire, helper::baseUrl(false, false));
|
||||||
|
//setcookie('ZWII_USER_PASSWORD', $this->getData(['user', $userId, 'password']), $expire, helper::baseUrl(false, false));
|
||||||
|
|
||||||
|
// Connexion par clé
|
||||||
|
setcookie('ZWII_AUTH_KEY', $authKey, $expire, helper::baseUrl(false, false));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// Accès multiples avec le même compte
|
// Accès multiples avec le même compte
|
||||||
$this->setData(['user', $userId, 'accessCsrf', $_SESSION['csrf']], false);
|
$this->setData(['user', $userId, 'accessCsrf', $_SESSION['csrf']], false);
|
||||||
|
|
||||||
// Valeurs en sortie lorsque le site est en maintenance et que l'utilisateur n'est pas administrateur
|
// Valeurs en sortie lorsque le site est en maintenance et que l'utilisateur n'est pas administrateur
|
||||||
if (
|
if (
|
||||||
$this->getData(['config', 'maintenance'])
|
$this->getData(['config', 'maintenance'])
|
||||||
@ -1320,49 +1345,7 @@ class user extends common
|
|||||||
'state' => false
|
'state' => false
|
||||||
]);
|
]);
|
||||||
} else {
|
} else {
|
||||||
/**
|
$logStatus = 'Connexion réussie';
|
||||||
* 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
|
|
||||||
$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)]);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
$logStatus = 'Connexion réussie';
|
|
||||||
// La page d'autentification est vide
|
|
||||||
$authRedirect = '';
|
|
||||||
$this->setData(['user', $userId, 'authKey', $authKey]);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Validité du cookie
|
|
||||||
$expire = $this->getInput('userLoginLongTime', helper::FILTER_BOOLEAN) === true ? strtotime("+1 year") : 0;
|
|
||||||
switch ($this->getInput('userLoginLongTime', helper::FILTER_BOOLEAN)) {
|
|
||||||
case false:
|
|
||||||
// Cookie de session
|
|
||||||
setcookie('ZWII_USER_ID', $userId, $expire, helper::baseUrl(false, false), '', helper::isHttps(), true);
|
|
||||||
//setcookie('ZWII_USER_PASSWORD', $this->getData(['user', $userId, 'password']), $expire, helper::baseUrl(false, false), '', helper::isHttps(), true);
|
|
||||||
|
|
||||||
// Connexion par clé
|
|
||||||
setcookie('ZWII_AUTH_KEY', $authKey, $expire, helper::baseUrl(false, false), '', helper::isHttps(), true);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
// Cookie persistant
|
|
||||||
setcookie('ZWII_USER_ID', $userId, $expire, helper::baseUrl(false, false));
|
|
||||||
//setcookie('ZWII_USER_PASSWORD', $this->getData(['user', $userId, 'password']), $expire, helper::baseUrl(false, false));
|
|
||||||
|
|
||||||
// Connexion par clé
|
|
||||||
setcookie('ZWII_AUTH_KEY', $authKey, $expire, helper::baseUrl(false, false));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
$pageId = $this->getUrl(2);
|
$pageId = $this->getUrl(2);
|
||||||
if (
|
if (
|
||||||
$this->getData(['config', 'page404']) === $pageId
|
$this->getData(['config', 'page404']) === $pageId
|
||||||
@ -1370,7 +1353,7 @@ class user extends common
|
|||||||
) {
|
) {
|
||||||
$pageId = '';
|
$pageId = '';
|
||||||
}
|
}
|
||||||
$redirect = ($pageId && strpos($pageId, 'user_reset') !== 0) ? helper::baseUrl() . $authRedirect . str_replace('_', '/', str_replace('__', '#', $pageId)) : helper::baseUrl() . $authRedirect;
|
$redirect = ($pageId && strpos($pageId, 'user_reset') !== 0) ? helper::baseUrl() . str_replace('_', '/', str_replace('__', '#', $pageId)) : helper::baseUrl();
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'notification' => sprintf(helper::translate('Bienvenue %s %s'), $this->getData(['user', $userId, 'firstname']), $this->getData(['user', $userId, 'lastname'])),
|
'notification' => sprintf(helper::translate('Bienvenue %s %s'), $this->getData(['user', $userId, 'firstname']), $this->getData(['user', $userId, 'lastname'])),
|
||||||
@ -1383,7 +1366,7 @@ class user extends common
|
|||||||
$notification = helper::translate('Captcha, identifiant ou mot de passe incorrects');
|
$notification = helper::translate('Captcha, identifiant ou mot de passe incorrects');
|
||||||
$logStatus = $captcha === true ? 'Erreur de mot de passe' : 'Erreur de captcha';
|
$logStatus = $captcha === true ? 'Erreur de mot de passe' : 'Erreur de captcha';
|
||||||
// Cas 1 le nombre de connexions est inférieur aux tentatives autorisées : incrément compteur d'échec
|
// 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)) {
|
if ($this->getData(['user', $userId, 'connectFail']) < $this->getData(['config', 'connect', 'attempt'])) {
|
||||||
$this->setData(['user', $userId, 'connectFail', $this->getdata(['user', $userId, 'connectFail']) + 1], false);
|
$this->setData(['user', $userId, 'connectFail', $this->getdata(['user', $userId, 'connectFail']) + 1], false);
|
||||||
}
|
}
|
||||||
// Cas 2 la limite du nombre de connexion est atteinte : placer le timer
|
// Cas 2 la limite du nombre de connexion est atteinte : placer le timer
|
||||||
@ -1401,9 +1384,10 @@ class user extends common
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Force la sauvegarde
|
// Sauvegarde la base manuellement
|
||||||
$this->saveDB('user');
|
$this->saveDB(module: 'user');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Journalisation
|
// Journalisation
|
||||||
$this->saveLog($logStatus);
|
$this->saveLog($logStatus);
|
||||||
|
|
||||||
@ -1419,108 +1403,16 @@ class user extends common
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Validation de la connexion par email
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function auth()
|
|
||||||
{
|
|
||||||
// Soumission du formulaire
|
|
||||||
if (
|
|
||||||
$this->isPost()
|
|
||||||
) {
|
|
||||||
// Vérifier la clé saisie
|
|
||||||
$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()
|
|
||||||
) {
|
|
||||||
$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')]);
|
|
||||||
$redirect = ($pageId && strpos($pageId, 'user_reset') !== 0) ? helper::baseUrl() . str_replace('_', '/', str_replace('__', '#', $pageId)) : helper::baseUrl();
|
|
||||||
// Journalisation
|
|
||||||
$this->saveLog('Connexion réussie');
|
|
||||||
// Réinitialiser le compteur de temps
|
|
||||||
$this->setData(['user', $this->getUser('id'), 'connectTimeout', 0]);
|
|
||||||
// Valeurs en sortie
|
|
||||||
$this->addOutput([
|
|
||||||
'redirect' => $redirect,
|
|
||||||
'notification' => helper::translate('Connexion réussie'),
|
|
||||||
'state' => true
|
|
||||||
]);
|
|
||||||
} else {
|
|
||||||
|
|
||||||
// Supprime la clé stockée et le temps limite
|
|
||||||
$this->deleteData(['user', $this->getUser('id'), 'authKey']);
|
|
||||||
// Réinitialiser le compteur de temps
|
|
||||||
$this->setData(['user', $this->getUser('id'), 'connectTimeout', 0]);
|
|
||||||
|
|
||||||
// Détruit les cookies d'authenfication
|
|
||||||
helper::deleteCookie('ZWII_USER_ID');
|
|
||||||
helper::deleteCookie('ZWII_AUTH_KEY');
|
|
||||||
|
|
||||||
// Détruit la session
|
|
||||||
session_destroy();
|
|
||||||
|
|
||||||
// Journalisation
|
|
||||||
$this->saveLog('Erreur de vérification de la clé envoyée par email ' . $this->getUser('id'));
|
|
||||||
|
|
||||||
// Valeurs en sortie
|
|
||||||
$this->addOutput([
|
|
||||||
'redirect' => helper::baseUrl(),
|
|
||||||
'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 <strong>' . $item['prenom'] . ' ' . $item['nom'] . '</strong>,<br><br>' .
|
|
||||||
'<p>Clé de validation à saisir dans le formulaire :</p>' .
|
|
||||||
'<h1><center>' . $this->getData(['user', $this->getUser('id'), 'authKey']) . '</center></h1>',
|
|
||||||
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'),
|
|
||||||
'view' => 'auth',
|
|
||||||
'display' => self::DISPLAY_LAYOUT_LIGHT,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Déconnexion
|
* Déconnexion
|
||||||
*/
|
*/
|
||||||
public function logout()
|
public function logout()
|
||||||
{
|
{
|
||||||
// Détruit les cookies d'authenfication
|
|
||||||
helper::deleteCookie('ZWII_USER_ID');
|
helper::deleteCookie('ZWII_USER_ID');
|
||||||
|
//helper::deleteCookie('ZWII_USER_PASSWORD');
|
||||||
helper::deleteCookie('ZWII_AUTH_KEY');
|
helper::deleteCookie('ZWII_AUTH_KEY');
|
||||||
|
|
||||||
// Détruit la session
|
// Détruit la session
|
||||||
session_destroy();
|
session_destroy();
|
||||||
|
|
||||||
|
@ -1,36 +0,0 @@
|
|||||||
/**
|
|
||||||
* This file is part of Zwii.
|
|
||||||
*
|
|
||||||
* For full copyright and license information, please see the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*
|
|
||||||
* @author Rémi Jean <remi.jean@outlook.com>
|
|
||||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
|
||||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
|
||||||
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
|
||||||
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
|
||||||
* @link http://zwiicms.fr/
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @import url("site/data/admin.css"); */
|
|
||||||
|
|
||||||
/** NE PAS EFFACER
|
|
||||||
* admin.css
|
|
||||||
*/
|
|
||||||
|
|
||||||
@media screen and (max-width: 768px) {
|
|
||||||
#buttonsContainer {
|
|
||||||
display: grid;
|
|
||||||
}
|
|
||||||
#loginContainer {
|
|
||||||
order: 1;
|
|
||||||
}
|
|
||||||
#backContainer{
|
|
||||||
order: 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#userAuthKey {
|
|
||||||
text-align: center;
|
|
||||||
font-size: 1.3rem;
|
|
||||||
}
|
|
@ -1,23 +0,0 @@
|
|||||||
<?php echo template::formOpen('userAuthForm'); ?>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col6 offset3">
|
|
||||||
<?php echo template::text('userAuthKey', [
|
|
||||||
'label' => helper::translate('Clé reçue par couriel')
|
|
||||||
]); ?>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row" id="buttonsContainer">
|
|
||||||
<div class="col2" id="backContainer">
|
|
||||||
<?php echo template::button('userAuthBack', [
|
|
||||||
'href' => $this->getUrl(2) ? helper::baseUrl() . ' user/login' . str_replace('_', '/', str_replace('__', '#', $this->getUrl(2))) : helper::baseUrl() . ' user/login',
|
|
||||||
'value' => template::ico('left')
|
|
||||||
]); ?>
|
|
||||||
</div>
|
|
||||||
<div class="col3 offset7" id="loginContainer">
|
|
||||||
<?php echo template::submit('userLoginSubmit', [
|
|
||||||
'value' => helper::translate('Authentification'),
|
|
||||||
'ico' => ''
|
|
||||||
]); ?>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<?php echo template::formClose(); ?>
|
|
Loading…
Reference in New Issue
Block a user