<?phpnamespace App\Entity;use App\Repository\RefreshTokenRepository;use Doctrine\ORM\Mapping as ORM;/** * @ORM\Entity(repositoryClass=RefreshTokenRepository::class) */class RefreshToken{ const TOKEN_EXPIRATION_MINUTES = 60 * 24 * 30; // 30 days /** * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer") */ private $id; /** * @ORM\Column(type="datetime") */ private $createdAt; /** * @ORM\Column(type="boolean", nullable=true) */ private $revoked; /** * @ORM\Column(type="string", length=255, unique=true) */ private $token; /** * @ORM\ManyToOne(targetEntity=User::class) * @ORM\JoinColumn(nullable=false) */ private $user; public function __construct() { $this->createdAt = new \DateTime(); } public function getId(): ?int { return $this->id; } public function getCreatedAt(): ?\DateTimeInterface { return $this->createdAt; } public function setCreatedAt(\DateTimeInterface $createdAt): self { $this->createdAt = $createdAt; return $this; } public function isRevoked(): ?bool { return $this->revoked; } public function setRevoked(?bool $revoked): self { $this->revoked = $revoked; return $this; } public function getExpiresAt(): ?\DateTimeInterface { if ($this->createdAt) { $expiresAt = clone $this->createdAt; $expiresAt->modify('+' . self::TOKEN_EXPIRATION_MINUTES . ' minutes'); return $expiresAt; } return null; } public function isExpired(): bool { $expiresAt = $this->getExpiresAt(); if ($expiresAt) { return new \DateTime() > $expiresAt; } return false; } public function isAlive(): bool { return !$this->isExpired() && !$this->isRevoked(); } public function getToken(): ?string { return $this->token; } public function setToken(string $token): self { $this->token = $token; return $this; } public function getUser(): ?User { return $this->user; } public function setUser(?User $user): self { $this->user = $user; return $this; }}