2025-05-12 11:30:33 -04:00

50 lines
1.2 KiB
Go

package auth
import (
"strings"
"github.com/go-webauthn/webauthn/protocol"
"github.com/go-webauthn/webauthn/webauthn"
"github.com/spotdemo4/trevstack/server/internal/sqlc"
)
func NewCreds(creds []sqlc.Credential) []webauthn.Credential {
webauthnCreds := []webauthn.Credential{}
for _, c := range creds {
transports := []protocol.AuthenticatorTransport{}
if c.Transports != nil {
for t := range strings.SplitSeq(*c.Transports, " ") {
transports = append(transports, protocol.AuthenticatorTransport(t))
}
}
flags := webauthn.CredentialFlags{}
if c.UserVerified != nil {
flags.UserVerified = *c.UserVerified
}
if c.BackupEligible != nil {
flags.BackupEligible = *c.BackupEligible
}
if c.BackupState != nil {
flags.BackupState = *c.BackupState
}
webauthnCreds = append(webauthnCreds, webauthn.Credential{
ID: []byte(c.CredID),
PublicKey: c.CredPublicKey,
Authenticator: webauthn.Authenticator{
SignCount: uint32(c.SignCount),
},
Transport: transports,
Flags: flags,
Attestation: webauthn.CredentialAttestation{
Object: c.AttestationObject,
ClientDataJSON: c.AttestationClientData,
},
})
}
return webauthnCreds
}