lubo_comment_query/app/Models/WebauthnCredential.php
2022-08-08 02:07:57 +08:00

69 lines
2.0 KiB
PHP

<?php
namespace App\Models;
use App\Models\Casts\TrustPath;
use App\Models\Casts\Uuid;
use App\Models\Casts\WebAuthnBase64;
use Illuminate\Database\Eloquent\Model;
use Webauthn\PublicKeyCredentialSource;
class WebauthnCredential extends Model
{
protected $guarded = ['id'];
protected $visible = [
'id',
'name',
'type',
'attachment_type',
'transports',
'type_free',
'last_used_at',
'created_at',
'updated_at',
];
protected $casts = [
'aaguid' => Uuid::class,
'counter' => 'integer',
'credential_id' => WebAuthnBase64::class,
'credential_public_key' => WebAuthnBase64::class,
'transports' => 'array',
'trust_path' => TrustPath::class,
'last_used_at' => 'immutable_datetime',
];
public function getPublicKeyCredentialSourceAttribute(): PublicKeyCredentialSource
{
return new PublicKeyCredentialSource(
$this->credential_id,
$this->type,
$this->transports,
$this->attestation_type,
$this->trust_path,
$this->aaguid ?? \Ramsey\Uuid\Uuid::uuid4(),
$this->credential_public_key,
(string) $this->user_id,
$this->counter,
);
}
public function setPublicKeyCredentialSourceAttribute(PublicKeyCredentialSource $source): void
{
$this->credential_id = $source->getPublicKeyCredentialId();
$this->type = $source->getType();
$this->transports = $source->getTransports();
$this->attestation_type = $source->getAttestationType();
$this->trust_path = $source->getTrustPath();
$this->aaguid = $source->getAaguid();
$this->credential_public_key = $source->getCredentialPublicKey();
$this->counter = $source->getCounter();
$this->user_id = $source->getUserHandle();
}
public function user(): \Illuminate\Database\Eloquent\Relations\BelongsTo
{
return $this->belongsTo(User::class, "user_id", "id");
}
}