Skip to content

Commit c7536f5

Browse files
lunnysilverwind
authored andcommitted
Fix bug on avatar (go-gitea#31008)
Co-authored-by: silverwind <me@silverwind.io>
1 parent 8eac16d commit c7536f5

File tree

3 files changed

+24
-10
lines changed

3 files changed

+24
-10
lines changed

routers/api/v1/org/avatar.go

+2
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ func UpdateAvatar(ctx *context.APIContext) {
4646
err = user_service.UploadAvatar(ctx, ctx.Org.Organization.AsUser(), content)
4747
if err != nil {
4848
ctx.Error(http.StatusInternalServerError, "UploadAvatar", err)
49+
return
4950
}
5051

5152
ctx.Status(http.StatusNoContent)
@@ -72,6 +73,7 @@ func DeleteAvatar(ctx *context.APIContext) {
7273
err := user_service.DeleteAvatar(ctx, ctx.Org.Organization.AsUser())
7374
if err != nil {
7475
ctx.Error(http.StatusInternalServerError, "DeleteAvatar", err)
76+
return
7577
}
7678

7779
ctx.Status(http.StatusNoContent)

routers/api/v1/user/avatar.go

+2
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ func UpdateAvatar(ctx *context.APIContext) {
3939
err = user_service.UploadAvatar(ctx, ctx.Doer, content)
4040
if err != nil {
4141
ctx.Error(http.StatusInternalServerError, "UploadAvatar", err)
42+
return
4243
}
4344

4445
ctx.Status(http.StatusNoContent)
@@ -57,6 +58,7 @@ func DeleteAvatar(ctx *context.APIContext) {
5758
err := user_service.DeleteAvatar(ctx, ctx.Doer)
5859
if err != nil {
5960
ctx.Error(http.StatusInternalServerError, "DeleteAvatar", err)
61+
return
6062
}
6163

6264
ctx.Status(http.StatusNoContent)

services/user/avatar.go

+20-10
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ package user
55

66
import (
77
"context"
8+
"errors"
89
"fmt"
910
"io"
11+
"os"
1012

1113
"code.gitea.io/gitea/models/db"
1214
user_model "code.gitea.io/gitea/models/user"
@@ -48,16 +50,24 @@ func UploadAvatar(ctx context.Context, u *user_model.User, data []byte) error {
4850
func DeleteAvatar(ctx context.Context, u *user_model.User) error {
4951
aPath := u.CustomAvatarRelativePath()
5052
log.Trace("DeleteAvatar[%d]: %s", u.ID, aPath)
51-
if len(u.Avatar) > 0 {
52-
if err := storage.Avatars.Delete(aPath); err != nil {
53-
return fmt.Errorf("Failed to remove %s: %w", aPath, err)
53+
54+
return db.WithTx(ctx, func(ctx context.Context) error {
55+
hasAvatar := len(u.Avatar) > 0
56+
u.UseCustomAvatar = false
57+
u.Avatar = ""
58+
if _, err := db.GetEngine(ctx).ID(u.ID).Cols("avatar, use_custom_avatar").Update(u); err != nil {
59+
return fmt.Errorf("DeleteAvatar: %w", err)
5460
}
55-
}
5661

57-
u.UseCustomAvatar = false
58-
u.Avatar = ""
59-
if _, err := db.GetEngine(ctx).ID(u.ID).Cols("avatar, use_custom_avatar").Update(u); err != nil {
60-
return fmt.Errorf("DeleteAvatar: %w", err)
61-
}
62-
return nil
62+
if hasAvatar {
63+
if err := storage.Avatars.Delete(aPath); err != nil {
64+
if !errors.Is(err, os.ErrNotExist) {
65+
return fmt.Errorf("failed to remove %s: %w", aPath, err)
66+
}
67+
log.Warn("Deleting avatar %s but it doesn't exist", aPath)
68+
}
69+
}
70+
71+
return nil
72+
})
6373
}

0 commit comments

Comments
 (0)