Skip to content

Commit f960e19

Browse files
authored
Only update needed columns when update user (#2296)
* only update needed columns when update user * fix missing update_unix column
1 parent 921d90f commit f960e19

File tree

6 files changed

+45
-17
lines changed

6 files changed

+45
-17
lines changed

cmd/admin.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func runChangePassword(c *cli.Context) error {
103103
return fmt.Errorf("%v", err)
104104
}
105105
user.EncodePasswd()
106-
if err := models.UpdateUser(user); err != nil {
106+
if err := models.UpdateUserCols(user, "passwd", "salt"); err != nil {
107107
return fmt.Errorf("%v", err)
108108
}
109109

models/user.go

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ func (u *User) SetLastLogin() {
157157
// UpdateDiffViewStyle updates the users diff view style
158158
func (u *User) UpdateDiffViewStyle(style string) error {
159159
u.DiffViewStyle = style
160-
return UpdateUser(u)
160+
return UpdateUserCols(u, "diff_view_style")
161161
}
162162

163163
// AfterSet is invoked from XORM after setting the value of a field of this object.
@@ -860,7 +860,9 @@ func updateUser(e Engine, u *User) error {
860860
if len(u.AvatarEmail) == 0 {
861861
u.AvatarEmail = u.Email
862862
}
863-
u.Avatar = base.HashEmail(u.AvatarEmail)
863+
if len(u.AvatarEmail) > 0 {
864+
u.Avatar = base.HashEmail(u.AvatarEmail)
865+
}
864866
}
865867

866868
u.LowerName = strings.ToLower(u.Name)
@@ -877,6 +879,29 @@ func UpdateUser(u *User) error {
877879
return updateUser(x, u)
878880
}
879881

882+
// UpdateUserCols update user according special columns
883+
func UpdateUserCols(u *User, cols ...string) error {
884+
// Organization does not need email
885+
u.Email = strings.ToLower(u.Email)
886+
if !u.IsOrganization() {
887+
if len(u.AvatarEmail) == 0 {
888+
u.AvatarEmail = u.Email
889+
}
890+
if len(u.AvatarEmail) > 0 {
891+
u.Avatar = base.HashEmail(u.AvatarEmail)
892+
}
893+
}
894+
895+
u.LowerName = strings.ToLower(u.Name)
896+
u.Location = base.TruncateString(u.Location, 255)
897+
u.Website = base.TruncateString(u.Website, 255)
898+
u.Description = base.TruncateString(u.Description, 255)
899+
900+
cols = append(cols, "updated_unix")
901+
_, err := x.Id(u.ID).Cols(cols...).Update(u)
902+
return err
903+
}
904+
880905
// UpdateUserSetting updates user's settings.
881906
func UpdateUserSetting(u *User) error {
882907
if !u.IsOrganization() {
@@ -1418,7 +1443,7 @@ func SyncExternalUsers() {
14181443
}
14191444
usr.IsActive = true
14201445

1421-
err = UpdateUser(usr)
1446+
err = UpdateUserCols(usr, "full_name", "email", "is_admin", "is_active")
14221447
if err != nil {
14231448
log.Error(4, "SyncExternalUsers[%s]: Error updating user %s: %v", s.Name, usr.Name, err)
14241449
}
@@ -1440,7 +1465,7 @@ func SyncExternalUsers() {
14401465
log.Trace("SyncExternalUsers[%s]: Deactivating user %s", s.Name, usr.Name)
14411466

14421467
usr.IsActive = false
1443-
err = UpdateUser(&usr)
1468+
err = UpdateUserCols(&usr, "is_active")
14441469
if err != nil {
14451470
log.Error(4, "SyncExternalUsers[%s]: Error deactivating user %s: %v", s.Name, usr.Name, err)
14461471
}

routers/api/v1/org/org.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func Edit(ctx *context.APIContext, form api.EditOrgOption) {
5656
org.Description = form.Description
5757
org.Website = form.Website
5858
org.Location = form.Location
59-
if err := models.UpdateUser(org); err != nil {
59+
if err := models.UpdateUserCols(org, "full_name", "description", "website", "location"); err != nil {
6060
ctx.Error(500, "UpdateUser", err)
6161
return
6262
}

routers/user/auth.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -340,8 +340,8 @@ func handleSignInFull(ctx *context.Context, u *models.User, remember bool, obeyR
340340

341341
// Register last login
342342
u.SetLastLogin()
343-
if err := models.UpdateUser(u); err != nil {
344-
ctx.Handle(500, "UpdateUser", err)
343+
if err := models.UpdateUserCols(u, "last_login_unix"); err != nil {
344+
ctx.Handle(500, "UpdateUserCols", err)
345345
return
346346
}
347347

@@ -430,8 +430,8 @@ func handleOAuth2SignIn(u *models.User, gothUser goth.User, ctx *context.Context
430430

431431
// Register last login
432432
u.SetLastLogin()
433-
if err := models.UpdateUser(u); err != nil {
434-
ctx.Handle(500, "UpdateUser", err)
433+
if err := models.UpdateUserCols(u, "last_login_unix"); err != nil {
434+
ctx.Handle(500, "UpdateUserCols", err)
435435
return
436436
}
437437

@@ -666,7 +666,8 @@ func LinkAccountPostRegister(ctx *context.Context, cpt *captcha.Captcha, form au
666666
if models.CountUsers() == 1 {
667667
u.IsAdmin = true
668668
u.IsActive = true
669-
if err := models.UpdateUser(u); err != nil {
669+
u.SetLastLogin()
670+
if err := models.UpdateUserCols(u, "is_admin", "is_active", "last_login_unix"); err != nil {
670671
ctx.Handle(500, "UpdateUser", err)
671672
return
672673
}
@@ -781,7 +782,8 @@ func SignUpPost(ctx *context.Context, cpt *captcha.Captcha, form auth.RegisterFo
781782
if models.CountUsers() == 1 {
782783
u.IsAdmin = true
783784
u.IsActive = true
784-
if err := models.UpdateUser(u); err != nil {
785+
u.SetLastLogin()
786+
if err := models.UpdateUserCols(u, "is_admin", "is_active", "last_login_unix"); err != nil {
785787
ctx.Handle(500, "UpdateUser", err)
786788
return
787789
}
@@ -840,7 +842,7 @@ func Activate(ctx *context.Context) {
840842
ctx.Handle(500, "UpdateUser", err)
841843
return
842844
}
843-
if err := models.UpdateUser(user); err != nil {
845+
if err := models.UpdateUserCols(user, "is_active", "rands"); err != nil {
844846
if models.IsErrUserNotExist(err) {
845847
ctx.Error(404)
846848
} else {
@@ -991,7 +993,7 @@ func ResetPasswdPost(ctx *context.Context) {
991993
return
992994
}
993995
u.EncodePasswd()
994-
if err := models.UpdateUser(u); err != nil {
996+
if err := models.UpdateUserCols(u, "passwd", "rands", "salt"); err != nil {
995997
ctx.Handle(500, "UpdateUser", err)
996998
return
997999
}

routers/user/auth_openid.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,8 @@ func RegisterOpenIDPost(ctx *context.Context, cpt *captcha.Captcha, form auth.Si
404404
if models.CountUsers() == 1 {
405405
u.IsAdmin = true
406406
u.IsActive = true
407-
if err := models.UpdateUser(u); err != nil {
407+
u.SetLastLogin()
408+
if err := models.UpdateUserCols(u, "is_admin", "is_active", "last_login_unix"); err != nil {
408409
ctx.Handle(500, "UpdateUser", err)
409410
return
410411
}

routers/user/setting.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ func UpdateAvatarSetting(ctx *context.Context, form auth.AvatarForm, ctxUser *mo
156156
}
157157
}
158158

159-
if err := models.UpdateUser(ctxUser); err != nil {
159+
if err := models.UpdateUserCols(ctxUser, "avatar", "avatar_email", "use_custom_avatar"); err != nil {
160160
return fmt.Errorf("UpdateUser: %v", err)
161161
}
162162

@@ -221,7 +221,7 @@ func SettingsPasswordPost(ctx *context.Context, form auth.ChangePasswordForm) {
221221
return
222222
}
223223
ctx.User.EncodePasswd()
224-
if err := models.UpdateUser(ctx.User); err != nil {
224+
if err := models.UpdateUserCols(ctx.User, "salt", "passwd"); err != nil {
225225
ctx.Handle(500, "UpdateUser", err)
226226
return
227227
}

0 commit comments

Comments
 (0)