diff --git a/htdocs/admin/security.php b/htdocs/admin/security.php index 0101465e674..adb590ffcd2 100644 --- a/htdocs/admin/security.php +++ b/htdocs/admin/security.php @@ -326,7 +326,7 @@ $var=!$var; $var=!$var; print ""; print '' . $langs->trans("NoAmbiCaracAutoGeneration").""; - print ''; + print ' '.($tabConf[5] ? $langs->trans("Activated") : $langs->trans("Disabled")).''; print ''; $var=!$var; @@ -360,6 +360,9 @@ $var=!$var; print ' function valuePatternChange(){'; print ' var lang_save = "'.$langs->trans("Save").'";'; print ' var lang_error = "'.$langs->trans("Error").'";'; + print ' var lang_Disabled = "'.$langs->trans("Disabled").'";'; + print ' var lang_Activated = "'.$langs->trans("Activated").'";'; + print ' $("#textcheckbox").html($("#NoAmbiCaracAutoGeneration")[0].checked ? unescape(lang_Activated) : unescape(lang_Disabled));'; print ' if(valuePossible()){'; print ' $("#linkChangePattern").attr("href",generatelink()).text(lang_save);'; print ' }'; diff --git a/htdocs/core/modules/security/generate/modGeneratePassPerso.class.php b/htdocs/core/modules/security/generate/modGeneratePassPerso.class.php index b2eab5d1495..aedc870560f 100644 --- a/htdocs/core/modules/security/generate/modGeneratePassPerso.class.php +++ b/htdocs/core/modules/security/generate/modGeneratePassPerso.class.php @@ -72,16 +72,14 @@ class modGeneratePassPerso extends ModeleGenPassword $this->user=$user; if(empty($conf->global->USER_PASSWORD_PATTERN)){ - dolibarr_set_const($db, "USER_PASSWORD_PATTERN", '8;1;1;1;8;0','chaine',0,'',$conf->entity); + // default value (8carac, 1maj, 1digit, 1spe, 3 repeat, no ambi at auto generation. + dolibarr_set_const($db, "USER_PASSWORD_PATTERN", '8;1;1;1;3;1','chaine',0,'',$conf->entity); } $this->Maj = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - //$this->Maj = "Y"; $this->Min = strtolower($this->Maj); $this->Nb = "0123456789"; - //$this->Nb = "X"; $this->Spe = "!@#$%&*()_-+={}[]\\|:;'/"; - //$this->Spe = "<>;}?"; $this->Ambi = array("1","I","l","|","O","0"); $tabConf = explode(";",$conf->global->USER_PASSWORD_PATTERN); @@ -149,7 +147,13 @@ class modGeneratePassPerso extends ModeleGenPassword for($i=strlen($pass);$i<$this->length2; $i++){ // y $pass .= $this->All[rand(0,strlen($this->All) -1)]; } - return str_shuffle($pass) ; + + $pass = str_shuffle($pass) ; + + if($this->validatePassword($pass)) { + return $pass; + } + return $this->getNewGeneratedPassword(); } /** @@ -160,6 +164,27 @@ class modGeneratePassPerso extends ModeleGenPassword */ function validatePassword($password) { + $password_a = str_split($password); + $maj = str_split($this->Maj); + $num = str_split($this->Nb); + $spe = str_split($this->Spe); + + if(count(array_intersect($password_a, $maj)) < $this->NbMaj){ + return 0; + } + + if(count(array_intersect($password_a, $num)) < $this->NbNum){ + return 0; + } + + if(count(array_intersect($password_a, $spe)) < $this->NbSpe){ + return 0; + } + + if(!$this->consecutiveInterationSameCharacter($password)){ + return 0; + } + return 1; } @@ -172,8 +197,7 @@ class modGeneratePassPerso extends ModeleGenPassword function consecutiveInterationSameCharacter($password){ $last = ""; $count = 0; - $char = explode("", $password); - + $char = str_split($password); foreach($char as $c){ if($c != $last){ $last = $c; @@ -182,11 +206,11 @@ class modGeneratePassPerso extends ModeleGenPassword $count++; } - if($count > $this->NbRepeat) { - return true; + if($count >= $this->NbRepeat) { + return 0; } } - return false; + return 1; } } diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang index 53061a3e944..bae681d6981 100644 --- a/htdocs/langs/fr_FR/admin.lang +++ b/htdocs/langs/fr_FR/admin.lang @@ -331,7 +331,7 @@ NbMajMin=Nombre de majuscule minimum NbNumMin=Nombre de chiffre minimum NbSpeMin=Nombre de caractère speciaux minimum NbIteConsecutive=Nombre maximum d'iterations consecutive du même caractère -NoAmbiCaracAutoGeneration=Desactivaté les caractère ambigus pour la generation automatique ("1","I","l","|","0","O") +NoAmbiCaracAutoGeneration=Ne pas utiliser les caractère ambigus pour la generation automatique ("1","I","l","|","0","O") SetupPerso=Configuration personalisable LanguageFilesCachedIntoShmopSharedMemory=Fichiers .lang en mémoire partagée ExamplesWithCurrentSetup=Exemples avec le paramétrage actif courant