src/App/Entity/OnetimeLoginToken.php line 21

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Utility\DateTimeUtility;
  4. use App\Utility\GuidUtility;
  5. use DateTime;
  6. use Doctrine\ORM\Mapping as ORM;
  7. /**
  8. * @ORM\Entity
  9. *
  10. * @ORM\Table(
  11. * name="onetime_login_tokens",
  12. * uniqueConstraints={
  13. *
  14. * @ORM\UniqueConstraint(name="code_unique_idx", columns={"code"})
  15. * }
  16. * )
  17. */
  18. class OnetimeLoginToken
  19. {
  20. /**
  21. * @var string
  22. *
  23. * @ORM\GeneratedValue(strategy="CUSTOM")
  24. *
  25. * @ORM\CustomIdGenerator(class="App\Utility\DatabaseIdGenerator")
  26. *
  27. * @ORM\Column(name="id", type="guid")
  28. *
  29. * @ORM\Id
  30. */
  31. protected $id;
  32. public function setId(string $id): void
  33. {
  34. GuidUtility::validOrThrow($id);
  35. $this->id = $id;
  36. }
  37. public function getId()
  38. {
  39. return $this->id;
  40. }
  41. /**
  42. * @var DateTime
  43. *
  44. * @ORM\Column(name="created_at", type="datetime", nullable=false)
  45. */
  46. protected $createdAt;
  47. public function setCreatedAt(DateTime $createdAt): void
  48. {
  49. $this->createdAt = $createdAt;
  50. }
  51. public function getCreatedAt(): DateTime
  52. {
  53. return $this->createdAt;
  54. }
  55. /**
  56. * @var DateTime
  57. *
  58. * @ORM\Column(name="redeemed_at", type="datetime", nullable=true)
  59. */
  60. protected $redeemedAt;
  61. public function setRedeemedAt(DateTime $redeemedAt): void
  62. {
  63. $this->redeemedAt = $redeemedAt;
  64. }
  65. public function getRedeemedAt()
  66. {
  67. return $this->redeemedAt;
  68. }
  69. /**
  70. * @var DateTime
  71. *
  72. * @ORM\Column(name="valid_until", type="datetime", nullable=false)
  73. */
  74. protected $validUntil;
  75. public function setValidUntil(DateTime $validUntil): void
  76. {
  77. $this->validUntil = $validUntil;
  78. }
  79. public function getValidUntil(): DateTime
  80. {
  81. return $this->validUntil;
  82. }
  83. /**
  84. * @var User
  85. *
  86. * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="onetimeLoginTokens", cascade={"persist"})
  87. *
  88. * @ORM\JoinColumn(name="users_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")
  89. */
  90. protected $user;
  91. public function setUser(User $user): void
  92. {
  93. $this->user = $user;
  94. }
  95. public function getUser(): User
  96. {
  97. return $this->user;
  98. }
  99. /**
  100. * @var string
  101. *
  102. * @ORM\Column(name="code", type="string", length=256, nullable=false)
  103. */
  104. protected $code;
  105. public function setCode(string $code): void
  106. {
  107. $this->code = $code;
  108. }
  109. public function getCode(): string
  110. {
  111. return $this->code;
  112. }
  113. /**
  114. * @var bool
  115. *
  116. * @ORM\Column(name="is_redeemed", type="boolean", nullable=false)
  117. */
  118. protected $isRedeemed;
  119. public function setIsRedeemed(bool $isRedeemed): void
  120. {
  121. $this->isRedeemed = $isRedeemed;
  122. }
  123. public function isRedeemed(): bool
  124. {
  125. return $this->isRedeemed;
  126. }
  127. public function __construct(User $user, DateTime $validUntil)
  128. {
  129. $this->user = $user;
  130. $this->validUntil = $validUntil;
  131. $this->createdAt = DateTimeUtility::createDateTimeUtc();
  132. $this->code = self::generateCode();
  133. $this->setIsRedeemed(false);
  134. }
  135. protected static function generateCode()
  136. {
  137. return bin2hex(random_bytes(128));
  138. }
  139. }