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