diff options
author | Fabien Potencier <fabien.potencier@gmail.com> | 2012-07-05 12:19:25 +0200 |
---|---|---|
committer | Fabien Potencier <fabien.potencier@gmail.com> | 2012-10-28 08:03:00 +0100 |
commit | 255196983ec0c1dc944057816fbba25b9ff8276c (patch) | |
tree | 9abc7b351b5a5dc0adcbde72f6ad645a652e04f1 /Http/RememberMe/PersistentTokenBasedRememberMeServices.php | |
parent | e3d359180c41a80803e06a5d277b3b319952c8ee (diff) | |
download | symfony-security-255196983ec0c1dc944057816fbba25b9ff8276c.zip symfony-security-255196983ec0c1dc944057816fbba25b9ff8276c.tar.gz symfony-security-255196983ec0c1dc944057816fbba25b9ff8276c.tar.bz2 |
moved the secure random class from JMSSecurityExtraBundle to Symfony (closes #3595)
Diffstat (limited to 'Http/RememberMe/PersistentTokenBasedRememberMeServices.php')
-rw-r--r-- | Http/RememberMe/PersistentTokenBasedRememberMeServices.php | 35 |
1 files changed, 10 insertions, 25 deletions
diff --git a/Http/RememberMe/PersistentTokenBasedRememberMeServices.php b/Http/RememberMe/PersistentTokenBasedRememberMeServices.php index 8944672..d36eb01 100644 --- a/Http/RememberMe/PersistentTokenBasedRememberMeServices.php +++ b/Http/RememberMe/PersistentTokenBasedRememberMeServices.php @@ -19,6 +19,7 @@ use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Core\Exception\CookieTheftException; use Symfony\Component\Security\Core\Authentication\RememberMe\PersistentToken; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; +use Symfony\Component\Security\Core\Util\Prng; /** * Concrete implementation of the RememberMeServicesInterface which needs @@ -30,6 +31,12 @@ use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; class PersistentTokenBasedRememberMeServices extends AbstractRememberMeServices { private $tokenProvider; + private $prng; + + public function setPrng(Prng $prng) + { + $this->prng = $prng; + } /** * Sets the token provider @@ -79,7 +86,7 @@ class PersistentTokenBasedRememberMeServices extends AbstractRememberMeServices } $series = $persistentToken->getSeries(); - $tokenValue = $this->generateRandomValue(); + $tokenValue = $this->prng->nextBytes(64); $this->tokenProvider->updateToken($series, $tokenValue, new \DateTime()); $request->attributes->set(self::COOKIE_ATTR_NAME, new Cookie( @@ -101,8 +108,8 @@ class PersistentTokenBasedRememberMeServices extends AbstractRememberMeServices */ protected function onLoginSuccess(Request $request, Response $response, TokenInterface $token) { - $series = $this->generateRandomValue(); - $tokenValue = $this->generateRandomValue(); + $series = $this->prng->nextBytes(64); + $tokenValue = $this->prng->nextBytes(64); $this->tokenProvider->createNewToken( new PersistentToken( @@ -126,26 +133,4 @@ class PersistentTokenBasedRememberMeServices extends AbstractRememberMeServices ) ); } - - /** - * Generates a cryptographically strong random value - * - * @return string - */ - protected function generateRandomValue() - { - if (function_exists('openssl_random_pseudo_bytes')) { - $bytes = openssl_random_pseudo_bytes(64, $strong); - - if (true === $strong && false !== $bytes) { - return base64_encode($bytes); - } - } - - if (null !== $this->logger) { - $this->logger->warn('Could not produce a cryptographically strong random value. Please install/update the OpenSSL extension.'); - } - - return base64_encode(hash('sha512', uniqid(mt_rand(), true), true)); - } } |