src/Entity/Security/Token.php line 23
<?php
namespace App\Entity\Security;
use App\Entity\Identity\Account;
use App\Entity\Identity\Passport;
use App\Entity\Identity\User;
use DateTime;
use DateTimeInterface;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
#[ORM\Table(name: 'token')]
#[ORM\Index(columns: ['user_id'], name: 'token_user_id_idx')]
#[ORM\Index(columns: ['passport_id'], name: 'token_passport_id_idx')]
#[ORM\Index(columns: ['account_id'], name: 'token_account_id_idx')]
#[ORM\UniqueConstraint(name: 'token_value_key', columns: ['value'])]
#[ORM\Entity]
#[UniqueEntity('value')]
class Token
{
#[ORM\Id]
#[ORM\GeneratedValue(strategy: 'IDENTITY')]
#[ORM\SequenceGenerator(sequenceName: 'token_id_seq')]
#[ORM\Column(type: Types::INTEGER)]
private ?int $id = null;
#[Assert\NotBlank]
#[Assert\Type(type: Types::STRING)]
#[ORM\Column(type: Types::STRING)]
private ?string $value = null;
#[Assert\Type(type: User::class)]
#[ORM\ManyToOne(targetEntity: User::class)]
#[ORM\JoinColumn(name: 'user_id')]
private ?User $user = null;
#[Assert\Type(type: Account::class)]
#[ORM\ManyToOne(targetEntity: Account::class)]
#[ORM\JoinColumn(name: 'account_id')]
private ?Account $account = null;
#[Assert\Type(type: Passport::class)]
#[ORM\ManyToOne(targetEntity: Passport::class)]
#[ORM\JoinColumn(name: 'passport_id')]
private ?Passport $passport = null;
#[Assert\Type(type: Types::DATETIMETZ_MUTABLE)]
#[ORM\Column(type: Types::DATETIMETZ_MUTABLE, options: ['default' => 'CURRENT_TIMESTAMP'])]
private DateTimeInterface $createdAt;
#[Assert\Type(type: Types::DATETIMETZ_MUTABLE)]
#[ORM\Column(type: Types::DATETIMETZ_MUTABLE, nullable: true)]
private ?DateTimeInterface $deletedAt;
#[Assert\Type(type: Types::BOOLEAN)]
#[ORM\Column(type: Types::BOOLEAN, options: ['default' => false])]
private bool $expired = false;
#[Assert\Callback]
public function validate(ExecutionContextInterface $context, $payload): void
{
if (empty($this->account) && empty($this->passport) && empty($this->user)) {
$context->buildViolation('Token must be attached to either, an account, a passport, or a user')
->atPath('account')
->addViolation();
$context->buildViolation('Token must be attached to either, an account, a passport, or a user')
->atPath('passport')
->addViolation();
$context->buildViolation('Token must be attached to either, an account, a passport, or a user')
->atPath('user')
->addViolation();
}
}
public function getId(): ?int
{
return $this->id;
}
public function getValue(): ?string
{
return $this->value;
}
public function setValue(?string $value): self
{
$this->value = $value;
return $this;
}
public function getUser(): ?User
{
return $this->user;
}
public function getIdentity(): ?User
{
if (!empty($this->user)) {
return $this->user;
} elseif (!empty($this->passport)) {
return $this->passport->getOwner();
} elseif (!empty($this->account)) {
return $this->account->getUser();
}
return null;
}
public function setUser(?User $user): self
{
$this->user = $user;
return $this;
}
public function getAccount(): ?Account
{
return $this->account;
}
public function setAccount(?Account $account): self
{
$this->account = $account;
return $this;
}
public function getPassport(): ?Passport
{
return $this->passport;
}
public function setPassport(?Passport $passport): self
{
$this->passport = $passport;
return $this;
}
public function getCreatedAt(): ?DateTimeInterface
{
return $this->createdAt;
}
public function setCreatedAt(?DateTimeInterface $createdAt): self
{
$this->createdAt = $createdAt ?? new DateTime();
return $this;
}
public function getDeletedAt(): ?DateTimeInterface
{
return $this->deletedAt;
}
public function setDeletedAt(?DateTimeInterface $deletedAt): self
{
$this->deletedAt = $deletedAt;
return $this;
}
public function isExpired(): ?bool
{
return $this->expired;
}
public function setExpired(bool $expired): self
{
$this->expired = $expired;
return $this;
}
}