71 lines
1.7 KiB
Go
71 lines
1.7 KiB
Go
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"
|