@@ -112,7 +112,6 @@ func GenerateUserAvatarFastLink(userName string, size int) string {
112
112
if size < 0 {
113
113
size = 0
114
114
}
115
- //AppSubURL: It is either "" or starts with '/' and ends without '/', such as '/{subpath}'. question: should we use AppURL or StaticURLPrefix?
116
115
return setting .AppSubURL + "/user/avatar/" + userName + "/" + strconv .Itoa (size )
117
116
}
118
117
@@ -124,6 +123,17 @@ func GenerateUserAvatarImageLink(userAvatar string, size int) string {
124
123
return setting .AppSubURL + "/avatars/" + userAvatar
125
124
}
126
125
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
+
127
137
// generateEmailAvatarLink returns a email avatar link.
128
138
// if final is true, it may use a slow path (eg: query DNS).
129
139
// if final is false, it always uses a fast path.
@@ -133,36 +143,30 @@ func generateEmailAvatarLink(email string, size int, final bool) string {
133
143
return DefaultAvatarLink ()
134
144
}
135
145
136
- var avatarURL * url.URL
137
146
var err error
138
-
139
147
if setting .EnableFederatedAvatar && setting .LibravatarService != nil {
140
148
emailHash := saveEmailHash (email )
141
149
if final {
150
+ // for final link, we can spend more time on slow external query
151
+ var avatarURL * url.URL
142
152
if avatarURL , err = LibravatarURL (email ); err != nil {
143
153
return DefaultAvatarLink ()
144
154
}
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 )
150
161
}
162
+ return urlStr
151
163
} 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 )
163
168
}
164
- avatarURL .RawQuery = urlQuery .Encode ()
165
- return avatarURL .String ()
169
+ return DefaultAvatarLink ()
166
170
}
167
171
168
172
//GenerateEmailAvatarFastLink returns a avatar link (fast, the link may be a delegated one: "/avatar/${hash}")
0 commit comments