. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Tools\UserSecurity\Password; use Espo\Core\Utils\Config; use Espo\Core\Utils\Util; /** * A password generator. * * @todo Use an interface with binding. */ class Generator { private Config $config; public function __construct( Config $config ) { $this->config = $config; } /** * Generate a password. */ public function generate(): string { $length = $this->config->get('passwordStrengthLength'); $letterCount = $this->config->get('passwordStrengthLetterCount'); $numberCount = $this->config->get('passwordStrengthNumberCount'); $generateLength = $this->config->get('passwordGenerateLength', 10); $generateLetterCount = $this->config->get('passwordGenerateLetterCount', 4); $generateNumberCount = $this->config->get('passwordGenerateNumberCount', 2); $length = is_null($length) ? $generateLength : $length; $letterCount = is_null($letterCount) ? $generateLetterCount : $letterCount; $numberCount = is_null($letterCount) ? $generateNumberCount : $numberCount; if ($length < $generateLength) { $length = $generateLength; } if ($letterCount < $generateLetterCount) { $letterCount = $generateLetterCount; } if ($numberCount < $generateNumberCount) { $numberCount = $generateNumberCount; } return Util::generatePassword($length, $letterCount, $numberCount, true); } }