Skip to content

Commit ef27c55

Browse files
committed
clean up
1 parent 3852ca4 commit ef27c55

File tree

1 file changed

+25
-21
lines changed

1 file changed

+25
-21
lines changed

models/avatars/avatar.go

+25-21
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,6 @@ func GenerateUserAvatarFastLink(userName string, size int) string {
112112
if size < 0 {
113113
size = 0
114114
}
115-
//AppSubURL: It is either "" or starts with '/' and ends without '/', such as '/{subpath}'. question: should we use AppURL or StaticURLPrefix?
116115
return setting.AppSubURL + "/user/avatar/" + userName + "/" + strconv.Itoa(size)
117116
}
118117

@@ -124,6 +123,17 @@ func GenerateUserAvatarImageLink(userAvatar string, size int) string {
124123
return setting.AppSubURL + "/avatars/" + userAvatar
125124
}
126125

126+
// generateRecognizedAvatarURL generate a recognized avatar (Gravatar/Libravatar) URL, it modifies the URL so the parameter is passed by a copy
127+
func generateRecognizedAvatarURL(u url.URL, size int) string {
128+
urlQuery := u.Query()
129+
urlQuery.Set("d", "identicon")
130+
if size > 0 {
131+
urlQuery.Set("s", strconv.Itoa(size))
132+
}
133+
u.RawQuery = urlQuery.Encode()
134+
return u.String()
135+
}
136+
127137
// generateEmailAvatarLink returns a email avatar link.
128138
// if final is true, it may use a slow path (eg: query DNS).
129139
// if final is false, it always uses a fast path.
@@ -133,36 +143,30 @@ func generateEmailAvatarLink(email string, size int, final bool) string {
133143
return DefaultAvatarLink()
134144
}
135145

136-
var avatarURL *url.URL
137146
var err error
138-
139147
if setting.EnableFederatedAvatar && setting.LibravatarService != nil {
140148
emailHash := saveEmailHash(email)
141149
if final {
150+
// for final link, we can spend more time on slow external query
151+
var avatarURL *url.URL
142152
if avatarURL, err = LibravatarURL(email); err != nil {
143153
return DefaultAvatarLink()
144154
}
145-
} else {
146-
if size > 0 {
147-
return setting.AppSubURL + "/avatar/" + emailHash + "?size=" + strconv.Itoa(size)
148-
}
149-
return setting.AppSubURL + "/avatar/" + emailHash
155+
return generateRecognizedAvatarURL(*avatarURL, size)
156+
}
157+
// for non-final link, we should return fast (use a 302 redirection link)
158+
urlStr := setting.AppSubURL + "/avatar/" + emailHash
159+
if size > 0 {
160+
urlStr += "?size=" + strconv.Itoa(size)
150161
}
162+
return urlStr
151163
} else if !setting.DisableGravatar {
152-
avatarURLDummy := *setting.GravatarSourceURL // copy GravatarSourceURL, because we will modify its Path.
153-
avatarURL = &avatarURLDummy
154-
avatarURL.Path = path.Join(avatarURL.Path, HashEmail(email))
155-
} else {
156-
return DefaultAvatarLink()
157-
}
158-
159-
urlQuery := avatarURL.Query()
160-
urlQuery.Set("d", "identicon")
161-
if size > 0 {
162-
urlQuery.Set("s", strconv.Itoa(size))
164+
// copy GravatarSourceURL, because we will modify its Path.
165+
avatarURLCopy := *setting.GravatarSourceURL
166+
avatarURLCopy.Path = path.Join(avatarURLCopy.Path, HashEmail(email))
167+
return generateRecognizedAvatarURL(avatarURLCopy, size)
163168
}
164-
avatarURL.RawQuery = urlQuery.Encode()
165-
return avatarURL.String()
169+
return DefaultAvatarLink()
166170
}
167171

168172
//GenerateEmailAvatarFastLink returns a avatar link (fast, the link may be a delegated one: "/avatar/${hash}")

0 commit comments

Comments
 (0)