src/Entity/Security/Token.php line 23

  1. <?php
  2. namespace App\Entity\Security;
  3. use App\Entity\Identity\Account;
  4. use App\Entity\Identity\Passport;
  5. use App\Entity\Identity\User;
  6. use DateTime;
  7. use DateTimeInterface;
  8. use Doctrine\DBAL\Types\Types;
  9. use Doctrine\ORM\Mapping as ORM;
  10. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  11. use Symfony\Component\Validator\Constraints as Assert;
  12. use Symfony\Component\Validator\Context\ExecutionContextInterface;
  13. #[ORM\Table(name'token')]
  14. #[ORM\Index(columns: ['user_id'], name'token_user_id_idx')]
  15. #[ORM\Index(columns: ['passport_id'], name'token_passport_id_idx')]
  16. #[ORM\Index(columns: ['account_id'], name'token_account_id_idx')]
  17. #[ORM\UniqueConstraint(name'token_value_key'columns: ['value'])]
  18. #[ORM\Entity]
  19. #[UniqueEntity('value')]
  20. class Token
  21. {
  22.     #[ORM\Id]
  23.     #[ORM\GeneratedValue(strategy'IDENTITY')]
  24.     #[ORM\SequenceGenerator(sequenceName'token_id_seq')]
  25.     #[ORM\Column(typeTypes::INTEGER)]
  26.     private ?int $id null;
  27.     #[Assert\NotBlank]
  28.     #[Assert\Type(typeTypes::STRING)]
  29.     #[ORM\Column(typeTypes::STRING)]
  30.     private ?string $value null;
  31.     #[Assert\Type(typeUser::class)]
  32.     #[ORM\ManyToOne(targetEntityUser::class)]
  33.     #[ORM\JoinColumn(name'user_id')]
  34.     private ?User $user null;
  35.     #[Assert\Type(typeAccount::class)]
  36.     #[ORM\ManyToOne(targetEntityAccount::class)]
  37.     #[ORM\JoinColumn(name'account_id')]
  38.     private ?Account $account null;
  39.     #[Assert\Type(typePassport::class)]
  40.     #[ORM\ManyToOne(targetEntityPassport::class)]
  41.     #[ORM\JoinColumn(name'passport_id')]
  42.     private ?Passport $passport null;
  43.     #[Assert\Type(typeTypes::DATETIMETZ_MUTABLE)]
  44.     #[ORM\Column(typeTypes::DATETIMETZ_MUTABLEoptions: ['default' => 'CURRENT_TIMESTAMP'])]
  45.     private DateTimeInterface $createdAt;
  46.     #[Assert\Type(typeTypes::DATETIMETZ_MUTABLE)]
  47.     #[ORM\Column(typeTypes::DATETIMETZ_MUTABLEnullabletrue)]
  48.     private ?DateTimeInterface $deletedAt;
  49.     #[Assert\Type(typeTypes::BOOLEAN)]
  50.     #[ORM\Column(typeTypes::BOOLEANoptions: ['default' => false])]
  51.     private bool $expired false;
  52.     #[Assert\Callback]
  53.     public function validate(ExecutionContextInterface $context$payload): void
  54.     {
  55.         if (empty($this->account) && empty($this->passport) && empty($this->user)) {
  56.             $context->buildViolation('Token must be attached to either, an account, a passport, or a user')
  57.                 ->atPath('account')
  58.                 ->addViolation();
  59.             $context->buildViolation('Token must be attached to either, an account, a passport, or a user')
  60.                 ->atPath('passport')
  61.                 ->addViolation();
  62.             $context->buildViolation('Token must be attached to either, an account, a passport, or a user')
  63.                 ->atPath('user')
  64.                 ->addViolation();
  65.         }
  66.     }
  67.     public function getId(): ?int
  68.     {
  69.         return $this->id;
  70.     }
  71.     public function getValue(): ?string
  72.     {
  73.         return $this->value;
  74.     }
  75.     public function setValue(?string $value): self
  76.     {
  77.         $this->value $value;
  78.         return $this;
  79.     }
  80.     public function getUser(): ?User
  81.     {
  82.         return $this->user;
  83.     }
  84.     public function getIdentity(): ?User
  85.     {
  86.         if (!empty($this->user)) {
  87.             return $this->user;
  88.         } elseif (!empty($this->passport)) {
  89.             return $this->passport->getOwner();
  90.         } elseif (!empty($this->account)) {
  91.             return $this->account->getUser();
  92.         }
  93.         return null;
  94.     }
  95.     public function setUser(?User $user): self
  96.     {
  97.         $this->user $user;
  98.         return $this;
  99.     }
  100.     public function getAccount(): ?Account
  101.     {
  102.         return $this->account;
  103.     }
  104.     public function setAccount(?Account $account): self
  105.     {
  106.         $this->account $account;
  107.         return $this;
  108.     }
  109.     public function getPassport(): ?Passport
  110.     {
  111.         return $this->passport;
  112.     }
  113.     public function setPassport(?Passport $passport): self
  114.     {
  115.         $this->passport $passport;
  116.         return $this;
  117.     }
  118.     public function getCreatedAt(): ?DateTimeInterface
  119.     {
  120.         return $this->createdAt;
  121.     }
  122.     public function setCreatedAt(?DateTimeInterface $createdAt): self
  123.     {
  124.         $this->createdAt $createdAt ?? new DateTime();
  125.         return $this;
  126.     }
  127.     public function getDeletedAt(): ?DateTimeInterface
  128.     {
  129.         return $this->deletedAt;
  130.     }
  131.     public function setDeletedAt(?DateTimeInterface $deletedAt): self
  132.     {
  133.         $this->deletedAt $deletedAt;
  134.         return $this;
  135.     }
  136.     public function isExpired(): ?bool
  137.     {
  138.         return $this->expired;
  139.     }
  140.     public function setExpired(bool $expired): self
  141.     {
  142.         $this->expired $expired;
  143.         return $this;
  144.     }
  145. }