| package passkey |
|
|
| import ( |
| "fmt" |
| "strconv" |
| "strings" |
|
|
| "github.com/QuantumNous/new-api/model" |
|
|
| webauthn "github.com/go-webauthn/webauthn/webauthn" |
| ) |
|
|
| type WebAuthnUser struct { |
| user *model.User |
| credential *model.PasskeyCredential |
| } |
|
|
| func NewWebAuthnUser(user *model.User, credential *model.PasskeyCredential) *WebAuthnUser { |
| return &WebAuthnUser{user: user, credential: credential} |
| } |
|
|
| func (u *WebAuthnUser) WebAuthnID() []byte { |
| if u == nil || u.user == nil { |
| return nil |
| } |
| return []byte(strconv.Itoa(u.user.Id)) |
| } |
|
|
| func (u *WebAuthnUser) WebAuthnName() string { |
| if u == nil || u.user == nil { |
| return "" |
| } |
| name := strings.TrimSpace(u.user.Username) |
| if name == "" { |
| return fmt.Sprintf("user-%d", u.user.Id) |
| } |
| return name |
| } |
|
|
| func (u *WebAuthnUser) WebAuthnDisplayName() string { |
| if u == nil || u.user == nil { |
| return "" |
| } |
| display := strings.TrimSpace(u.user.DisplayName) |
| if display != "" { |
| return display |
| } |
| return u.WebAuthnName() |
| } |
|
|
| func (u *WebAuthnUser) WebAuthnCredentials() []webauthn.Credential { |
| if u == nil || u.credential == nil { |
| return nil |
| } |
| cred := u.credential.ToWebAuthnCredential() |
| return []webauthn.Credential{cred} |
| } |
|
|
| func (u *WebAuthnUser) ModelUser() *model.User { |
| if u == nil { |
| return nil |
| } |
| return u.user |
| } |
|
|
| func (u *WebAuthnUser) PasskeyCredential() *model.PasskeyCredential { |
| if u == nil { |
| return nil |
| } |
| return u.credential |
| } |
|
|