merge 10313

This commit is contained in:
fredtempez 2020-12-30 17:41:27 +01:00
parent 8e64e6637e
commit aaf0e1c459
4 changed files with 41 additions and 15 deletions

9
.gitignore vendored
View File

@ -38,3 +38,12 @@ site/data/journal.log
.DS_Store .DS_Store
site/.DS_Store site/.DS_Store
site/file/.DS_Store site/file/.DS_Store
site/data/es/locale.json
site/data/es/module.json
site/data/es/page.json
site/data/en/locale.json
site/data/en/module.json
site/data/en/page.json
site/data/de/locale.json
site/data/de/module.json
site/data/de/page.json

View File

@ -25,6 +25,7 @@ Modifications :
- Message d'erreur littéral. - Message d'erreur littéral.
- Sauvegarde des fichiers de données après un effacement et une écriture. - Sauvegarde des fichiers de données après un effacement et une écriture.
- Google Analytics, option d'anonymisation. - Google Analytics, option d'anonymisation.
- Procédure de connexion : les erreurs de captcha sont comptabilisées comme des échecs, allégement des messages d'information.
Correction : Correction :
- Notification de commentaire, nom de la page incorrect. - Notification de commentaire, nom de la page incorrect.

View File

@ -83,6 +83,7 @@ class common {
public static $inputBefore = []; public static $inputBefore = [];
public static $inputNotices = []; public static $inputNotices = [];
public static $importNotices = []; public static $importNotices = [];
public static $captchaNotices = [];
public static $coreNotices = []; public static $coreNotices = [];
public $output = [ public $output = [
'access' => true, 'access' => true,
@ -2833,10 +2834,6 @@ class layout extends common {
foreach (common::$coreNotices as $item) $notification .= $item . ' | '; foreach (common::$coreNotices as $item) $notification .= $item . ' | ';
$notificationClass = 'notificationError'; $notificationClass = 'notificationError';
} }
if(common::$inputNotices) {
$notification = 'Impossible de soumettre le formulaire, car il contient des erreurs';
$notificationClass = 'notificationError';
}
elseif(empty($_SESSION['ZWII_NOTIFICATION_SUCCESS']) === false) { elseif(empty($_SESSION['ZWII_NOTIFICATION_SUCCESS']) === false) {
$notification = $_SESSION['ZWII_NOTIFICATION_SUCCESS']; $notification = $_SESSION['ZWII_NOTIFICATION_SUCCESS'];
$notificationClass = 'notificationSuccess'; $notificationClass = 'notificationSuccess';

View File

@ -366,15 +366,32 @@ class user extends common {
public function login() { public function login() {
// Soumission du formulaire // Soumission du formulaire
if($this->isPost()) { if($this->isPost()) {
// Check la captcha // Lire Id du compte
$userId = $this->getInput('userLoginId', helper::FILTER_ID, true);
// Check le captcha
if( if(
$this->getData(['config','connect','captcha']) $this->getData(['config','connect','captcha'])
AND password_verify($this->getInput('userLoginCaptcha', helper::FILTER_INT), $this->getInput('userLoginCaptchaResult') ) === false ) AND password_verify($this->getInput('userLoginCaptcha', helper::FILTER_INT), $this->getInput('userLoginCaptchaResult') ) === false )
{ {
self::$inputNotices['userLoginCaptcha'] = 'Incorrect'; //self::$inputNotices['userLoginCaptcha'] = 'Incorrect';
$notification = 'Captcha incorrect !';
// 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'])) {
$this->setData(['user',$userId,'connectFail',$this->getdata(['user',$userId,'connectFail']) + 1 ]);
}
// Cas 2 la limite du nombre de connexion est atteinte : placer le timer
if ( $this->getdata(['user',$userId,'connectFail']) == $this->getData(['config', 'connect', 'attempt']) ) {
$this->setData(['user',$userId,'connectTimeout', time()]);
}
// Cas 3 le délai de bloquage court
if ($this->getData(['user',$userId,'connectTimeout']) + $this->getData(['config', 'connect', 'timeout']) > time() ) {
$notification = 'Accès bloqué ' . ($this->getData(['config', 'connect', 'timeout']) / 60) . ' minutes.';
}
// Valeurs en sortie
$this->addOutput([
'notification' => $notification
]);
} else { } else {
// Lire Id du compte
$userId = $this->getInput('userLoginId', helper::FILTER_ID, true);
/** /**
* Aucun compte existant * Aucun compte existant
*/ */
@ -395,14 +412,14 @@ class user extends common {
AND in_array($this->getData(['blacklist',$userId,'ip']),$ipBlackList) ) { AND in_array($this->getData(['blacklist',$userId,'ip']),$ipBlackList) ) {
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'notification' => 'Trop de tentatives, compte verrouillé', 'notification' => 'Compte verrouillé',
'redirect' => helper::baseUrl(), 'redirect' => helper::baseUrl(),
'state' => false 'state' => false
]); ]);
} else { } else {
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'notification' => 'Identifiant ou mot de passe incorrect' 'notification' => 'Identifiant ou mot de passe incorrects'
]); ]);
} }
/** /**
@ -423,6 +440,9 @@ class user extends common {
AND password_verify($this->getInput('userLoginPassword', helper::FILTER_STRING_SHORT, true), $this->getData(['user', $userId, 'password'])) AND password_verify($this->getInput('userLoginPassword', helper::FILTER_STRING_SHORT, true), $this->getData(['user', $userId, 'password']))
AND $this->getData(['user', $userId, 'group']) >= self::GROUP_MEMBER AND $this->getData(['user', $userId, 'group']) >= self::GROUP_MEMBER
) { ) {
// RAZ
$this->setData(['user',$userId,'connectFail',0 ]);
$this->setData(['user',$userId,'connectTimeout',0 ]);
// Expiration // Expiration
$expire = $this->getInput('userLoginLongTime') ? strtotime("+1 year") : 0; $expire = $this->getInput('userLoginLongTime') ? strtotime("+1 year") : 0;
$c = $this->getInput('userLoginLongTime', helper::FILTER_BOOLEAN) === true ? 'true' : 'false'; $c = $this->getInput('userLoginLongTime', helper::FILTER_BOOLEAN) === true ? 'true' : 'false';
@ -444,15 +464,14 @@ class user extends common {
} else { } else {
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'notification' => 'Connexion réussie', 'notification' => 'Bienvenue ' . $this->getData(['user',$userId,'firstname']) . ' ' . $this->getData(['user',$userId,'lastname']) ,
'redirect' => helper::baseUrl(), 'redirect' => helper::baseUrl() . str_replace('_', '/', str_replace('__', '#', $this->getUrl(2))),
//'redirect' => helper::baseUrl() . str_replace('_', '/', str_replace('__', '#', $this->getUrl(2))),
'state' => true 'state' => true
]); ]);
} }
// Sinon notification d'échec // Sinon notification d'échec
} else { } else {
$notification = 'Identifiant ou mot de passe incorrect'; $notification = 'Identifiant ou mot de passe incorrects';
// 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'])) { if ($this->getData(['user',$userId,'connectFail']) < $this->getData(['config', 'connect', 'attempt'])) {
$this->setData(['user',$userId,'connectFail',$this->getdata(['user',$userId,'connectFail']) + 1 ]); $this->setData(['user',$userId,'connectFail',$this->getdata(['user',$userId,'connectFail']) + 1 ]);
@ -463,7 +482,7 @@ class user extends common {
} }
// Cas 3 le délai de bloquage court // Cas 3 le délai de bloquage court
if ($this->getData(['user',$userId,'connectTimeout']) + $this->getData(['config', 'connect', 'timeout']) > time() ) { if ($this->getData(['user',$userId,'connectTimeout']) + $this->getData(['config', 'connect', 'timeout']) > time() ) {
$notification = 'Trop de tentatives, accès bloqué durant ' . ($this->getData(['config', 'connect', 'timeout']) / 60) . ' minutes.'; $notification = 'Accès bloqué ' . ($this->getData(['config', 'connect', 'timeout']) / 60) . ' minutes.';
} }
// Journalisation // Journalisation
$dataLog = mb_detect_encoding(strftime('%d/%m/%y',time()), 'UTF-8', true) $dataLog = mb_detect_encoding(strftime('%d/%m/%y',time()), 'UTF-8', true)