dolibarr  19.0.0-dev
modGeneratePassStandard.class.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2006-2011 Laurent Destailleur <eldy@users.sourceforge.net>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program. If not, see <https://www.gnu.org/licenses/>.
16  * or see https://www.gnu.org/
17  */
18 
25 require_once DOL_DOCUMENT_ROOT.'/core/modules/security/generate/modules_genpassword.php';
26 
27 
32 {
36  public $id;
37 
38  public $picto = 'fa-shield-alt';
39 
45  public $length;
46 
52  public $length2;
53 
57  public $db;
58 
59  public $conf;
60  public $lang;
61  public $user;
62 
63 
72  public function __construct($db, $conf, $langs, $user)
73  {
74  $this->id = "standard";
75  $this->length = 12;
76  $this->length2 = 12;
77 
78  $this->db = $db;
79  $this->conf = $conf;
80  $this->langs = $langs;
81  $this->user = $user;
82  }
83 
89  public function getDescription()
90  {
91  global $langs;
92  return $langs->trans("PasswordGenerationStandard", $this->length);
93  }
94 
100  public function getExample()
101  {
102  return $this->getNewGeneratedPassword();
103  }
104 
110  public function getNewGeneratedPassword()
111  {
112  // start with a blank password
113  $password = "";
114 
115  // define possible characters
116  $possible = "0123456789qwertyuiopasdfghjklzxcvbnmASDFGHJKLZXCVBNMQWERTYUIOP";
117 
118  // set up a counter
119  $i = 0;
120 
121  // add random characters to $password until $length is reached
122  while ($i < $this->length) {
123  // pick a random character from the possible ones
124  if (function_exists('random_int')) { // Cryptographic random
125  $char = substr($possible, random_int(0, dol_strlen($possible) - 1), 1);
126  } else {
127  $char = substr($possible, mt_rand(0, dol_strlen($possible) - 1), 1);
128  }
129 
130  if (substr_count($password, $char) <= 6) { // we don't want this character if it's already 5 times in the password
131  $password .= $char;
132  $i++;
133  }
134  }
135 
136  // done!
137  return $password;
138  }
139 
147  public function validatePassword($password)
148  {
149  global $langs;
150 
151  if (dol_strlen($password) < $this->length2) {
152  $langs->load("other");
153  $this->error = $langs->trans("YourPasswordMustHaveAtLeastXChars", $this->length2);
154  return 0;
155  }
156 
157  return 1;
158  }
159 }
Parent class for password rules/management modules.
Class to generate a password according to a dolibarr standard rule (12 random chars)
validatePassword($password)
Validate a password This function is called by User->setPassword() and internally to validate that th...
getDescription()
Return description of module.
getExample()
Return an example of password generated by this module.
getNewGeneratedPassword()
Build new password.
__construct($db, $conf, $langs, $user)
Constructor.
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
conf($dolibarr_main_document_root)
Load conf file (file must exists)
Definition: inc.php:400
$conf db user
Definition: repair.php:124