From 3822a3f30e6ee2a5e59da30902f6cd172ad915fa Mon Sep 17 00:00:00 2001 From: Jason Streifling Date: Wed, 6 Mar 2024 15:37:59 +0100 Subject: [PATCH] Use transaction when necessary --- cmd/data/db.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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 }