3 namespace Wallabag\CoreBundle\Security\Validator
;
5 use Symfony\Component\Security\Core\User\UserInterface
;
6 use Symfony\Component\Security\Core\SecurityContextInterface
;
7 use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface
;
8 use Symfony\Component\Validator\Constraint
;
9 use Symfony\Component\Validator\ConstraintValidator
;
10 use Symfony\Component\Validator\Exception\ConstraintDefinitionException
;
11 use Symfony\Component\Validator\Exception\UnexpectedTypeException
;
12 use Symfony\Component\Security\Core\Validator\Constraints\UserPassword
;
14 class WallabagUserPasswordValidator
extends ConstraintValidator
16 private $securityContext;
17 private $encoderFactory;
19 public function __construct(SecurityContextInterface
$securityContext, EncoderFactoryInterface
$encoderFactory)
21 $this->securityContext
= $securityContext;
22 $this->encoderFactory
= $encoderFactory;
28 public function validate($password, Constraint
$constraint)
30 if (!$constraint instanceof UserPassword
) {
31 throw new UnexpectedTypeException($constraint, __NAMESPACE__
.'\UserPassword');
34 $user = $this->securityContext
->getToken()->getUser();
36 if (!$user instanceof UserInterface
) {
37 throw new ConstraintDefinitionException('The User object must implement the UserInterface interface.');
40 // give username, it's used to hash the password
41 $encoder = $this->encoderFactory
->getEncoder($user);
42 $encoder->setUsername($user->getUsername());
44 if (!$encoder->isPasswordValid($user->getPassword(), $password, $user->getSalt())) {
45 $this->context
->addViolation($constraint->message
);