diff --git a/cmd/data/db.go b/cmd/data/db.go index 0a260e9..361678c 100644 --- a/cmd/data/db.go +++ b/cmd/data/db.go @@ -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 }