<?php
namespace App\Entity;
use App\Services\TokenGenerator;
use DateTime;
use DateTimeInterface;
use Doctrine\ORM\Mapping as ORM;
use Exception;
use Gedmo\Timestampable\Traits\TimestampableEntity;
/**
* @ORM\Entity(repositoryClass="App\Repository\TokenUserRepository")
*/
class TokenUser
{
use TimestampableEntity;
public const TOKEN_RECUPERATE_PASSWORD = 'recuperate_password';
public const TOKEN_REGISTER = 'register';
public const TOKEN_ACTIVE_USER = 'active_user';
/**
* @var int
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @var string
* @ORM\Column(type="text")
*/
private $token;
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="tokens" ,cascade={"persist"})
*/
private $user;
/**
* @ORM\Column(type="datetime",nullable=true)
*/
private $expiredAt;
/**
* @var string
* @ORM\Column(type="string", length=255)
*/
private $type;
/**
* @var bool
* @ORM\Column(type="boolean")
*/
private $enabled;
/**
* TokenUser constructor.
*
* @throws Exception
*/
public function __construct()
{
$generator = new TokenGenerator();
$this->token = $generator->generateToken();
$this->enabled = true;
}
public function getId(): ?int
{
return $this->id;
}
public function getToken(): ?string
{
return $this->token;
}
/**
* @return $this
*/
public function setToken(string $token): self
{
$this->token = $token;
return $this;
}
public function getCreatedAt(): ?DateTimeInterface
{
return $this->createdAt;
}
/**
* @return $this
*/
public function setCreatedAt(DateTimeInterface $createdAt): self
{
$this->createdAt = $createdAt;
return $this;
}
public function getUpdatedAt(): ?DateTimeInterface
{
return $this->updatedAt;
}
/**
* @return $this
*/
public function setUpdatedAt(DateTimeInterface $updatedAt): self
{
$this->updatedAt = $updatedAt;
return $this;
}
public function getExpiredAt(): ?DateTimeInterface
{
return $this->expiredAt;
}
/**
* @return $this
*/
public function setExpiredAt(DateTimeInterface $expiredAt): self
{
$this->expiredAt = $expiredAt;
return $this;
}
public function getType(): ?string
{
return $this->type;
}
/**
* @return $this
*/
public function setType(string $type): self
{
$this->type = $type;
//Set expired time
switch ($type) {
case $this::TOKEN_RECUPERATE_PASSWORD:
$this->expiredAt = new DateTime('+3 day');
break;
case $this::TOKEN_ACTIVE_USER:
$this->expiredAt = new DateTime('+1 month');
break;
default:
$this->expiredAt = new DateTime();
break;
}
return $this;
}
public function getUser(): ?User
{
return $this->user;
}
/**
* @return $this
*/
public function setUser(?User $user): self
{
$this->user = $user;
return $this;
}
public function getEnabled(): ?bool
{
return $this->enabled;
}
/**
* @return $this
*/
public function setEnabled(bool $enabled): self
{
$this->enabled = $enabled;
return $this;
}
}