summaryrefslogtreecommitdiffstats
path: root/modules/setting
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2020-10-14 21:07:51 +0800
committerGitHub <noreply@github.com>2020-10-14 21:07:51 +0800
commit80a6b0f5bce15a641fc75f5f1ef6e42ef54424bc (patch)
tree504c7ccdc9cb42e0e282abdd8dbb75c4b24e9f5b /modules/setting
parent93f7525061bc9e6f5be734aba0de31b64c63d7a8 (diff)
downloadgitea-80a6b0f5bce15a641fc75f5f1ef6e42ef54424bc.tar.gz
gitea-80a6b0f5bce15a641fc75f5f1ef6e42ef54424bc.zip
Avatars and Repo avatars support storing in minio (#12516)
* Avatar support minio * Support repo avatar minio storage * Add missing migration * Fix bug * Fix test * Add test for minio store type on avatars and repo avatars; Add documents * Fix bug * Fix bug * Add back missed avatar link method * refactor codes * Simplify the codes * Code improvements * Fix lint * Fix test mysql * Fix test mysql * Fix test mysql * Fix settings * Fix test * fix test * Fix bug
Diffstat (limited to 'modules/setting')
-rw-r--r--modules/setting/database.go3
-rw-r--r--modules/setting/picture.go114
-rw-r--r--modules/setting/setting.go69
3 files changed, 117 insertions, 69 deletions
diff --git a/modules/setting/database.go b/modules/setting/database.go
index d5d03c2a30..7d082d1379 100644
--- a/modules/setting/database.go
+++ b/modules/setting/database.go
@@ -47,7 +47,8 @@ var (
ConnMaxLifetime time.Duration
IterateBufferSize int
}{
- Timeout: 500,
+ Timeout: 500,
+ IterateBufferSize: 50,
}
)
diff --git a/modules/setting/picture.go b/modules/setting/picture.go
new file mode 100644
index 0000000000..fa97245aa1
--- /dev/null
+++ b/modules/setting/picture.go
@@ -0,0 +1,114 @@
+// Copyright 2020 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package setting
+
+import (
+ "net/url"
+
+ "code.gitea.io/gitea/modules/log"
+
+ "strk.kbt.io/projects/go/libravatar"
+)
+
+// settings
+var (
+ // Picture settings
+ Avatar = struct {
+ Storage
+
+ MaxWidth int
+ MaxHeight int
+ MaxFileSize int64
+ }{
+ MaxWidth: 4096,
+ MaxHeight: 3072,
+ MaxFileSize: 1048576,
+ }
+
+ GravatarSource string
+ GravatarSourceURL *url.URL
+ DisableGravatar bool
+ EnableFederatedAvatar bool
+ LibravatarService *libravatar.Libravatar
+
+ RepoAvatar = struct {
+ Storage
+
+ Fallback string
+ FallbackImage string
+ }{}
+)
+
+func newPictureService() {
+ sec := Cfg.Section("picture")
+
+ avatarSec := Cfg.Section("avatar")
+ storageType := sec.Key("AVATAR_STORAGE_TYPE").MustString("")
+ // Specifically default PATH to AVATAR_UPLOAD_PATH
+ avatarSec.Key("PATH").MustString(
+ sec.Key("AVATAR_UPLOAD_PATH").String())
+
+ Avatar.Storage = getStorage("avatars", storageType, avatarSec)
+
+ Avatar.MaxWidth = sec.Key("AVATAR_MAX_WIDTH").MustInt(4096)
+ Avatar.MaxHeight = sec.Key("AVATAR_MAX_HEIGHT").MustInt(3072)
+ Avatar.MaxFileSize = sec.Key("AVATAR_MAX_FILE_SIZE").MustInt64(1048576)
+
+ switch source := sec.Key("GRAVATAR_SOURCE").MustString("gravatar"); source {
+ case "duoshuo":
+ GravatarSource = "http://gravatar.duoshuo.com/avatar/"
+ case "gravatar":
+ GravatarSource = "https://secure.gravatar.com/avatar/"
+ case "libravatar":
+ GravatarSource = "https://seccdn.libravatar.org/avatar/"
+ default:
+ GravatarSource = source
+ }
+ DisableGravatar = sec.Key("DISABLE_GRAVATAR").MustBool()
+ EnableFederatedAvatar = sec.Key("ENABLE_FEDERATED_AVATAR").MustBool(!InstallLock)
+ if OfflineMode {
+ DisableGravatar = true
+ EnableFederatedAvatar = false
+ }
+ if DisableGravatar {
+ EnableFederatedAvatar = false
+ }
+ if EnableFederatedAvatar || !DisableGravatar {
+ var err error
+ GravatarSourceURL, err = url.Parse(GravatarSource)
+ if err != nil {
+ log.Fatal("Failed to parse Gravatar URL(%s): %v",
+ GravatarSource, err)
+ }
+ }
+
+ if EnableFederatedAvatar {
+ LibravatarService = libravatar.New()
+ if GravatarSourceURL.Scheme == "https" {
+ LibravatarService.SetUseHTTPS(true)
+ LibravatarService.SetSecureFallbackHost(GravatarSourceURL.Host)
+ } else {
+ LibravatarService.SetUseHTTPS(false)
+ LibravatarService.SetFallbackHost(GravatarSourceURL.Host)
+ }
+ }
+
+ newRepoAvatarService()
+}
+
+func newRepoAvatarService() {
+ sec := Cfg.Section("picture")
+
+ repoAvatarSec := Cfg.Section("repo-avatar")
+ storageType := sec.Key("REPOSITORY_AVATAR_STORAGE_TYPE").MustString("")
+ // Specifically default PATH to AVATAR_UPLOAD_PATH
+ repoAvatarSec.Key("PATH").MustString(
+ sec.Key("REPOSITORY_AVATAR_UPLOAD_PATH").String())
+
+ RepoAvatar.Storage = getStorage("repo-avatars", storageType, repoAvatarSec)
+
+ RepoAvatar.Fallback = sec.Key("REPOSITORY_AVATAR_FALLBACK").MustString("none")
+ RepoAvatar.FallbackImage = sec.Key("REPOSITORY_AVATAR_FALLBACK_IMAGE").MustString("/img/repo_default.png")
+}
diff --git a/modules/setting/setting.go b/modules/setting/setting.go
index 4d8e02b9b0..7ae8bb352d 100644
--- a/modules/setting/setting.go
+++ b/modules/setting/setting.go
@@ -30,7 +30,6 @@ import (
"github.com/unknwon/com"
gossh "golang.org/x/crypto/ssh"
ini "gopkg.in/ini.v1"
- "strk.kbt.io/projects/go/libravatar"
)
// Scheme describes protocol types
@@ -272,20 +271,6 @@ var (
DefaultEmailNotification string
}
- // Picture settings
- AvatarUploadPath string
- AvatarMaxWidth int
- AvatarMaxHeight int
- GravatarSource string
- GravatarSourceURL *url.URL
- DisableGravatar bool
- EnableFederatedAvatar bool
- LibravatarService *libravatar.Libravatar
- AvatarMaxFileSize int64
- RepositoryAvatarUploadPath string
- RepositoryAvatarFallback string
- RepositoryAvatarFallbackImage string
-
// Log settings
LogLevel string
StacktraceLogLevel string
@@ -864,59 +849,7 @@ func NewContext() {
newRepository()
- sec = Cfg.Section("picture")
- AvatarUploadPath = sec.Key("AVATAR_UPLOAD_PATH").MustString(path.Join(AppDataPath, "avatars"))
- forcePathSeparator(AvatarUploadPath)
- if !filepath.IsAbs(AvatarUploadPath) {
- AvatarUploadPath = path.Join(AppWorkPath, AvatarUploadPath)
- }
- RepositoryAvatarUploadPath = sec.Key("REPOSITORY_AVATAR_UPLOAD_PATH").MustString(path.Join(AppDataPath, "repo-avatars"))
- forcePathSeparator(RepositoryAvatarUploadPath)
- if !filepath.IsAbs(RepositoryAvatarUploadPath) {
- RepositoryAvatarUploadPath = path.Join(AppWorkPath, RepositoryAvatarUploadPath)
- }
- RepositoryAvatarFallback = sec.Key("REPOSITORY_AVATAR_FALLBACK").MustString("none")
- RepositoryAvatarFallbackImage = sec.Key("REPOSITORY_AVATAR_FALLBACK_IMAGE").MustString("/img/repo_default.png")
- AvatarMaxWidth = sec.Key("AVATAR_MAX_WIDTH").MustInt(4096)
- AvatarMaxHeight = sec.Key("AVATAR_MAX_HEIGHT").MustInt(3072)
- AvatarMaxFileSize = sec.Key("AVATAR_MAX_FILE_SIZE").MustInt64(1048576)
- switch source := sec.Key("GRAVATAR_SOURCE").MustString("gravatar"); source {
- case "duoshuo":
- GravatarSource = "http://gravatar.duoshuo.com/avatar/"
- case "gravatar":
- GravatarSource = "https://secure.gravatar.com/avatar/"
- case "libravatar":
- GravatarSource = "https://seccdn.libravatar.org/avatar/"
- default:
- GravatarSource = source
- }
- DisableGravatar = sec.Key("DISABLE_GRAVATAR").MustBool()
- EnableFederatedAvatar = sec.Key("ENABLE_FEDERATED_AVATAR").MustBool(!InstallLock)
- if OfflineMode {
- DisableGravatar = true
- EnableFederatedAvatar = false
- }
- if DisableGravatar {
- EnableFederatedAvatar = false
- }
- if EnableFederatedAvatar || !DisableGravatar {
- GravatarSourceURL, err = url.Parse(GravatarSource)
- if err != nil {
- log.Fatal("Failed to parse Gravatar URL(%s): %v",
- GravatarSource, err)
- }
- }
-
- if EnableFederatedAvatar {
- LibravatarService = libravatar.New()
- if GravatarSourceURL.Scheme == "https" {
- LibravatarService.SetUseHTTPS(true)
- LibravatarService.SetSecureFallbackHost(GravatarSourceURL.Host)
- } else {
- LibravatarService.SetUseHTTPS(false)
- LibravatarService.SetFallbackHost(GravatarSourceURL.Host)
- }
- }
+ newPictureService()
if err = Cfg.Section("ui").MapTo(&UI); err != nil {
log.Fatal("Failed to map UI settings: %v", err)