lubo_comment_query/app/WebAuthn/Repository/PublicKeyCredentialSourceRepositoryImpl.php
2022-08-08 02:07:57 +08:00

70 lines
2.3 KiB
PHP

<?php
namespace App\WebAuthn\Repository;
use App\Models\WebauthnCredential;
use Webauthn\PublicKeyCredentialSource;
use Webauthn\PublicKeyCredentialSourceRepository;
use Webauthn\PublicKeyCredentialUserEntity;
class PublicKeyCredentialSourceRepositoryImpl implements PublicKeyCredentialSourceRepository
{
public function findOneByCredentialId(string $publicKeyCredentialId): ?PublicKeyCredentialSource
{
$model = $this->findOneModelByCredentialId($publicKeyCredentialId);
if ($model) {
return $model->getPublicKeyCredentialSourceAttribute();
} else {
return null;
}
}
/**
* @inheritDoc
*/
public function findAllForUserEntity(PublicKeyCredentialUserEntity $publicKeyCredentialUserEntity): array
{
if ($publicKeyCredentialUserEntity->getId() == 0) {
$modelList = $this->findAllModelByTypeFree();
} else {
$modelList = $this->findAllModelByUserId($publicKeyCredentialUserEntity->getId());
}
return array_map(function (WebauthnCredential $cred) {
return $cred->getPublicKeyCredentialSourceAttribute();
}, $modelList);
}
public function saveCredentialSource(PublicKeyCredentialSource $publicKeyCredentialSource): void
{
$model = $this->findOneModelByCredentialId($publicKeyCredentialSource->getPublicKeyCredentialId());
if ($model === null) {
$model = new WebauthnCredential();
$model->setPublicKeyCredentialSourceAttribute($publicKeyCredentialSource);
}
$model->counter += 1;
$model->last_used_at = now();
$model->save();
}
private function findOneModelByCredentialId(string $publicKeyCredentialId): ?WebauthnCredential
{
/**
* @var WebauthnCredential
*/
return WebauthnCredential::query()->where(function ($query) use ($publicKeyCredentialId) {
$query->where("credential_id", "=", base64_encode($publicKeyCredentialId));
})->first();
}
private function findAllModelByTypeFree(): array
{
return WebauthnCredential::query()->where("type_free", "=", "1")->get()->toArray();
}
private function findAllModelByUserId(string $userId): array
{
return WebauthnCredential::query()->where("user_id", "=", $userId)->get()->toArray();
}
}