// RegisterWithPassword creates a new user with the given name and password. // connID is the connector ID of the ConnectorLocal connector. func (m *UserManager) RegisterWithPassword(email, plaintext, connID string) (string, error) { tx, err := m.begin() if err != nil { return "", err } if !user.ValidPassword(plaintext) { rollback(tx) return "", user.ErrorInvalidPassword } usr, err := m.insertNewUser(tx, email, false) if err != nil { rollback(tx) return "", err } rid := user.RemoteIdentity{ ConnectorID: connID, ID: usr.ID, } if err := m.addRemoteIdentity(tx, usr.ID, rid); err != nil { rollback(tx) return "", err } password, err := user.NewPasswordFromPlaintext(plaintext) if err != nil { rollback(tx) return "", err } pwi := user.PasswordInfo{ UserID: usr.ID, Password: password, } err = m.pwRepo.Create(tx, pwi) if err != nil { rollback(tx) return "", err } err = tx.Commit() if err != nil { rollback(tx) return "", err } return usr.ID, nil }
func (g *grpcServer) ChangeUserPass(userID string, plaintext string, oldPassword string) error { tx, err := g.begin() if err != nil { return err } if !user.ValidPassword(plaintext) { rollback(tx) return user.ErrorInvalidPassword } pwi, err := g.server.PasswordInfoRepo.Get(tx, userID) if err != nil { rollback(tx) return err } _, err = pwi.Authenticate(oldPassword) if err != nil { rollback(tx) return user.ErrorPasswordHashNoMatch } newPass, err := user.NewPasswordFromPlaintext(plaintext) if err != nil { rollback(tx) return err } pwi.Password = newPass err = g.server.PasswordInfoRepo.Update(tx, pwi) if err != nil { rollback(tx) return err } err = tx.Commit() if err != nil { rollback(tx) return err } return nil }
func (m *UserManager) ChangePassword(pwr PasswordChangeable, plaintext string) (*url.URL, error) { tx, err := m.begin() if err != nil { return nil, err } if !user.ValidPassword(plaintext) { rollback(tx) return nil, user.ErrorInvalidPassword } pwi, err := m.pwRepo.Get(tx, pwr.UserID()) if err != nil { rollback(tx) return nil, err } if string(pwi.Password) != string(pwr.Password()) { rollback(tx) return nil, ErrorPasswordAlreadyChanged } newPass, err := user.NewPasswordFromPlaintext(plaintext) if err != nil { rollback(tx) return nil, err } pwi.Password = newPass err = m.pwRepo.Update(tx, pwi) if err != nil { rollback(tx) return nil, err } err = tx.Commit() if err != nil { rollback(tx) return nil, err } return pwr.Callback(), nil }