forked from alterminal/alterminal
fixup
This commit is contained in:
@@ -117,10 +117,9 @@ func (in *accountInput) validate() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
const minPasswordLen = 8
|
||||
|
||||
// resolvePassword 回傳帳號密碼:有 -password 旗標時直接使用,
|
||||
// 否則須於終端機以無回顯方式輸入兩次;非終端機環境不得省略旗標。
|
||||
// 最小長度採 auth.MinPasswordLen(與網頁更新密碼流程一致)。
|
||||
func resolvePassword(flagPassword string) (string, error) {
|
||||
password := flagPassword
|
||||
if password == "" {
|
||||
@@ -133,8 +132,8 @@ func resolvePassword(flagPassword string) (string, error) {
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
if len(password) < minPasswordLen {
|
||||
return "", fmt.Errorf("密碼長度至少 %d 字元", minPasswordLen)
|
||||
if len(password) < auth.MinPasswordLen {
|
||||
return "", fmt.Errorf("密碼長度至少 %d 字元", auth.MinPasswordLen)
|
||||
}
|
||||
return password, nil
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ func runUpdatePassword(args []string) error {
|
||||
if err := u.SetPassword(pw); err != nil {
|
||||
return fmt.Errorf("hash password: %w", err)
|
||||
}
|
||||
revoked, err := updateUserPassword(db, u)
|
||||
revoked, err := auth.UpdateUserPassword(db, u)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -62,21 +62,3 @@ func findUserByUsername(db *gorm.DB, username string) (*auth.User, error) {
|
||||
}
|
||||
return &u, nil
|
||||
}
|
||||
|
||||
// updateUserPassword 於單一交易內寫入新密碼雜湊並刪除該使用者所有
|
||||
// Session,回傳撤銷的 Session 數;交易確保密碼與 Session 不會只更新一半。
|
||||
func updateUserPassword(db *gorm.DB, u *auth.User) (int64, error) {
|
||||
var revoked int64
|
||||
err := db.Transaction(func(tx *gorm.DB) error {
|
||||
if err := tx.Model(u).Update("password_hash", u.PasswordHash).Error; err != nil {
|
||||
return fmt.Errorf("update password: %w", err)
|
||||
}
|
||||
res := tx.Where("user_id = ?", u.ID).Delete(&auth.Session{})
|
||||
if res.Error != nil {
|
||||
return fmt.Errorf("delete sessions: %w", res.Error)
|
||||
}
|
||||
revoked = res.RowsAffected
|
||||
return nil
|
||||
})
|
||||
return revoked, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user