mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Only update needed columns when update user (#2296)
* only update needed columns when update user * fix missing update_unix column
This commit is contained in:
		@@ -103,7 +103,7 @@ func runChangePassword(c *cli.Context) error {
 | 
				
			|||||||
		return fmt.Errorf("%v", err)
 | 
							return fmt.Errorf("%v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	user.EncodePasswd()
 | 
						user.EncodePasswd()
 | 
				
			||||||
	if err := models.UpdateUser(user); err != nil {
 | 
						if err := models.UpdateUserCols(user, "passwd", "salt"); err != nil {
 | 
				
			||||||
		return fmt.Errorf("%v", err)
 | 
							return fmt.Errorf("%v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -157,7 +157,7 @@ func (u *User) SetLastLogin() {
 | 
				
			|||||||
// UpdateDiffViewStyle updates the users diff view style
 | 
					// UpdateDiffViewStyle updates the users diff view style
 | 
				
			||||||
func (u *User) UpdateDiffViewStyle(style string) error {
 | 
					func (u *User) UpdateDiffViewStyle(style string) error {
 | 
				
			||||||
	u.DiffViewStyle = style
 | 
						u.DiffViewStyle = style
 | 
				
			||||||
	return UpdateUser(u)
 | 
						return UpdateUserCols(u, "diff_view_style")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// AfterSet is invoked from XORM after setting the value of a field of this object.
 | 
					// 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 {
 | 
				
			|||||||
		if len(u.AvatarEmail) == 0 {
 | 
							if len(u.AvatarEmail) == 0 {
 | 
				
			||||||
			u.AvatarEmail = u.Email
 | 
								u.AvatarEmail = u.Email
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		u.Avatar = base.HashEmail(u.AvatarEmail)
 | 
							if len(u.AvatarEmail) > 0 {
 | 
				
			||||||
 | 
								u.Avatar = base.HashEmail(u.AvatarEmail)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	u.LowerName = strings.ToLower(u.Name)
 | 
						u.LowerName = strings.ToLower(u.Name)
 | 
				
			||||||
@@ -877,6 +879,29 @@ func UpdateUser(u *User) error {
 | 
				
			|||||||
	return updateUser(x, u)
 | 
						return updateUser(x, u)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// UpdateUserCols update user according special columns
 | 
				
			||||||
 | 
					func UpdateUserCols(u *User, cols ...string) error {
 | 
				
			||||||
 | 
						// Organization does not need email
 | 
				
			||||||
 | 
						u.Email = strings.ToLower(u.Email)
 | 
				
			||||||
 | 
						if !u.IsOrganization() {
 | 
				
			||||||
 | 
							if len(u.AvatarEmail) == 0 {
 | 
				
			||||||
 | 
								u.AvatarEmail = u.Email
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if len(u.AvatarEmail) > 0 {
 | 
				
			||||||
 | 
								u.Avatar = base.HashEmail(u.AvatarEmail)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						u.LowerName = strings.ToLower(u.Name)
 | 
				
			||||||
 | 
						u.Location = base.TruncateString(u.Location, 255)
 | 
				
			||||||
 | 
						u.Website = base.TruncateString(u.Website, 255)
 | 
				
			||||||
 | 
						u.Description = base.TruncateString(u.Description, 255)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cols = append(cols, "updated_unix")
 | 
				
			||||||
 | 
						_, err := x.Id(u.ID).Cols(cols...).Update(u)
 | 
				
			||||||
 | 
						return err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// UpdateUserSetting updates user's settings.
 | 
					// UpdateUserSetting updates user's settings.
 | 
				
			||||||
func UpdateUserSetting(u *User) error {
 | 
					func UpdateUserSetting(u *User) error {
 | 
				
			||||||
	if !u.IsOrganization() {
 | 
						if !u.IsOrganization() {
 | 
				
			||||||
@@ -1418,7 +1443,7 @@ func SyncExternalUsers() {
 | 
				
			|||||||
						}
 | 
											}
 | 
				
			||||||
						usr.IsActive = true
 | 
											usr.IsActive = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						err = UpdateUser(usr)
 | 
											err = UpdateUserCols(usr, "full_name", "email", "is_admin", "is_active")
 | 
				
			||||||
						if err != nil {
 | 
											if err != nil {
 | 
				
			||||||
							log.Error(4, "SyncExternalUsers[%s]: Error updating user %s: %v", s.Name, usr.Name, err)
 | 
												log.Error(4, "SyncExternalUsers[%s]: Error updating user %s: %v", s.Name, usr.Name, err)
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
@@ -1440,7 +1465,7 @@ func SyncExternalUsers() {
 | 
				
			|||||||
						log.Trace("SyncExternalUsers[%s]: Deactivating user %s", s.Name, usr.Name)
 | 
											log.Trace("SyncExternalUsers[%s]: Deactivating user %s", s.Name, usr.Name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						usr.IsActive = false
 | 
											usr.IsActive = false
 | 
				
			||||||
						err = UpdateUser(&usr)
 | 
											err = UpdateUserCols(&usr, "is_active")
 | 
				
			||||||
						if err != nil {
 | 
											if err != nil {
 | 
				
			||||||
							log.Error(4, "SyncExternalUsers[%s]: Error deactivating user %s: %v", s.Name, usr.Name, err)
 | 
												log.Error(4, "SyncExternalUsers[%s]: Error deactivating user %s: %v", s.Name, usr.Name, err)
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,7 +56,7 @@ func Edit(ctx *context.APIContext, form api.EditOrgOption) {
 | 
				
			|||||||
	org.Description = form.Description
 | 
						org.Description = form.Description
 | 
				
			||||||
	org.Website = form.Website
 | 
						org.Website = form.Website
 | 
				
			||||||
	org.Location = form.Location
 | 
						org.Location = form.Location
 | 
				
			||||||
	if err := models.UpdateUser(org); err != nil {
 | 
						if err := models.UpdateUserCols(org, "full_name", "description", "website", "location"); err != nil {
 | 
				
			||||||
		ctx.Error(500, "UpdateUser", err)
 | 
							ctx.Error(500, "UpdateUser", err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -340,8 +340,8 @@ func handleSignInFull(ctx *context.Context, u *models.User, remember bool, obeyR
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// Register last login
 | 
						// Register last login
 | 
				
			||||||
	u.SetLastLogin()
 | 
						u.SetLastLogin()
 | 
				
			||||||
	if err := models.UpdateUser(u); err != nil {
 | 
						if err := models.UpdateUserCols(u, "last_login_unix"); err != nil {
 | 
				
			||||||
		ctx.Handle(500, "UpdateUser", err)
 | 
							ctx.Handle(500, "UpdateUserCols", err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -430,8 +430,8 @@ func handleOAuth2SignIn(u *models.User, gothUser goth.User, ctx *context.Context
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			// Register last login
 | 
								// Register last login
 | 
				
			||||||
			u.SetLastLogin()
 | 
								u.SetLastLogin()
 | 
				
			||||||
			if err := models.UpdateUser(u); err != nil {
 | 
								if err := models.UpdateUserCols(u, "last_login_unix"); err != nil {
 | 
				
			||||||
				ctx.Handle(500, "UpdateUser", err)
 | 
									ctx.Handle(500, "UpdateUserCols", err)
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -666,7 +666,8 @@ func LinkAccountPostRegister(ctx *context.Context, cpt *captcha.Captcha, form au
 | 
				
			|||||||
	if models.CountUsers() == 1 {
 | 
						if models.CountUsers() == 1 {
 | 
				
			||||||
		u.IsAdmin = true
 | 
							u.IsAdmin = true
 | 
				
			||||||
		u.IsActive = true
 | 
							u.IsActive = true
 | 
				
			||||||
		if err := models.UpdateUser(u); err != nil {
 | 
							u.SetLastLogin()
 | 
				
			||||||
 | 
							if err := models.UpdateUserCols(u, "is_admin", "is_active", "last_login_unix"); err != nil {
 | 
				
			||||||
			ctx.Handle(500, "UpdateUser", err)
 | 
								ctx.Handle(500, "UpdateUser", err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -781,7 +782,8 @@ func SignUpPost(ctx *context.Context, cpt *captcha.Captcha, form auth.RegisterFo
 | 
				
			|||||||
	if models.CountUsers() == 1 {
 | 
						if models.CountUsers() == 1 {
 | 
				
			||||||
		u.IsAdmin = true
 | 
							u.IsAdmin = true
 | 
				
			||||||
		u.IsActive = true
 | 
							u.IsActive = true
 | 
				
			||||||
		if err := models.UpdateUser(u); err != nil {
 | 
							u.SetLastLogin()
 | 
				
			||||||
 | 
							if err := models.UpdateUserCols(u, "is_admin", "is_active", "last_login_unix"); err != nil {
 | 
				
			||||||
			ctx.Handle(500, "UpdateUser", err)
 | 
								ctx.Handle(500, "UpdateUser", err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -840,7 +842,7 @@ func Activate(ctx *context.Context) {
 | 
				
			|||||||
			ctx.Handle(500, "UpdateUser", err)
 | 
								ctx.Handle(500, "UpdateUser", err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if err := models.UpdateUser(user); err != nil {
 | 
							if err := models.UpdateUserCols(user, "is_active", "rands"); err != nil {
 | 
				
			||||||
			if models.IsErrUserNotExist(err) {
 | 
								if models.IsErrUserNotExist(err) {
 | 
				
			||||||
				ctx.Error(404)
 | 
									ctx.Error(404)
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
@@ -991,7 +993,7 @@ func ResetPasswdPost(ctx *context.Context) {
 | 
				
			|||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		u.EncodePasswd()
 | 
							u.EncodePasswd()
 | 
				
			||||||
		if err := models.UpdateUser(u); err != nil {
 | 
							if err := models.UpdateUserCols(u, "passwd", "rands", "salt"); err != nil {
 | 
				
			||||||
			ctx.Handle(500, "UpdateUser", err)
 | 
								ctx.Handle(500, "UpdateUser", err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -404,7 +404,8 @@ func RegisterOpenIDPost(ctx *context.Context, cpt *captcha.Captcha, form auth.Si
 | 
				
			|||||||
	if models.CountUsers() == 1 {
 | 
						if models.CountUsers() == 1 {
 | 
				
			||||||
		u.IsAdmin = true
 | 
							u.IsAdmin = true
 | 
				
			||||||
		u.IsActive = true
 | 
							u.IsActive = true
 | 
				
			||||||
		if err := models.UpdateUser(u); err != nil {
 | 
							u.SetLastLogin()
 | 
				
			||||||
 | 
							if err := models.UpdateUserCols(u, "is_admin", "is_active", "last_login_unix"); err != nil {
 | 
				
			||||||
			ctx.Handle(500, "UpdateUser", err)
 | 
								ctx.Handle(500, "UpdateUser", err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -156,7 +156,7 @@ func UpdateAvatarSetting(ctx *context.Context, form auth.AvatarForm, ctxUser *mo
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := models.UpdateUser(ctxUser); err != nil {
 | 
						if err := models.UpdateUserCols(ctxUser, "avatar", "avatar_email", "use_custom_avatar"); err != nil {
 | 
				
			||||||
		return fmt.Errorf("UpdateUser: %v", err)
 | 
							return fmt.Errorf("UpdateUser: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -221,7 +221,7 @@ func SettingsPasswordPost(ctx *context.Context, form auth.ChangePasswordForm) {
 | 
				
			|||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		ctx.User.EncodePasswd()
 | 
							ctx.User.EncodePasswd()
 | 
				
			||||||
		if err := models.UpdateUser(ctx.User); err != nil {
 | 
							if err := models.UpdateUserCols(ctx.User, "salt", "passwd"); err != nil {
 | 
				
			||||||
			ctx.Handle(500, "UpdateUser", err)
 | 
								ctx.Handle(500, "UpdateUser", err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user