source: spip-zone/_plugins_/motpassecomplexe/trunk/motpassecomplexe_fonctions.php @ 108447

Last change on this file since 108447 was 108447, checked in by erational@…, 3 years ago

Version SPIP 3.2: on met à jour les surcharges avec les évolutions du core
TODO: dans la fonction generer mot de passe il faudrait tenir compte des constraintes imposées par le plugin

File size: 2.6 KB
Line 
1<?php
2
3if (!defined('_ECRIRE_INC_VERSION')) {
4        return;
5}
6
7/**
8 * Verification de la validite d'un mot de passe pour le mode d'auth concerne
9 * c'est ici que se font eventuellement les verifications de longueur mini/maxi
10 * ou de force.
11 *
12 * @param string $new_pass
13 * @return string
14 *  message d'erreur si login non valide, chaine vide sinon
15 */
16function motpassecomplexe_verifier_pass($new_pass){
17
18         // charge les constantes
19        // define('_PASS_LONGUEUR_MINI', '6');                                                                                  // longueur minimale - defaut: 6
20        if (!defined('_MOTCOMPLEXE_MINUSCULE')) define('_MOTCOMPLEXE_MINUSCULE', 1);    // nb de minuscules  - defaut: 1
21        if (!defined('_MOTCOMPLEXE_MAJUSCULE')) define('_MOTCOMPLEXE_MAJUSCULE', 1);    // nb de majuscules  - defaut: 1
22        if (!defined('_MOTCOMPLEXE_CHIFFRE')) define('_MOTCOMPLEXE_CHIFFRE', 1);                // nb de chiffres  - defaut: 1
23        if (!defined('_MOTCOMPLEXE_SPECIAL')) define('_MOTCOMPLEXE_SPECIAL', 1);                // nb de caractères spéciaux  - defaut: 1
24
25        $requis = array (
26                'nb' => _PASS_LONGUEUR_MINI,
27                'nb_min' => _MOTCOMPLEXE_MINUSCULE,
28                'nb_maj' => _MOTCOMPLEXE_MAJUSCULE,
29                'nb_int' => _MOTCOMPLEXE_CHIFFRE,
30                'nb_spe' => _MOTCOMPLEXE_SPECIAL,
31        );
32
33        $nb = strlen($new_pass);
34        $nb_min = motpassecomplexe_count_pattern($new_pass, '![^a-z]+!');
35        $nb_maj = motpassecomplexe_count_pattern($new_pass, '![^A-Z]+!');
36        $nb_int = motpassecomplexe_count_pattern($new_pass, '![^0-9]+!');
37        $nb_spe = $nb - motpassecomplexe_count_pattern($new_pass, '![^A-z0-9 ]+!');
38
39        $verifications = array(
40                array (
41                        'constante' => _PASS_LONGUEUR_MINI,
42                        'operateur' => '>=',
43                        'variable' =>  $nb,
44                ),
45                array (
46                        'constante' => _MOTCOMPLEXE_MINUSCULE,
47                        'operateur' => '>=',
48                        'variable' => $nb_min,
49                ),
50                array (
51                        'constante' => _MOTCOMPLEXE_MAJUSCULE,
52                        'operateur' => '>=',
53                        'variable' => $nb_maj,
54                ),
55                array (
56                        'constante' => _MOTCOMPLEXE_CHIFFRE,
57                        'operateur' => '>=',
58                        'variable' => $nb_int,
59                ),
60                array (
61                        'constante' => _MOTCOMPLEXE_SPECIAL,
62                        'operateur' => '>=',
63                        'variable' => $nb_spe,
64                ),
65        );
66
67
68        foreach ($verifications as $verification) {
69                if (!version_compare($verification['variable'], $verification['constante'], $verification['operateur'])) {
70                        return _T('motpassecomplexe:info_passe_trop_court', $requis);
71                }
72        }
73
74        return '';
75}
76
77/**
78 * Compte le nombre de caractères d'une chaine vérifiant une regex
79 *
80 * @param string $login
81 *      chaine à verifier
82 * @param string $pattern
83 *      motif regex à tester
84 * @return int
85 *      la longueur
86 */
87function motpassecomplexe_count_pattern($str, $pattern) {
88        return strlen(preg_replace($pattern, '', $str));
89}
Note: See TracBrowser for help on using the repository browser.