package model import ( "git.sendico.io/tech/sxchnge/shared/database/record" sharedmodel "git.sendico.io/tech/sxchnge/shared/model" "git.sendico.io/tech/sxchnge/shared/service" "golang.org/x/crypto/bcrypt" ) type Filter int type AccountStatus string const ( AccountPendingVerification AccountStatus = "pending_verification" AccountActive AccountStatus = "active" AccountBlocked AccountStatus = "blocked" ) type AccountBase struct { storable.Base `bson:",inline" json:",inline"` sharedmodel.ArchivableBase `bson:",inline" json:",inline"` sharedmodel.Describable `bson:",inline" json:",inline"` LastName string `bson:"lastName" json:"lastName"` AvatarURL *string `bson:"avatarUrl,omitempty" json:"avatarUrl,omitempty"` } func (*AccountBase) Collection() string { return mservice.Accounts } type AccountPublic struct { AccountBase `bson:",inline" json:",inline"` UserDataBase `bson:",inline" json:",inline"` } type Account struct { AccountPublic `bson:",inline" json:",inline"` Password string `bson:"password" json:"-"` // password hash Status AccountStatus `bson:"status" json:"-"` } func (a *Account) Copy() *Account { if a == nil { return nil } copied := *a return &copied } func (a *Account) IsActive() bool { return a.Status == AccountActive } func (a *Account) HashPassword() error { key, err := bcrypt.GenerateFromPassword([]byte(a.Password), bcrypt.DefaultCost) if err == nil { a.Password = string(key) } return err } func (a *Account) MatchPassword(password string) bool { err := bcrypt.CompareHashAndPassword([]byte(a.Password), []byte(password)) return err == nil } const AccountRefField = "accountRef"