summaryrefslogtreecommitdiffstats
path: root/modules/base
diff options
context:
space:
mode:
authorsilverwind <me@silverwind.io>2020-12-03 19:46:11 +0100
committerGitHub <noreply@github.com>2020-12-03 19:46:11 +0100
commit9269a038a4e904bdeaf5470e76e3a4f8a2a4685b (patch)
tree59730c0dbe7b011a8cb751d135e44152e7feeec0 /modules/base
parent0d35ef5b439623774d1adddf7071d744b1116809 (diff)
downloadgitea-9269a038a4e904bdeaf5470e76e3a4f8a2a4685b.tar.gz
gitea-9269a038a4e904bdeaf5470e76e3a4f8a2a4685b.zip
Direct avatar rendering (#13649)
* Direct avatar rendering This adds new template helpers for avatar rendering which output image elements with direct links to avatars which makes them cacheable by the browsers. This should be a major performance improvment for pages with many avatars. * fix avatars of other user's profile pages * fix top border on user avatar name * uncircle avatars * remove old incomplete avatar selector * use title attribute for name and add it back on blame * minor refactor * tweak comments * fix url path join and adjust test to new result * dedupe functions
Diffstat (limited to 'modules/base')
-rw-r--r--modules/base/tool.go89
-rw-r--r--modules/base/tool_test.go41
2 files changed, 0 insertions, 130 deletions
diff --git a/modules/base/tool.go b/modules/base/tool.go
index a21fd9b0f4..2cc09fb25d 100644
--- a/modules/base/tool.go
+++ b/modules/base/tool.go
@@ -12,9 +12,7 @@ import (
"encoding/hex"
"fmt"
"net/http"
- "net/url"
"os"
- "path"
"path/filepath"
"runtime"
"strconv"
@@ -134,93 +132,6 @@ func CreateTimeLimitCode(data string, minutes int, startInf interface{}) string
return code
}
-// HashEmail hashes email address to MD5 string.
-// https://en.gravatar.com/site/implement/hash/
-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"
-}
-
-// DefaultAvatarSize is a sentinel value for the default avatar size, as
-// determined by the avatar-hosting service.
-const DefaultAvatarSize = -1
-
-// libravatarURL returns the URL for the given email. This function should only
-// be called if a federated avatar service is enabled.
-func libravatarURL(email string) (*url.URL, error) {
- urlStr, err := setting.LibravatarService.FromEmail(email)
- if err != nil {
- log.Error("LibravatarService.FromEmail(email=%s): error %v", email, err)
- return nil, err
- }
- u, err := url.Parse(urlStr)
- if err != nil {
- log.Error("Failed to parse libravatar url(%s): error %v", urlStr, err)
- return nil, err
- }
- return u, nil
-}
-
-// SizedAvatarLink returns a sized link to the avatar for the given email
-// address.
-func SizedAvatarLink(email string, size int) string {
- var avatarURL *url.URL
- if setting.EnableFederatedAvatar && setting.LibravatarService != nil {
- var err error
- avatarURL, err = libravatarURL(email)
- if err != nil {
- return DefaultAvatarLink()
- }
- } else if !setting.DisableGravatar {
- // copy GravatarSourceURL, because we will modify its Path.
- copyOfGravatarSourceURL := *setting.GravatarSourceURL
- avatarURL = &copyOfGravatarSourceURL
- avatarURL.Path = path.Join(avatarURL.Path, HashEmail(email))
- } else {
- return DefaultAvatarLink()
- }
-
- vals := avatarURL.Query()
- vals.Set("d", "identicon")
- if size != DefaultAvatarSize {
- vals.Set("s", strconv.Itoa(size))
- }
- avatarURL.RawQuery = vals.Encode()
- return avatarURL.String()
-}
-
-// SizedAvatarLinkWithDomain returns a sized link to the avatar for the given email
-// address.
-func SizedAvatarLinkWithDomain(email string, size int) string {
- var avatarURL *url.URL
- if setting.EnableFederatedAvatar && setting.LibravatarService != nil {
- var err error
- avatarURL, err = libravatarURL(email)
- if err != nil {
- return DefaultAvatarLink()
- }
- } else if !setting.DisableGravatar {
- // copy GravatarSourceURL, because we will modify its Path.
- copyOfGravatarSourceURL := *setting.GravatarSourceURL
- avatarURL = &copyOfGravatarSourceURL
- avatarURL.Path = path.Join(avatarURL.Path, HashEmail(email))
- } else {
- return DefaultAvatarLink()
- }
-
- vals := avatarURL.Query()
- vals.Set("d", "identicon")
- if size != DefaultAvatarSize {
- vals.Set("s", strconv.Itoa(size))
- }
- avatarURL.RawQuery = vals.Encode()
- return avatarURL.String()
-}
-
// FileSize calculates the file size and generate user-friendly string.
func FileSize(s int64) string {
return humanize.IBytes(uint64(s))
diff --git a/modules/base/tool_test.go b/modules/base/tool_test.go
index f765fd0db0..0c5bd66579 100644
--- a/modules/base/tool_test.go
+++ b/modules/base/tool_test.go
@@ -5,11 +5,8 @@
package base
import (
- "net/url"
"testing"
- "code.gitea.io/gitea/modules/setting"
-
"github.com/stretchr/testify/assert"
)
@@ -56,44 +53,6 @@ func TestBasicAuthEncode(t *testing.T) {
// TODO: Test VerifyTimeLimitCode()
// TODO: Test CreateTimeLimitCode()
-func TestHashEmail(t *testing.T) {
- assert.Equal(t,
- "d41d8cd98f00b204e9800998ecf8427e",
- HashEmail(""),
- )
- assert.Equal(t,
- "353cbad9b58e69c96154ad99f92bedc7",
- HashEmail("gitea@example.com"),
- )
-}
-
-const gravatarSource = "https://secure.gravatar.com/avatar/"
-
-func disableGravatar() {
- setting.EnableFederatedAvatar = false
- setting.LibravatarService = nil
- setting.DisableGravatar = true
-}
-
-func enableGravatar(t *testing.T) {
- setting.DisableGravatar = false
- var err error
- setting.GravatarSourceURL, err = url.Parse(gravatarSource)
- assert.NoError(t, err)
-}
-
-func TestSizedAvatarLink(t *testing.T) {
- disableGravatar()
- assert.Equal(t, "/img/avatar_default.png",
- SizedAvatarLink("gitea@example.com", 100))
-
- enableGravatar(t)
- assert.Equal(t,
- "https://secure.gravatar.com/avatar/353cbad9b58e69c96154ad99f92bedc7?d=identicon&s=100",
- SizedAvatarLink("gitea@example.com", 100),
- )
-}
-
func TestFileSize(t *testing.T) {
var size int64 = 512
assert.Equal(t, "512 B", FileSize(size))