/**
  * @test
  */
 public function encode()
 {
     $salt = "8843d7f92416211de9ebb963ff4ce28125932878";
     $encoder = new PasswordEncoder($salt);
     $this->assertEquals("4f0e4a59d58e630e85f3e00dc35881aa7216363a15016502d7ab0e1f7324a1b2", $encoder->encode("foobar"));
     $this->assertEquals("eefe67eb801a8374a72657d4743a4c594fe35ef64f3d053726d4e791ff8d14d1", $encoder->encode("foobarbaz"));
 }
 /**
  * @param User $user
  * @return User
  */
 public function invoke(User $user)
 {
     $user->setEncodedPassword($this->passwordEncoder->encode($user->getPassword()));
     $this->userRepository->add($user);
     $this->entityManager->flush();
     $user->setPassword(null);
     return $user;
 }
 /**
  * @param string $username
  * @param string $password
  * @return AccessToken|null
  */
 public function invoke($username, $password)
 {
     $user = $this->findUser($username);
     if (!$user) {
         return false;
     }
     if ($user->getEncodedPassword() !== $this->passwordEncoder->encode($password)) {
         return false;
     }
     $token = $this->tokenGenerator->generate();
     $period = $this->now() + self::PERIOD_HOURS * 3600;
     $accessToken = new AccessToken();
     $accessToken->setUser($user)->setToken($token)->setPeriod($period);
     $this->accessTokenRepository->add($accessToken);
     $this->entityManager->flush();
     return $accessToken;
 }