From 23f072887935a6aa81634ef487432ff2b5fa250a Mon Sep 17 00:00:00 2001
From: Ethan Koenig <ethantkoenig@gmail.com>
Date: Thu, 29 Jun 2017 10:30:58 -0400
Subject: [PATCH 1/3] Don't ignore gravatar error

---
 modules/base/tool.go | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/modules/base/tool.go b/modules/base/tool.go
index 8952e7a8c9..0f730868eb 100644
--- a/modules/base/tool.go
+++ b/modules/base/tool.go
@@ -197,8 +197,10 @@ func HashEmail(email string) string {
 // to return full URL if user enables Gravatar-like service.
 func AvatarLink(email string) string {
 	if setting.EnableFederatedAvatar && setting.LibravatarService != nil {
-		// TODO: This doesn't check any error. AvatarLink should return (string, error)
-		url, _ := setting.LibravatarService.FromEmail(email)
+		url, err := setting.LibravatarService.FromEmail(email)
+		if err != nil {
+			log.Error(4, "LibravatarService.FromEmail(email=%s): error %v", email, err)
+		}
 		return url
 	}
 

From 05e37264154bbcb375b358798c7a8f9b499c4881 Mon Sep 17 00:00:00 2001
From: Ethan Koenig <ethantkoenig@gmail.com>
Date: Thu, 29 Jun 2017 12:10:33 -0400
Subject: [PATCH 2/3] Use default avatar on error

---
 models/user.go       | 5 ++---
 modules/base/tool.go | 7 ++++++-
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/models/user.go b/models/user.go
index 6484c8cf69..2a4fb557db 100644
--- a/models/user.go
+++ b/models/user.go
@@ -333,15 +333,14 @@ func (u *User) generateRandomAvatar(e Engine) error {
 // which includes app sub-url as prefix. However, it is possible
 // to return full URL if user enables Gravatar-like service.
 func (u *User) RelAvatarLink() string {
-	defaultImgURL := setting.AppSubURL + "/img/avatar_default.png"
 	if u.ID == -1 {
-		return defaultImgURL
+		return base.DefaultAvatarLink()
 	}
 
 	switch {
 	case u.UseCustomAvatar:
 		if !com.IsFile(u.CustomAvatarPath()) {
-			return defaultImgURL
+			return base.DefaultAvatarLink()
 		}
 		return setting.AppSubURL + "/avatars/" + u.Avatar
 	case setting.DisableGravatar, setting.OfflineMode:
diff --git a/modules/base/tool.go b/modules/base/tool.go
index 0f730868eb..1bf1ce3951 100644
--- a/modules/base/tool.go
+++ b/modules/base/tool.go
@@ -192,6 +192,10 @@ func HashEmail(email string) string {
 	return EncodeMD5(strings.ToLower(strings.TrimSpace(email)))
 }
 
+func DefaultAvatarLink() string {
+	return setting.AppSubURL + "/img/avatar_default.png"
+}
+
 // AvatarLink returns relative avatar link to the site domain by given email,
 // which includes app sub-url as prefix. However, it is possible
 // to return full URL if user enables Gravatar-like service.
@@ -200,6 +204,7 @@ func AvatarLink(email string) string {
 		url, err := setting.LibravatarService.FromEmail(email)
 		if err != nil {
 			log.Error(4, "LibravatarService.FromEmail(email=%s): error %v", email, err)
+			return DefaultAvatarLink()
 		}
 		return url
 	}
@@ -208,7 +213,7 @@ func AvatarLink(email string) string {
 		return setting.GravatarSource + HashEmail(email)
 	}
 
-	return setting.AppSubURL + "/img/avatar_default.png"
+	return DefaultAvatarLink()
 }
 
 // Seconds-based time units

From 2b410e44b2813648d670feb2fd543638bd8a4c80 Mon Sep 17 00:00:00 2001
From: Ethan Koenig <ethantkoenig@gmail.com>
Date: Thu, 29 Jun 2017 12:11:34 -0400
Subject: [PATCH 3/3] lint

---
 modules/base/tool.go | 1 +
 1 file changed, 1 insertion(+)

diff --git a/modules/base/tool.go b/modules/base/tool.go
index 1bf1ce3951..543775e0df 100644
--- a/modules/base/tool.go
+++ b/modules/base/tool.go
@@ -192,6 +192,7 @@ func HashEmail(email string) string {
 	return EncodeMD5(strings.ToLower(strings.TrimSpace(email)))
 }
 
+// DefaultAvatarLink the default avatar link
 func DefaultAvatarLink() string {
 	return setting.AppSubURL + "/img/avatar_default.png"
 }