Prevent NPE on avatar direct rendering if federated avatars disabled (#15434) (#15439)

#13649 assumed that direct avatar urls would always be libravatar urls - this leads
to NPEs if federated avatar service is disabled.

Fix #15421

Signed-off-by: Andrew Thornton <art27@cantab.net>

Co-authored-by: techknowlogick <techknowlogick@gitea.io>

Co-authored-by: zeripath <art27@cantab.net>
This commit is contained in:
techknowlogick 2021-04-12 22:50:07 -04:00 committed by GitHub
parent f3d0c76afc
commit 779d1185e7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 17 additions and 2 deletions

View File

@ -7,12 +7,14 @@ package user
import ( import (
"errors" "errors"
"net/url" "net/url"
"path"
"strconv" "strconv"
"strings" "strings"
"code.gitea.io/gitea/models" "code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
) )
// Avatar redirect browser to user avatar of requested size // Avatar redirect browser to user avatar of requested size
@ -70,6 +72,8 @@ func AvatarByEmailHash(ctx *context.Context) {
} }
var avatarURL *url.URL var avatarURL *url.URL
if setting.EnableFederatedAvatar && setting.LibravatarService != nil {
avatarURL, err = models.LibravatarURL(email) avatarURL, err = models.LibravatarURL(email)
if err != nil { if err != nil {
avatarURL, err = url.Parse(models.DefaultAvatarLink()) avatarURL, err = url.Parse(models.DefaultAvatarLink())
@ -78,6 +82,17 @@ func AvatarByEmailHash(ctx *context.Context) {
return return
} }
} }
} else if !setting.DisableGravatar {
copyOfGravatarSourceURL := *setting.GravatarSourceURL
avatarURL = &copyOfGravatarSourceURL
avatarURL.Path = path.Join(avatarURL.Path, hash)
} else {
avatarURL, err = url.Parse(models.DefaultAvatarLink())
if err != nil {
ctx.ServerError("invalid default avatar url", err)
return
}
}
ctx.Redirect(models.MakeFinalAvatarURL(avatarURL, size)) ctx.Redirect(models.MakeFinalAvatarURL(avatarURL, size))
} }