vendor/symfony/security-http/RememberMe/RememberMeDetails.php line 37

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <fabien@symfony.com>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Symfony\Component\Security\Http\RememberMe;
  11. use Symfony\Component\Security\Core\Authentication\RememberMe\PersistentToken;
  12. use Symfony\Component\Security\Core\Exception\AuthenticationException;
  13. /**
  14.  * @author Wouter de Jong <wouter@wouterj.nl>
  15.  */
  16. class RememberMeDetails
  17. {
  18.     public const COOKIE_DELIMITER ':';
  19.     private $userFqcn;
  20.     private $userIdentifier;
  21.     private $expires;
  22.     private $value;
  23.     public function __construct(string $userFqcnstring $userIdentifierint $expiresstring $value)
  24.     {
  25.         $this->userFqcn $userFqcn;
  26.         $this->userIdentifier $userIdentifier;
  27.         $this->expires $expires;
  28.         $this->value $value;
  29.     }
  30.     public static function fromRawCookie(string $rawCookie): self
  31.     {
  32.         if (!str_contains($rawCookieself::COOKIE_DELIMITER)) {
  33.             $rawCookie base64_decode($rawCookie);
  34.         }
  35.         $cookieParts explode(self::COOKIE_DELIMITER$rawCookie4);
  36.         if (!== \count($cookieParts)) {
  37.             throw new AuthenticationException('The cookie contains invalid data.');
  38.         }
  39.         if (false === $cookieParts[1] = base64_decode(strtr($cookieParts[1], '-_~''+/='), true)) {
  40.             throw new AuthenticationException('The user identifier contains a character from outside the base64 alphabet.');
  41.         }
  42.         $cookieParts[0] = strtr($cookieParts[0], '.''\\');
  43.         return new static(...$cookieParts);
  44.     }
  45.     public static function fromPersistentToken(PersistentToken $persistentTokenint $expires): self
  46.     {
  47.         return new static($persistentToken->getClass(), $persistentToken->getUserIdentifier(), $expires$persistentToken->getSeries().':'.$persistentToken->getTokenValue());
  48.     }
  49.     public function withValue(string $value): self
  50.     {
  51.         $details = clone $this;
  52.         $details->value $value;
  53.         return $details;
  54.     }
  55.     public function getUserFqcn(): string
  56.     {
  57.         return $this->userFqcn;
  58.     }
  59.     public function getUserIdentifier(): string
  60.     {
  61.         return $this->userIdentifier;
  62.     }
  63.     public function getExpires(): int
  64.     {
  65.         return $this->expires;
  66.     }
  67.     public function getValue(): string
  68.     {
  69.         return $this->value;
  70.     }
  71.     public function toString(): string
  72.     {
  73.         // $userIdentifier is encoded because it might contain COOKIE_DELIMITER, we assume other values don't
  74.         return implode(self::COOKIE_DELIMITER, [strtr($this->userFqcn'\\''.'), strtr(base64_encode($this->userIdentifier), '+/=''-_~'), $this->expires$this->value]);
  75.     }
  76. }