99 "strings"
1010
1111 "code.gitea.io/gitea/models/db"
12+ "code.gitea.io/gitea/modules/json"
13+ "code.gitea.io/gitea/modules/log"
1214 "code.gitea.io/gitea/modules/timeutil"
1315 "code.gitea.io/gitea/modules/util"
1416
@@ -51,7 +53,7 @@ type WebAuthnCredential struct {
5153 PublicKey []byte
5254 AttestationType string
5355 AAGUID []byte
54- Flags protocol. AuthenticatorFlags
56+ CredentialFlags string `xorm:"TEXT DEFAULT ''"`
5557 SignCount uint32 `xorm:"BIGINT"`
5658 CloneWarning bool
5759 CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"`
@@ -95,6 +97,14 @@ type WebAuthnCredentialList []*WebAuthnCredential
9597func (list WebAuthnCredentialList ) ToCredentials () []webauthn.Credential {
9698 creds := make ([]webauthn.Credential , 0 , len (list ))
9799 for _ , cred := range list {
100+ var flags webauthn.CredentialFlags
101+ if cred .CredentialFlags != "" {
102+ err := json .Unmarshal ([]byte (cred .CredentialFlags ), & flags )
103+ if err != nil {
104+ log .Error ("Failed to unmarshal CredentialFlags, webauthn credential id:%d, err:%v" , cred .ID , err )
105+ continue
106+ }
107+ }
98108 creds = append (creds , webauthn.Credential {
99109 ID : cred .CredentialID ,
100110 PublicKey : cred .PublicKey ,
@@ -104,12 +114,7 @@ func (list WebAuthnCredentialList) ToCredentials() []webauthn.Credential {
104114 SignCount : cred .SignCount ,
105115 CloneWarning : cred .CloneWarning ,
106116 },
107- Flags : webauthn.CredentialFlags {
108- UserPresent : cred .Flags .HasUserPresent (),
109- UserVerified : cred .Flags .HasUserVerified (),
110- BackupEligible : cred .Flags .HasBackupEligible (),
111- BackupState : cred .Flags .HasBackupState (),
112- },
117+ Flags : flags ,
113118 })
114119 }
115120 return creds
@@ -179,14 +184,18 @@ func CreateCredential(ctx context.Context, userID int64, name string, cred *weba
179184 if cred .Flags .BackupState {
180185 flags |= protocol .FlagBackupState
181186 }
187+ flagsJSON , err := json .Marshal (cred .Flags )
188+ if err != nil {
189+ return nil , err
190+ }
182191 c := & WebAuthnCredential {
183192 UserID : userID ,
184193 Name : name ,
185194 CredentialID : cred .ID ,
186195 PublicKey : cred .PublicKey ,
187196 AttestationType : cred .AttestationType ,
188197 AAGUID : cred .Authenticator .AAGUID ,
189- Flags : flags ,
198+ CredentialFlags : string ( flagsJSON ) ,
190199 SignCount : cred .Authenticator .SignCount ,
191200 CloneWarning : false ,
192201 }
0 commit comments