forked from jason/cpolis
		
	Use transaction when necessary
This commit is contained in:
		@@ -89,12 +89,19 @@ func (db *DB) CheckPassword(id int64, pass string) error {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (db *DB) ChangePassword(id int64, oldPass, newPass string) error {
 | 
			
		||||
	tx, err := db.Begin()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fmt.Errorf("error starting transaction: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := db.CheckPassword(id, oldPass); err != nil {
 | 
			
		||||
		tx.Rollback()
 | 
			
		||||
		return fmt.Errorf("error checking password: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	newHashedPass, err := bcrypt.GenerateFromPassword([]byte(newPass), bcrypt.DefaultCost)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		tx.Rollback()
 | 
			
		||||
		return fmt.Errorf("error creating password hash: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -104,9 +111,14 @@ func (db *DB) ChangePassword(id int64, oldPass, newPass string) error {
 | 
			
		||||
    WHERE id = ?
 | 
			
		||||
    `
 | 
			
		||||
	if _, err = db.Exec(query, string(newHashedPass), id); err != nil {
 | 
			
		||||
		tx.Rollback()
 | 
			
		||||
		return fmt.Errorf("error updating password in DB: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err = tx.Commit(); err != nil {
 | 
			
		||||
		return fmt.Errorf("error committing transaction: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user