]> source.dussan.org Git - gitea.git/commitdiff
Prevent NPE on avatar direct rendering if federated avatars disabled (#15434)
authorzeripath <art27@cantab.net>
Tue, 13 Apr 2021 00:57:12 +0000 (01:57 +0100)
committerGitHub <noreply@github.com>
Tue, 13 Apr 2021 00:57:12 +0000 (20:57 -0400)
#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>
routers/user/avatar.go

index c3ece49089851ec1890093156b9b33d3fee2d7f1..4287589d1abca79cbf4ccb5f35d43a1e2e9eba3a 100644 (file)
@@ -7,12 +7,14 @@ package user
 import (
        "errors"
        "net/url"
+       "path"
        "strconv"
        "strings"
 
        "code.gitea.io/gitea/models"
        "code.gitea.io/gitea/modules/context"
        "code.gitea.io/gitea/modules/log"
+       "code.gitea.io/gitea/modules/setting"
 )
 
 // Avatar redirect browser to user avatar of requested size
@@ -70,8 +72,21 @@ func AvatarByEmailHash(ctx *context.Context) {
        }
 
        var avatarURL *url.URL
-       avatarURL, err = models.LibravatarURL(email)
-       if err != nil {
+
+       if setting.EnableFederatedAvatar && setting.LibravatarService != nil {
+               avatarURL, err = models.LibravatarURL(email)
+               if err != nil {
+                       avatarURL, err = url.Parse(models.DefaultAvatarLink())
+                       if err != nil {
+                               ctx.ServerError("invalid default avatar url", err)
+                               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)