Added ability to update Passwords
This commit is contained in:
		@@ -41,7 +41,7 @@ func (db *DB) AddUser(user, pass, first, last string, writer, editor, admin bool
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if !permissionsOK(writer, editor, admin) {
 | 
						if !permissionsOK(writer, editor, admin) {
 | 
				
			||||||
		return fmt.Errorf("error with mutually exclusive user permissions: writer = %v, editor = %v, admin = %v",
 | 
							return fmt.Errorf("error with mutually exclusive permissions: writer = %v, editor = %v, admin = %v",
 | 
				
			||||||
			writer, editor, admin)
 | 
								writer, editor, admin)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -58,3 +58,39 @@ func (db *DB) AddUser(user, pass, first, last string, writer, editor, admin bool
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (db *DB) ChangePassword(id int64, oldPass, newPass string) error {
 | 
				
			||||||
 | 
						var oldHashedPass string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						selectQuery := `
 | 
				
			||||||
 | 
					    SELECT password FROM
 | 
				
			||||||
 | 
					        users
 | 
				
			||||||
 | 
					    WHERE
 | 
				
			||||||
 | 
					        id = ?
 | 
				
			||||||
 | 
					    `
 | 
				
			||||||
 | 
						row := db.QueryRow(selectQuery, id)
 | 
				
			||||||
 | 
						if err := row.Scan(&oldHashedPass); err != nil {
 | 
				
			||||||
 | 
							return fmt.Errorf("error reading password from DB: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err := bcrypt.CompareHashAndPassword([]byte(oldHashedPass), []byte(oldPass)); err != nil {
 | 
				
			||||||
 | 
							return fmt.Errorf("error checking password: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						newHashedPass, err := bcrypt.GenerateFromPassword([]byte(newPass), bcrypt.DefaultCost)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return fmt.Errorf("error creating password hash: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						updateQuery := `
 | 
				
			||||||
 | 
					    UPDATE users
 | 
				
			||||||
 | 
					    SET password = ?
 | 
				
			||||||
 | 
					    WHERE id = ?
 | 
				
			||||||
 | 
					    `
 | 
				
			||||||
 | 
						_, err = db.Exec(updateQuery, newHashedPass, id)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return fmt.Errorf("error updating password in DB: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user