99 "strings"
1010
1111 "code.gitea.io/gitea/models/db"
12- "code.gitea.io/gitea/modules/json"
13- "code.gitea.io/gitea/modules/log"
1412 "code.gitea.io/gitea/modules/timeutil"
1513 "code.gitea.io/gitea/modules/util"
1614
@@ -52,7 +50,6 @@ type WebAuthnCredential struct {
5250 PublicKey []byte
5351 AttestationType string
5452 AAGUID []byte
55- CredentialFlags string `xorm:"TEXT"`
5653 SignCount uint32 `xorm:"BIGINT"`
5754 CloneWarning bool
5855 CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"`
@@ -96,14 +93,6 @@ type WebAuthnCredentialList []*WebAuthnCredential
9693func (list WebAuthnCredentialList ) ToCredentials () []webauthn.Credential {
9794 creds := make ([]webauthn.Credential , 0 , len (list ))
9895 for _ , cred := range list {
99- var flags webauthn.CredentialFlags
100- if cred .CredentialFlags != "" {
101- err := json .Unmarshal ([]byte (cred .CredentialFlags ), & flags )
102- if err != nil {
103- log .Error ("Failed to unmarshal CredentialFlags, webauthn credential id:%d, err:%v" , cred .ID , err )
104- continue
105- }
106- }
10796 creds = append (creds , webauthn.Credential {
10897 ID : cred .CredentialID ,
10998 PublicKey : cred .PublicKey ,
@@ -113,7 +102,6 @@ func (list WebAuthnCredentialList) ToCredentials() []webauthn.Credential {
113102 SignCount : cred .SignCount ,
114103 CloneWarning : cred .CloneWarning ,
115104 },
116- Flags : flags ,
117105 })
118106 }
119107 return creds
@@ -170,18 +158,13 @@ func GetWebAuthnCredentialByCredID(ctx context.Context, userID int64, credID []b
170158
171159// CreateCredential will create a new WebAuthnCredential from the given Credential
172160func CreateCredential (ctx context.Context , userID int64 , name string , cred * webauthn.Credential ) (* WebAuthnCredential , error ) {
173- flagsJSON , err := json .Marshal (cred .Flags )
174- if err != nil {
175- return nil , err
176- }
177161 c := & WebAuthnCredential {
178162 UserID : userID ,
179163 Name : name ,
180164 CredentialID : cred .ID ,
181165 PublicKey : cred .PublicKey ,
182166 AttestationType : cred .AttestationType ,
183167 AAGUID : cred .Authenticator .AAGUID ,
184- CredentialFlags : string (flagsJSON ),
185168 SignCount : cred .Authenticator .SignCount ,
186169 CloneWarning : false ,
187170 }
@@ -197,3 +180,13 @@ func DeleteCredential(ctx context.Context, id, userID int64) (bool, error) {
197180 had , err := db .GetEngine (ctx ).ID (id ).Where ("user_id = ?" , userID ).Delete (& WebAuthnCredential {})
198181 return had > 0 , err
199182}
183+
184+ // WebAuthnCredentials implements the webauthn.User interface
185+ func WebAuthnCredentials (ctx context.Context , userID int64 ) ([]webauthn.Credential , error ) {
186+ dbCreds , err := GetWebAuthnCredentialsByUID (ctx , userID )
187+ if err != nil {
188+ return nil , err
189+ }
190+
191+ return dbCreds .ToCredentials (), nil
192+ }
0 commit comments