0
0
mirror of https://github.com/go-gitea/gitea.git synced 2025-11-08 11:57:30 -05:00

Fix avatar upload error handling (#35887)

Fix #35884
This commit is contained in:
wxiaoguang
2025-11-07 09:44:09 +08:00
committed by GitHub
parent b2feeddf42
commit 0ce7d66368
3 changed files with 8 additions and 10 deletions

View File

@@ -105,9 +105,7 @@ func (source *Source) Authenticate(ctx context.Context, user *user_model.User, u
} }
} }
if source.AttributeAvatar != "" { if source.AttributeAvatar != "" {
if err := user_service.UploadAvatar(ctx, user, sr.Avatar); err != nil { _ = user_service.UploadAvatar(ctx, user, sr.Avatar)
return user, err
}
} }
} }

View File

@@ -21,7 +21,7 @@ import (
func UploadAvatar(ctx context.Context, repo *repo_model.Repository, data []byte) error { func UploadAvatar(ctx context.Context, repo *repo_model.Repository, data []byte) error {
avatarData, err := avatar.ProcessAvatarImage(data) avatarData, err := avatar.ProcessAvatarImage(data)
if err != nil { if err != nil {
return err return fmt.Errorf("UploadAvatar: failed to process repo avatar image: %w", err)
} }
newAvatar := avatar.HashAvatar(repo.ID, data) newAvatar := avatar.HashAvatar(repo.ID, data)
@@ -36,19 +36,19 @@ func UploadAvatar(ctx context.Context, repo *repo_model.Repository, data []byte)
// Then repo will be removed - only it avatar file will be removed // Then repo will be removed - only it avatar file will be removed
repo.Avatar = newAvatar repo.Avatar = newAvatar
if err := repo_model.UpdateRepositoryColsNoAutoTime(ctx, repo, "avatar"); err != nil { if err := repo_model.UpdateRepositoryColsNoAutoTime(ctx, repo, "avatar"); err != nil {
return fmt.Errorf("UploadAvatar: Update repository avatar: %w", err) return fmt.Errorf("UploadAvatar: failed to update repository avatar: %w", err)
} }
if err := storage.SaveFrom(storage.RepoAvatars, repo.CustomAvatarRelativePath(), func(w io.Writer) error { if err := storage.SaveFrom(storage.RepoAvatars, repo.CustomAvatarRelativePath(), func(w io.Writer) error {
_, err := w.Write(avatarData) _, err := w.Write(avatarData)
return err return err
}); err != nil { }); err != nil {
return fmt.Errorf("UploadAvatar %s failed: Failed to remove old repo avatar %s: %w", repo.RelativePath(), newAvatar, err) return fmt.Errorf("UploadAvatar: failed to save repo avatar %s: %w", newAvatar, err)
} }
if len(oldAvatarPath) > 0 { if len(oldAvatarPath) > 0 {
if err := storage.RepoAvatars.Delete(oldAvatarPath); err != nil { if err := storage.RepoAvatars.Delete(oldAvatarPath); err != nil {
return fmt.Errorf("UploadAvatar: Failed to remove old repo avatar %s: %w", oldAvatarPath, err) return fmt.Errorf("UploadAvatar: failed to remove old repo avatar %s: %w", oldAvatarPath, err)
} }
} }
return nil return nil

View File

@@ -21,21 +21,21 @@ import (
func UploadAvatar(ctx context.Context, u *user_model.User, data []byte) error { func UploadAvatar(ctx context.Context, u *user_model.User, data []byte) error {
avatarData, err := avatar.ProcessAvatarImage(data) avatarData, err := avatar.ProcessAvatarImage(data)
if err != nil { if err != nil {
return err return fmt.Errorf("UploadAvatar: failed to process user avatar image: %w", err)
} }
return db.WithTx(ctx, func(ctx context.Context) error { return db.WithTx(ctx, func(ctx context.Context) error {
u.UseCustomAvatar = true u.UseCustomAvatar = true
u.Avatar = avatar.HashAvatar(u.ID, data) u.Avatar = avatar.HashAvatar(u.ID, data)
if err = user_model.UpdateUserCols(ctx, u, "use_custom_avatar", "avatar"); err != nil { if err = user_model.UpdateUserCols(ctx, u, "use_custom_avatar", "avatar"); err != nil {
return fmt.Errorf("updateUser: %w", err) return fmt.Errorf("UploadAvatar: failed to update user avatar: %w", err)
} }
if err := storage.SaveFrom(storage.Avatars, u.CustomAvatarRelativePath(), func(w io.Writer) error { if err := storage.SaveFrom(storage.Avatars, u.CustomAvatarRelativePath(), func(w io.Writer) error {
_, err := w.Write(avatarData) _, err := w.Write(avatarData)
return err return err
}); err != nil { }); err != nil {
return fmt.Errorf("Failed to create dir %s: %w", u.CustomAvatarRelativePath(), err) return fmt.Errorf("UploadAvatar: failed to save user avatar %s: %w", u.CustomAvatarRelativePath(), err)
} }
return nil return nil