. */ 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 ?\DateTimeImmutable $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. */ public function getLastTimeUsed(): ?\DateTimeImmutable { 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( publicKeyCredentialId: $registration->publicKeyCredentialId, type: $registration->type, transports: $registration->transports, attestationType: $registration->attestationType, trustPath: $registration->trustPath, aaguid: $registration->aaguid, credentialPublicKey: $registration->credentialPublicKey, userHandle: $registration->userHandle, counter: $registration->counter, otherUI: $registration->otherUI, backupEligible: $registration->backupEligible, backupStatus: $registration->backupStatus, uvInitialized: $registration->uvInitialized, ); } }