user.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package model
  2. import "time"
  3. // User represents a system user with role-based access control.
  4. type User struct {
  5. ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
  6. Username string `gorm:"uniqueIndex;size:50;not null" json:"username"`
  7. Password string `gorm:"size:255;not null" json:"-"` // bcrypt hash, never exposed in JSON
  8. Nickname string `gorm:"size:100" json:"nickname"`
  9. Role string `gorm:"size:20;not null;default:'viewer'" json:"role"` // admin / operator / viewer
  10. Enabled bool `gorm:"default:true" json:"enabled"`
  11. MustChangePassword bool `gorm:"default:false" json:"must_change_password"`
  12. LastLoginAt *time.Time `json:"last_login_at"`
  13. LastLoginIP string `gorm:"size:45" json:"last_login_ip"`
  14. CreatedAt time.Time `json:"created_at"`
  15. UpdatedAt time.Time `json:"updated_at"`
  16. }
  17. // TgAccount represents a Telegram account managed via the admin panel.
  18. type TgAccount struct {
  19. ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
  20. Phone string `gorm:"uniqueIndex;size:50;not null" json:"phone"`
  21. SessionFile string `gorm:"size:500;not null" json:"session_file"`
  22. AppID int `gorm:"not null" json:"app_id"`
  23. AppHash string `gorm:"size:100;not null" json:"app_hash"`
  24. Remark string `gorm:"size:255" json:"remark"`
  25. Enabled bool `gorm:"default:true" json:"enabled"`
  26. Status string `gorm:"size:20;default:'idle'" json:"status"` // idle / online / cooling
  27. // Protocol-number import additions (all nullable to keep legacy rows valid).
  28. TwoFAEnc []byte `gorm:"type:varbinary(255)" json:"-"` // AES-GCM ciphertext; never emitted in JSON
  29. Device string `gorm:"size:100" json:"device"` // e.g. "Xiaomi Mix 4"
  30. AppVersion string `gorm:"size:50" json:"app_version"` // e.g. "12.0.0 (6163)"
  31. SDK string `gorm:"size:100" json:"sdk"` // e.g. "Android 13 (33)"
  32. LangPack string `gorm:"size:50" json:"lang_pack"` // e.g. "android"
  33. LangCode string `gorm:"size:20" json:"lang_code"` // e.g. "en"
  34. SystemLangCode string `gorm:"size:20" json:"system_lang_code"` // e.g. "en-US"
  35. FirstName string `gorm:"size:100" json:"first_name"`
  36. LastName string `gorm:"size:100" json:"last_name"`
  37. TgUsername string `gorm:"size:100;column:tg_username" json:"tg_username"`
  38. OriginDir string `gorm:"size:500" json:"origin_dir"` // sessions/<phone>.origin/ absolute path
  39. ImportStatus string `gorm:"size:20" json:"import_status"` // ok / session_invalid / dead
  40. Source string `gorm:"size:20" json:"source"` // protocol / manual
  41. CreatedAt time.Time `json:"created_at"`
  42. UpdatedAt time.Time `json:"updated_at"`
  43. }