// UpdateUserPassword updates an existing user's password and token in the database. func UpdateUserPassword(context interface{}, db *db.DB, u *User, password string) error { log.Dev(context, "UpdateUserPassword", "Started : PublicID[%s]", u.PublicID) if err := u.Validate(); err != nil { log.Error(context, "UpdateUserPassword", err, "Completed") return err } if len(password) < 8 { err := errors.New("Invalid password length") log.Error(context, "UpdateUserPassword", err, "Completed") return err } newPassHash, err := crypto.BcryptPassword(u.PrivateID + password) if err != nil { log.Error(context, "UpdateUserPassword", err, "Completed") return err } f := func(c *mgo.Collection) error { q := bson.M{"public_id": u.PublicID} upd := bson.M{"$set": bson.M{"password": newPassHash, "modified_at": time.Now().UTC()}} log.Dev(context, "UpdateUserPassword", "MGO : db.%s.Update(%s, CAN'T SHOW)", c.Name, mongo.Query(q)) return c.Update(q, upd) } if err := db.ExecuteMGO(context, Collection, f); err != nil { log.Error(context, "UpdateUserPassword", err, "Completed") return err } log.Dev(context, "UpdateUserPassword", "Completed") return nil }
// NewUser creates a new user from a NewUser value. func NewUser(nu NUser) (*User, error) { if err := nu.Validate(); err != nil { return nil, err } u := User{ PublicID: uuid.New(), PrivateID: uuid.New(), Status: StatusActive, FullName: nu.FullName, Email: strings.ToLower(nu.Email), DateModified: time.Now(), DateCreated: time.Now(), IsDeleted: false, } var err error if u.Password, err = crypto.BcryptPassword(u.PrivateID + nu.Password); err != nil { return nil, err } return &u, nil }