package model import ( "github.com/tech/sendico/pkg/db/storable" "github.com/tech/sendico/pkg/mservice" "go.mongodb.org/mongo-driver/bson/primitive" "golang.org/x/crypto/bcrypt" ) type Filter int type AccountBase struct { storable.Base `bson:",inline" json:",inline"` ArchivableBase `bson:",inline" json:",inline"` 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"` EmailBackup string `bson:"emailBackup" json:"emailBackup"` Password string `bson:"password" json:"password"` ResetPasswordToken string `bson:"resetPasswordToken" json:"resetPasswordToken"` VerifyToken string `bson:"verifyToken" json:"verifyToken"` } 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 } func AnonymousUserName(orgRef primitive.ObjectID) string { return "anonymous@" + orgRef.Hex() } func AccountIsAnonymous(account *UserDataBase, orgRef primitive.ObjectID) bool { if account == nil { return false } return AnonymousUserName(orgRef) == account.Login } type AccountBound interface { GetAccountRef() primitive.ObjectID } type AccountBoundStorable interface { storable.Storable OrganizationBound GetAccountRef() *primitive.ObjectID } const ( AccountRefField = "accountRef" ) type AccountBoundBase struct { storable.Base `bson:",inline" json:",inline"` OrganizationBoundBase `bson:",inline" json:",inline"` AccountRef *primitive.ObjectID `bson:"accountRef,omitempty" json:"accountRef,omitempty"` } func (a *AccountBoundBase) GetAccountRef() *primitive.ObjectID { return a.AccountRef }