From 7c951fdd4a9dc15313522ac27aacd687687ddafc Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Mon, 25 Oct 2021 13:01:16 +0800 Subject: [PATCH] In many cases user avatar link should be an absolute URL with http host (#17420) --- integrations/user_avatar_test.go | 2 +- models/user_avatar.go | 9 +++++++-- modules/convert/user_test.go | 1 + 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/integrations/user_avatar_test.go b/integrations/user_avatar_test.go index 6de2914f7..f07b7c7fc 100644 --- a/integrations/user_avatar_test.go +++ b/integrations/user_avatar_test.go @@ -73,7 +73,7 @@ func TestUserAvatar(t *testing.T) { user2 = db.AssertExistsAndLoadBean(t, &models.User{ID: 2}).(*models.User) // owner of the repo3, is an org - req = NewRequest(t, "GET", user2.AvatarLink()) + req = NewRequest(t, "GET", user2.AvatarLinkWithSize(0)) _ = session.MakeRequest(t, req, http.StatusOK) // Can't test if the response matches because the image is re-generated on upload but checking that this at least doesn't give a 404 should be enough. diff --git a/models/user_avatar.go b/models/user_avatar.go index b8296568c..f96f66f93 100644 --- a/models/user_avatar.go +++ b/models/user_avatar.go @@ -9,6 +9,7 @@ import ( "fmt" "image/png" "io" + "strings" "code.gitea.io/gitea/models/avatars" "code.gitea.io/gitea/models/db" @@ -91,9 +92,13 @@ func (u *User) AvatarLinkWithSize(size int) string { return avatars.GenerateEmailAvatarFastLink(u.AvatarEmail, size) } -// AvatarLink returns a avatar link with default size +// AvatarLink returns the full avatar link with http host func (u *User) AvatarLink() string { - return u.AvatarLinkWithSize(0) + link := u.AvatarLinkWithSize(0) + if !strings.HasPrefix(link, "//") && !strings.Contains(link, "://") { + return setting.AppURL + strings.TrimPrefix(link, setting.AppSubURL+"/") + } + return link } // UploadAvatar saves custom avatar for user. diff --git a/modules/convert/user_test.go b/modules/convert/user_test.go index 404adc202..acf918dd9 100644 --- a/modules/convert/user_test.go +++ b/modules/convert/user_test.go @@ -21,6 +21,7 @@ func TestUser_ToUser(t *testing.T) { apiUser := toUser(user1, true, true) assert.True(t, apiUser.IsAdmin) + assert.Contains(t, apiUser.AvatarURL, "://") user2 := db.AssertExistsAndLoadBean(t, &models.User{ID: 2, IsAdmin: false}).(*models.User)