* @link http://www.oxidmodule.com */ declare(strict_types=1); namespace D3\Webauthn\Application\Model\Webauthn; use D3\Webauthn\Application\Model\Credential\PublicKeyCredential; use D3\Webauthn\Application\Model\Credential\PublicKeyCredentialList; use Exception; use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException; use OxidEsales\Eshop\Core\Exception\DatabaseErrorException; use OxidEsales\Eshop\Core\Registry; use Webauthn\PublicKeyCredentialSource; use Webauthn\PublicKeyCredentialSourceRepository; use Webauthn\PublicKeyCredentialUserEntity; class d3PublicKeyCredentialSourceRepository implements PublicKeyCredentialSourceRepository { /** * @param string $publicKeyCredentialId * @return PublicKeyCredentialSource|null * @throws DatabaseConnectionException */ public function findOneByCredentialId(string $publicKeyCredentialId): ?PublicKeyCredentialSource { if (Registry::getRequest()->getRequestEscapedParameter('fnc') == 'checkregister') { return null; } $credential = oxNew(publicKeyCredential::class); $credential->loadByCredentialId($publicKeyCredentialId); return $credential->getId() ? d3PublicKeyCredentialSource::createFromd3PublicKeyCredential($credential) : null; } /** * @param PublicKeyCredentialUserEntity $publicKeyCredentialUserEntity * @return array * @throws DatabaseConnectionException * @throws DatabaseErrorException */ public function findAllForUserEntity(PublicKeyCredentialUserEntity $publicKeyCredentialUserEntity): array { $sourceList = []; $credentialList = oxNew(PublicKeyCredentialList::class); $credentialList->loadAllForUserEntity($publicKeyCredentialUserEntity); /** @var publicKeyCredential $credential */ foreach ($credentialList->getArray() as $credential) { $sourceList[$credential->getId()] = d3PublicKeyCredentialSource::createFromd3PublicKeyCredential($credential); }; return $sourceList; } /** * @param PublicKeyCredentialSource $publicKeyCredentialSource * @throws Exception */ public function saveCredentialSource(PublicKeyCredentialSource $publicKeyCredentialSource): void { $publicKeyCredentialSource = d3PublicKeyCredentialSource::createFromPublicKeyCredentialSource($publicKeyCredentialSource); if ($this->findOneByCredentialId($publicKeyCredentialSource->getPublicKeyCredentialId())) { // increase counter } else { $publicKeyCredentialSource->saveCredential(); } } }