user.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package passkey
  2. import (
  3. "fmt"
  4. "strconv"
  5. "strings"
  6. "github.com/QuantumNous/new-api/model"
  7. webauthn "github.com/go-webauthn/webauthn/webauthn"
  8. )
  9. type WebAuthnUser struct {
  10. user *model.User
  11. credential *model.PasskeyCredential
  12. }
  13. func NewWebAuthnUser(user *model.User, credential *model.PasskeyCredential) *WebAuthnUser {
  14. return &WebAuthnUser{user: user, credential: credential}
  15. }
  16. func (u *WebAuthnUser) WebAuthnID() []byte {
  17. if u == nil || u.user == nil {
  18. return nil
  19. }
  20. return []byte(strconv.Itoa(u.user.Id))
  21. }
  22. func (u *WebAuthnUser) WebAuthnName() string {
  23. if u == nil || u.user == nil {
  24. return ""
  25. }
  26. name := strings.TrimSpace(u.user.Username)
  27. if name == "" {
  28. return fmt.Sprintf("user-%d", u.user.Id)
  29. }
  30. return name
  31. }
  32. func (u *WebAuthnUser) WebAuthnDisplayName() string {
  33. if u == nil || u.user == nil {
  34. return ""
  35. }
  36. display := strings.TrimSpace(u.user.DisplayName)
  37. if display != "" {
  38. return display
  39. }
  40. return u.WebAuthnName()
  41. }
  42. func (u *WebAuthnUser) WebAuthnCredentials() []webauthn.Credential {
  43. if u == nil || u.credential == nil {
  44. return nil
  45. }
  46. cred := u.credential.ToWebAuthnCredential()
  47. return []webauthn.Credential{cred}
  48. }
  49. func (u *WebAuthnUser) ModelUser() *model.User {
  50. if u == nil {
  51. return nil
  52. }
  53. return u.user
  54. }
  55. func (u *WebAuthnUser) PasskeyCredential() *model.PasskeyCredential {
  56. if u == nil {
  57. return nil
  58. }
  59. return u.credential
  60. }