auth.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package model
  2. import (
  3. "github.com/go-webauthn/webauthn/webauthn"
  4. "github.com/spf13/cast"
  5. )
  6. type User struct {
  7. Model
  8. Name string `json:"name"`
  9. Password string `json:"-"`
  10. Status bool `json:"status" gorm:"default:1"`
  11. OTPSecret []byte `json:"-" gorm:"type:blob"`
  12. }
  13. type AuthToken struct {
  14. UserID int `json:"user_id"`
  15. Token string `json:"token"`
  16. ExpiredAt int64 `json:"expired_at" gorm:"default:0"`
  17. }
  18. func (u *User) TableName() string {
  19. return "auths"
  20. }
  21. func (u *User) EnabledOTP() bool {
  22. return len(u.OTPSecret) != 0
  23. }
  24. func (u *User) EnabledPasskey() bool {
  25. var passkeys Passkey
  26. db.Where("user_id", u.ID).First(&passkeys)
  27. return passkeys.ID != 0
  28. }
  29. func (u *User) Enabled2FA() bool {
  30. return u.EnabledOTP() || u.EnabledPasskey()
  31. }
  32. func (u *User) WebAuthnID() []byte {
  33. return []byte(cast.ToString(u.ID))
  34. }
  35. func (u *User) WebAuthnName() string {
  36. return u.Name
  37. }
  38. func (u *User) WebAuthnDisplayName() string {
  39. return u.Name
  40. }
  41. func (u *User) WebAuthnCredentials() (credentials []webauthn.Credential) {
  42. var passkeys []Passkey
  43. db.Where("user_id", u.ID).Find(&passkeys)
  44. for _, passkey := range passkeys {
  45. credentials = append(credentials, *passkey.Credential)
  46. }
  47. return
  48. }