. */ namespace App\Entity\UserSystem; use App\Entity\Contracts\TimeStampableInterface; use Doctrine\DBAL\Types\Types; use App\Entity\Base\TimestampTrait; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints\Length; use Symfony\Component\Validator\Constraints\NotBlank; use Webauthn\PublicKeyCredentialSource as BasePublicKeyCredentialSource; #[ORM\Entity] #[ORM\HasLifecycleCallbacks] #[ORM\Table(name: 'webauthn_keys')] class WebauthnKey extends BasePublicKeyCredentialSource implements TimeStampableInterface { use TimestampTrait; #[ORM\Id] #[ORM\Column(type: Types::INTEGER)] #[ORM\GeneratedValue] protected int $id; #[ORM\Column(type: Types::STRING)] #[NotBlank] #[Length(max: 255)] protected string $name = ''; #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'webauthn_keys')] protected ?User $user = null; #[ORM\Column(type: Types::DATETIME_IMMUTABLE, nullable: true)] protected ?\DateTimeInterface $last_time_used = null; public function getName(): string { return $this->name; } public function setName(string $name): WebauthnKey { $this->name = $name; return $this; } public function getUser(): ?User { return $this->user; } public function setUser(?User $user): WebauthnKey { $this->user = $user; return $this; } public function getId(): int { return $this->id; } /** * Retrieve the last time when the key was used. * @return \DateTimeInterface|null */ public function getLastTimeUsed(): ?\DateTimeInterface { return $this->last_time_used; } /** * Update the last time when the key was used. * @return void */ public function updateLastTimeUsed(): void { $this->last_time_used = new \DateTimeImmutable('now'); } public static function fromRegistration(BasePublicKeyCredentialSource $registration): self { return new self( $registration->getPublicKeyCredentialId(), $registration->getType(), $registration->getTransports(), $registration->getAttestationType(), $registration->getTrustPath(), $registration->getAaguid(), $registration->getCredentialPublicKey(), $registration->getUserHandle(), $registration->getCounter(), $registration->getOtherUI() ); } }