fix avatar bug #1114 (#1122)

This PR fix the avatar bug described in #1114. This will fix random avatar is blank problem and potential delete avatars dir problem.
release/v1.15
Lunny Xiao 2017-03-06 16:15:40 +08:00 committed by GitHub
parent 0376029241
commit 2215840363
1 changed files with 15 additions and 8 deletions

View File

@ -296,6 +296,9 @@ func (u *User) GenerateRandomAvatar() error {
if err != nil { if err != nil {
return fmt.Errorf("RandomImage: %v", err) return fmt.Errorf("RandomImage: %v", err)
} }
// NOTICE for random avatar, it still uses id as avatar name, but custom avatar use md5
// since random image is not a user's photo, there is no security for enumable
u.Avatar = fmt.Sprintf("%d", u.ID)
if err = os.MkdirAll(filepath.Dir(u.CustomAvatarPath()), os.ModePerm); err != nil { if err = os.MkdirAll(filepath.Dir(u.CustomAvatarPath()), os.ModePerm); err != nil {
return fmt.Errorf("MkdirAll: %v", err) return fmt.Errorf("MkdirAll: %v", err)
} }
@ -451,13 +454,15 @@ func (u *User) UploadAvatar(data []byte) error {
// DeleteAvatar deletes the user's custom avatar. // DeleteAvatar deletes the user's custom avatar.
func (u *User) DeleteAvatar() error { func (u *User) DeleteAvatar() error {
log.Trace("DeleteAvatar[%d]: %s", u.ID, u.CustomAvatarPath()) log.Trace("DeleteAvatar[%d]: %s", u.ID, u.CustomAvatarPath())
if len(u.Avatar) > 0 {
if err := os.Remove(u.CustomAvatarPath()); err != nil { if err := os.Remove(u.CustomAvatarPath()); err != nil {
return fmt.Errorf("Failed to remove %s: %v", u.CustomAvatarPath(), err) return fmt.Errorf("Failed to remove %s: %v", u.CustomAvatarPath(), err)
}
} }
u.UseCustomAvatar = false u.UseCustomAvatar = false
if err := UpdateUser(u); err != nil { u.Avatar = ""
if _, err := x.Id(u.ID).Cols("avatar, use_custom_avatar").Update(u); err != nil {
return fmt.Errorf("UpdateUser: %v", err) return fmt.Errorf("UpdateUser: %v", err)
} }
return nil return nil
@ -994,10 +999,12 @@ func deleteUser(e *xorm.Session, u *User) error {
return fmt.Errorf("Failed to RemoveAll %s: %v", path, err) return fmt.Errorf("Failed to RemoveAll %s: %v", path, err)
} }
avatarPath := u.CustomAvatarPath() if len(u.Avatar) > 0 {
if com.IsExist(avatarPath) { avatarPath := u.CustomAvatarPath()
if err := os.Remove(avatarPath); err != nil { if com.IsExist(avatarPath) {
return fmt.Errorf("Failed to remove %s: %v", avatarPath, err) if err := os.Remove(avatarPath); err != nil {
return fmt.Errorf("Failed to remove %s: %v", avatarPath, err)
}
} }
} }