| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | 
							- <?php
 - 
 - /*
 -  * This file is part of the FOSUserBundle package.
 -  *
 -  * (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
 -  *
 -  * For the full copyright and license information, please view the LICENSE
 -  * file that was distributed with this source code.
 -  */
 - 
 - namespace FOS\UserBundle\Util;
 - 
 - use Symfony\Component\HttpKernel\Log\LoggerInterface;
 - 
 - class TokenGenerator implements TokenGeneratorInterface
 - {
 -     private $logger;
 -     private $useOpenSsl;
 - 
 -     public function __construct(LoggerInterface $logger = null)
 -     {
 -         $this->logger = $logger;
 - 
 -         // determine whether to use OpenSSL
 -         if (defined('PHP_WINDOWS_VERSION_BUILD') && version_compare(PHP_VERSION, '5.3.4', '<')) {
 -             $this->useOpenSsl = false;
 -         } elseif (!function_exists('openssl_random_pseudo_bytes')) {
 -             if (null !== $this->logger) {
 -                 $this->logger->notice('It is recommended that you enable the "openssl" extension for random number generation.');
 -             }
 -             $this->useOpenSsl = false;
 -         } else {
 -             $this->useOpenSsl = true;
 -         }
 -     }
 - 
 -     public function generateToken()
 -     {
 -         return base_convert(bin2hex($this->getRandomNumber()), 16, 36);
 -     }
 - 
 -     private function getRandomNumber()
 -     {
 -         $nbBytes = 32;
 - 
 -         // try OpenSSL
 -         if ($this->useOpenSsl) {
 -             $bytes = openssl_random_pseudo_bytes($nbBytes, $strong);
 - 
 -             if (false !== $bytes && true === $strong) {
 -                 return $bytes;
 -             }
 - 
 -             if (null !== $this->logger) {
 -                 $this->logger->info('OpenSSL did not produce a secure random number.');
 -             }
 -         }
 - 
 -         return hash('sha256', uniqid(mt_rand(), true), true);
 -     }
 - }
 
 
  |