Skip to content

Commit f8f8109

Browse files
committed
move SaltGeneration into HashPasswort and rename it to what it does
1 parent 4614060 commit f8f8109

File tree

8 files changed

+34
-32
lines changed

8 files changed

+34
-32
lines changed

cmd/admin.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -349,12 +349,11 @@ func runChangePassword(c *cli.Context) error {
349349
if err != nil {
350350
return err
351351
}
352-
if user.Salt, err = models.GetUserSalt(); err != nil {
352+
if err = user.SetPassword(c.String("password")); err != nil {
353353
return err
354354
}
355-
user.HashPassword(c.String("password"))
356355

357-
if err := models.UpdateUserCols(user, "passwd", "passwd_hash_algo", "salt"); err != nil {
356+
if err = models.UpdateUserCols(user, "passwd", "passwd_hash_algo", "salt"); err != nil {
358357
return err
359358
}
360359

models/login_source.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -771,8 +771,10 @@ func UserSignIn(username, password string) (*User, error) {
771771

772772
// Update password hash if server password hash algorithm have changed
773773
if user.PasswdHashAlgo != setting.PasswordHashAlgo {
774-
user.HashPassword(password)
775-
if err := UpdateUserCols(user, "passwd", "passwd_hash_algo"); err != nil {
774+
if err = user.SetPassword(password); err != nil {
775+
return nil, err
776+
}
777+
if err := UpdateUserCols(user, "passwd", "passwd_hash_algo", "salt"); err != nil {
776778
return nil, err
777779
}
778780
}

models/user.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -395,10 +395,16 @@ func hashPassword(passwd, salt, algo string) string {
395395
return fmt.Sprintf("%x", tempPasswd)
396396
}
397397

398-
// HashPassword hashes a password using the algorithm defined in the config value of PASSWORD_HASH_ALGO.
399-
func (u *User) HashPassword(passwd string) {
398+
// SetPassword hashes a password using the algorithm defined in the config value of PASSWORD_HASH_ALGO
399+
// change passwd, salt and passwd_hash_algo fields
400+
func (u *User) SetPassword(passwd string) (err error) {
401+
if u.Salt, err = GetUserSalt(); err != nil {
402+
return err
403+
}
400404
u.PasswdHashAlgo = setting.PasswordHashAlgo
401405
u.Passwd = hashPassword(passwd, u.Salt, setting.PasswordHashAlgo)
406+
407+
return nil
402408
}
403409

404410
// ValidatePassword checks if given password matches the one belongs to the user.
@@ -416,7 +422,7 @@ func (u *User) ValidatePassword(passwd string) bool {
416422

417423
// IsPasswordSet checks if the password is set or left empty
418424
func (u *User) IsPasswordSet() bool {
419-
return !u.ValidatePassword("")
425+
return len(u.Passwd) != 0
420426
}
421427

422428
// IsOrganization returns true if user is actually a organization.
@@ -826,10 +832,9 @@ func CreateUser(u *User) (err error) {
826832
if u.Rands, err = GetUserSalt(); err != nil {
827833
return err
828834
}
829-
if u.Salt, err = GetUserSalt(); err != nil {
835+
if err = u.SetPassword(u.Passwd); err != nil {
830836
return err
831837
}
832-
u.HashPassword(u.Passwd)
833838
u.AllowCreateOrganization = setting.Service.DefaultAllowCreateOrganization && !setting.Admin.DisableRegularOrgCreation
834839
u.EmailNotificationsPreference = setting.Admin.DefaultEmailNotification
835840
u.MaxRepoCreation = -1

models/user_test.go

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -220,8 +220,7 @@ func TestEmailNotificationPreferences(t *testing.T) {
220220

221221
func TestHashPasswordDeterministic(t *testing.T) {
222222
b := make([]byte, 16)
223-
rand.Read(b)
224-
u := &User{Salt: string(b)}
223+
u := &User{}
225224
algos := []string{"argon2", "pbkdf2", "scrypt", "bcrypt"}
226225
for j := 0; j < len(algos); j++ {
227226
u.PasswdHashAlgo = algos[j]
@@ -231,19 +230,15 @@ func TestHashPasswordDeterministic(t *testing.T) {
231230
pass := string(b)
232231

233232
// save the current password in the user - hash it and store the result
234-
u.HashPassword(pass)
233+
u.SetPassword(pass)
235234
r1 := u.Passwd
236235

237236
// run again
238-
u.HashPassword(pass)
237+
u.SetPassword(pass)
239238
r2 := u.Passwd
240239

241-
// assert equal (given the same salt+pass, the same result is produced) except bcrypt
242-
if u.PasswdHashAlgo == "bcrypt" {
243-
assert.NotEqual(t, r1, r2)
244-
} else {
245-
assert.Equal(t, r1, r2)
246-
}
240+
assert.NotEqual(t, r1, r2)
241+
assert.True(t, u.ValidatePassword(pass))
247242
}
248243
}
249244
}
@@ -252,12 +247,10 @@ func BenchmarkHashPassword(b *testing.B) {
252247
// BenchmarkHashPassword ensures that it takes a reasonable amount of time
253248
// to hash a password - in order to protect from brute-force attacks.
254249
pass := "password1337"
255-
bs := make([]byte, 16)
256-
rand.Read(bs)
257-
u := &User{Salt: string(bs), Passwd: pass}
250+
u := &User{Passwd: pass}
258251
b.ResetTimer()
259252
for i := 0; i < b.N; i++ {
260-
u.HashPassword(pass)
253+
u.SetPassword(pass)
261254
}
262255
}
263256

routers/admin/users.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,10 @@ func EditUserPost(ctx *context.Context, form auth.AdminEditUserForm) {
266266
ctx.ServerError("UpdateUser", err)
267267
return
268268
}
269-
u.HashPassword(form.Password)
269+
if err = u.SetPassword(form.Password); err != nil {
270+
ctx.InternalServerError(err)
271+
return
272+
}
270273
}
271274

272275
if form.Reset2FA {

routers/api/v1/admin/user.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,10 @@ func EditUser(ctx *context.APIContext, form api.EditUserOption) {
174174
ctx.Error(http.StatusInternalServerError, "UpdateUser", err)
175175
return
176176
}
177-
u.HashPassword(form.Password)
177+
if err = u.SetPassword(form.Password); err != nil {
178+
ctx.InternalServerError(err)
179+
return
180+
}
178181
}
179182

180183
if form.MustChangePassword != nil {

routers/user/auth.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1517,11 +1517,10 @@ func ResetPasswdPost(ctx *context.Context) {
15171517
ctx.ServerError("UpdateUser", err)
15181518
return
15191519
}
1520-
if u.Salt, err = models.GetUserSalt(); err != nil {
1520+
if err = u.SetPassword(passwd); err != nil {
15211521
ctx.ServerError("UpdateUser", err)
15221522
return
15231523
}
1524-
u.HashPassword(passwd)
15251524
u.MustChangePassword = false
15261525
if err := models.UpdateUserCols(u, "must_change_password", "passwd", "passwd_hash_algo", "rands", "salt"); err != nil {
15271526
ctx.ServerError("UpdateUser", err)
@@ -1591,12 +1590,11 @@ func MustChangePasswordPost(ctx *context.Context, cpt *captcha.Captcha, form aut
15911590
}
15921591

15931592
var err error
1594-
if u.Salt, err = models.GetUserSalt(); err != nil {
1593+
if err = u.SetPassword(form.Password); err != nil {
15951594
ctx.ServerError("UpdateUser", err)
15961595
return
15971596
}
15981597

1599-
u.HashPassword(form.Password)
16001598
u.MustChangePassword = false
16011599

16021600
if err := models.UpdateUserCols(u, "must_change_password", "passwd", "passwd_hash_algo", "salt"); err != nil {

routers/user/setting/account.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,10 @@ func AccountPost(ctx *context.Context, form auth.ChangePasswordForm) {
6363
ctx.Flash.Error(errMsg)
6464
} else {
6565
var err error
66-
if ctx.User.Salt, err = models.GetUserSalt(); err != nil {
66+
if err = ctx.User.SetPassword(form.Password); err != nil {
6767
ctx.ServerError("UpdateUser", err)
6868
return
6969
}
70-
ctx.User.HashPassword(form.Password)
7170
if err := models.UpdateUserCols(ctx.User, "salt", "passwd_hash_algo", "passwd"); err != nil {
7271
ctx.ServerError("UpdateUser", err)
7372
return

0 commit comments

Comments
 (0)