Spaces:
No application file
No application file
File size: 1,596 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
<?php
declare(strict_types=1);
namespace Mautic\UserBundle\Model;
use Mautic\UserBundle\Event\PasswordStrengthValidateEvent;
use Mautic\UserBundle\UserEvents;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use ZxcvbnPhp\Zxcvbn as PasswordStrengthEstimator;
class PasswordStrengthEstimatorModel
{
public const MINIMUM_PASSWORD_STRENGTH_ALLOWED = 3;
private const DICTIONARY = [
'mautic',
'user',
'lead',
'bundle',
'campaign',
'company',
];
private PasswordStrengthEstimator $passwordStrengthEstimator;
public function __construct(private EventDispatcherInterface $dispatcher)
{
$this->passwordStrengthEstimator = new PasswordStrengthEstimator();
}
/**
* @param string[] $dictionary
*/
public function validate(?string $password, int $score = self::MINIMUM_PASSWORD_STRENGTH_ALLOWED, array $dictionary = self::DICTIONARY): bool
{
$isValid = $score <= $this->passwordStrengthEstimator->passwordStrength($password, $this->sanitizeDictionary($dictionary))['score'];
$passwordStrengthValidateEvent = new PasswordStrengthValidateEvent($isValid, $password);
$this->dispatcher->dispatch($passwordStrengthValidateEvent, UserEvents::USER_PASSWORD_STRENGTH_VALIDATION);
return $passwordStrengthValidateEvent->isValid;
}
/**
* @param string[] $dictionary
*
* @return string[]
*/
private function sanitizeDictionary(array $dictionary): array
{
return array_unique(array_filter($dictionary));
}
}
|