3 namespace Wallabag\CoreBundle\Security\Authentication\Provider
;
5 use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface
;
6 use Symfony\Component\Security\Core\User\UserProviderInterface
;
7 use Symfony\Component\Security\Core\User\UserCheckerInterface
;
8 use Symfony\Component\Security\Core\User\UserInterface
;
9 use Symfony\Component\Security\Core\Exception\UsernameNotFoundException
;
10 use Symfony\Component\Security\Core\Exception\AuthenticationServiceException
;
11 use Symfony\Component\Security\Core\Exception\BadCredentialsException
;
12 use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken
;
13 use Symfony\Component\Security\Core\Authentication\Provider\UserAuthenticationProvider
;
15 class WallabagAuthenticationProvider
extends UserAuthenticationProvider
17 private $encoderFactory;
18 private $userProvider;
23 * @param UserProviderInterface $userProvider An UserProviderInterface instance
24 * @param UserCheckerInterface $userChecker An UserCheckerInterface instance
25 * @param string $providerKey The provider key
26 * @param EncoderFactoryInterface $encoderFactory An EncoderFactoryInterface instance
27 * @param bool $hideUserNotFoundExceptions Whether to hide user not found exception or not
29 public function __construct(UserProviderInterface
$userProvider, UserCheckerInterface
$userChecker, $providerKey, EncoderFactoryInterface
$encoderFactory, $hideUserNotFoundExceptions = true)
31 parent
::__construct($userChecker, $providerKey, $hideUserNotFoundExceptions);
33 $this->encoderFactory
= $encoderFactory;
34 $this->userProvider
= $userProvider;
40 protected function checkAuthentication(UserInterface
$user, UsernamePasswordToken
$token)
42 $currentUser = $token->getUser();
43 if ($currentUser instanceof UserInterface
) {
44 if ($currentUser->getPassword() !== $user->getPassword()) {
45 throw new BadCredentialsException('The credentials were changed from another session.');
48 if ('' === ($presentedPassword = $token->getCredentials())) {
49 throw new BadCredentialsException('The presented password cannot be empty.');
52 // give username, it's used to hash the password
53 $encoder = $this->encoderFactory
->getEncoder($user);
54 $encoder->setUsername($user->getUsername());
56 if (!$encoder->isPasswordValid($user->getPassword(), $presentedPassword, $user->getSalt())) {
57 throw new BadCredentialsException('The presented password is invalid.');
65 protected function retrieveUser($username, UsernamePasswordToken
$token)
67 $user = $token->getUser();
68 if ($user instanceof UserInterface
) {
73 $user = $this->userProvider
->loadUserByUsername($username);
75 if (!$user instanceof UserInterface
) {
76 throw new AuthenticationServiceException('The user provider must return a UserInterface object.');
80 } catch (UsernameNotFoundException
$notFound) {
81 $notFound->setUsername($username);
83 } catch (\Exception
$repositoryProblem) {
84 $ex = new AuthenticationServiceException($repositoryProblem->getMessage(), 0, $repositoryProblem);
85 $ex->setToken($token);