1212use OC \Authentication \WebAuthn \Db \PublicKeyCredentialEntity ;
1313use OC \Authentication \WebAuthn \Db \PublicKeyCredentialMapper ;
1414use OCP \AppFramework \Db \IMapperException ;
15- use Webauthn \PublicKeyCredentialSource ;
16- use Webauthn \PublicKeyCredentialSourceRepository ;
15+ use Webauthn \AttestationStatement \AttestationStatementSupportManager ;
16+ use Webauthn \AttestationStatement \NoneAttestationStatementSupport ;
17+ use Webauthn \CredentialRecord ;
18+ use Webauthn \Denormalizer \WebauthnSerializerFactory ;
1719use Webauthn \PublicKeyCredentialUserEntity ;
1820
19- class CredentialRepository implements PublicKeyCredentialSourceRepository {
21+ class CredentialRepository {
22+ private WebauthnSerializerFactory $ serializerFactory ;
23+
2024 public function __construct (
2125 private PublicKeyCredentialMapper $ credentialMapper ,
2226 ) {
27+ $ attestationStatementSupportManager = AttestationStatementSupportManager::create ();
28+ $ attestationStatementSupportManager ->add (NoneAttestationStatementSupport::create ());
29+ $ this ->serializerFactory = new WebauthnSerializerFactory ($ attestationStatementSupportManager );
2330 }
2431
25- #[\Override]
26- public function findOneByCredentialId (string $ publicKeyCredentialId ): ?PublicKeyCredentialSource {
32+ public function findOneByCredentialId (string $ publicKeyCredentialId ): ?CredentialRecord {
2733 try {
2834 $ entity = $ this ->credentialMapper ->findOneByCredentialId ($ publicKeyCredentialId );
29- return $ entity -> toPublicKeyCredentialSource ( );
30- } catch (IMapperException $ e ) {
35+ return $ this -> mapToCredentialRecord ( $ entity );
36+ } catch (IMapperException ) {
3137 return null ;
3238 }
3339 }
3440
3541 /**
36- * @return PublicKeyCredentialSource []
42+ * @return CredentialRecord []
3743 */
38- #[\Override]
3944 public function findAllForUserEntity (PublicKeyCredentialUserEntity $ publicKeyCredentialUserEntity ): array {
40- $ uid = $ publicKeyCredentialUserEntity ->getId () ;
45+ $ uid = $ publicKeyCredentialUserEntity ->id ;
4146 $ entities = $ this ->credentialMapper ->findAllForUid ($ uid );
4247
43- return array_map (function (PublicKeyCredentialEntity $ entity ) {
44- return $ entity ->toPublicKeyCredentialSource ();
45- }, $ entities );
48+ return array_map ($ this ->mapToCredentialRecord (...), $ entities );
4649 }
4750
48- public function saveAndReturnCredentialSource ( PublicKeyCredentialSource $ publicKeyCredentialSource , ?string $ name = null , bool $ userVerification = false ): PublicKeyCredentialEntity {
51+ public function saveCredentialSource ( CredentialRecord $ credentialRecord , ?string $ name = null , bool $ userVerification = false ): PublicKeyCredentialEntity {
4952 $ oldEntity = null ;
5053
5154 try {
52- $ oldEntity = $ this ->credentialMapper ->findOneByCredentialId ($ publicKeyCredentialSource -> getPublicKeyCredentialId () );
55+ $ oldEntity = $ this ->credentialMapper ->findOneByCredentialId ($ credentialRecord -> publicKeyCredentialId );
5356 } catch (IMapperException $ e ) {
5457 }
5558
@@ -59,7 +62,13 @@ public function saveAndReturnCredentialSource(PublicKeyCredentialSource $publicK
5962 $ name = 'default ' ;
6063 }
6164
62- $ entity = PublicKeyCredentialEntity::fromPublicKeyCrendentialSource ($ name , $ publicKeyCredentialSource , $ userVerification );
65+ $ credentialId = base64_encode ($ credentialRecord ->publicKeyCredentialId );
66+ $ entity = new PublicKeyCredentialEntity ();
67+ $ entity ->setName ($ name );
68+ $ entity ->setUid ($ credentialRecord ->userHandle );
69+ $ entity ->setUserVerification ($ userVerification );
70+ $ entity ->setPublicKeyCredentialId ($ credentialId );
71+ $ entity ->setData ($ this ->serializeCredentialRecord ($ credentialRecord ));
6372
6473 if ($ oldEntity ) {
6574 $ entity ->setId ($ oldEntity ->getId ());
@@ -76,8 +85,17 @@ public function saveAndReturnCredentialSource(PublicKeyCredentialSource $publicK
7685 return $ this ->credentialMapper ->insertOrUpdate ($ entity );
7786 }
7887
79- #[\Override]
80- public function saveCredentialSource (PublicKeyCredentialSource $ publicKeyCredentialSource , ?string $ name = null ): void {
81- $ this ->saveAndReturnCredentialSource ($ publicKeyCredentialSource , $ name );
88+ public function mapToCredentialRecord (PublicKeyCredentialEntity $ entity ): CredentialRecord {
89+ $ serializer = $ this ->serializerFactory ->create ();
90+ return $ serializer ->deserialize (
91+ $ entity ->getData (),
92+ CredentialRecord::class,
93+ 'json ' ,
94+ );
95+ }
96+
97+ private function serializeCredentialRecord (CredentialRecord $ credentialRecord ): string {
98+ $ serializer = $ this ->serializerFactory ->create ();
99+ return $ serializer ->serialize ($ credentialRecord , 'json ' );
82100 }
83101}
0 commit comments