fix(setting): honor bare -1 for timeout settings (#39181)

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
aminoy
2026-08-31 19:48:59 +00:00
committed by GitHub
co-authored by wxiaoguang
parent 70678e9a3d
commit fc9800b383
12 changed files with 130 additions and 58 deletions
+62 -5
View File
@@ -19,15 +19,22 @@ import (
) )
type ConfigKey interface { type ConfigKey interface {
internal()
Name() string Name() string
Value() string Value() string
SetValue(v string) SetValue(v string)
In(defaultVal string, candidates []string) string
String() string String() string
Strings(delim string) []string Strings(delim string) []string
Bool() (bool, error) Bool() (bool, error)
// FIXME: INI-MUST-SIDE-EFFECT: ini package's In/MustXxx functions have bad side-effects:
// they will change the origin config content and write the key with default value if the key didn't exist.
// Need to completely refactor the ini package to remove this side-effect.
In(defaultVal string, candidates []string) string
MustString(defaultVal string) string MustString(defaultVal string) string
MustBool(defaultVal ...bool) bool MustBool(defaultVal ...bool) bool
MustInt(defaultVal ...int) int MustInt(defaultVal ...int) int
@@ -73,10 +80,56 @@ type iniConfigSection struct {
sec *ini.Section sec *ini.Section
} }
type iniConfigKey struct {
key *ini.Key
}
func (k *iniConfigKey) internal() {}
func (k *iniConfigKey) Name() string { return k.key.Name() }
func (k *iniConfigKey) Value() string { return k.key.Value() }
func (k *iniConfigKey) SetValue(v string) { k.key.SetValue(v) }
func (k *iniConfigKey) String() string { return k.key.String() }
func (k *iniConfigKey) Strings(delim string) []string { return k.key.Strings(delim) }
func (k *iniConfigKey) Bool() (bool, error) { return k.key.Bool() }
func (k *iniConfigKey) MustString(defaultVal string) string { return k.key.MustString(defaultVal) }
func (k *iniConfigKey) MustBool(defaultVal ...bool) bool { return k.key.MustBool(defaultVal...) }
func (k *iniConfigKey) MustInt(defaultVal ...int) int { return k.key.MustInt(defaultVal...) }
func (k *iniConfigKey) MustInt64(defaultVal ...int64) int64 { return k.key.MustInt64(defaultVal...) }
func (k *iniConfigKey) In(defaultVal string, candidates []string) string {
return k.key.In(defaultVal, candidates)
}
func (k *iniConfigKey) MustDuration(defaultVal ...time.Duration) time.Duration {
s := k.String()
v, err := strconv.ParseInt(s, 10, 64)
if err == nil {
d := time.Duration(v) * time.Second
k.key.SetValue(d.String())
return d
}
d, err := time.ParseDuration(s)
if err != nil {
d = util.OptionalArg(defaultVal)
}
k.key.SetValue(d.String())
return d
}
var ( var (
_ ConfigProvider = (*iniConfigProvider)(nil) _ ConfigProvider = (*iniConfigProvider)(nil)
_ ConfigSection = (*iniConfigSection)(nil) _ ConfigSection = (*iniConfigSection)(nil)
_ ConfigKey = (*ini.Key)(nil) _ ConfigKey = (*iniConfigKey)(nil)
) )
// ConfigSectionKey only searches the keys in the given section, but it is O(n). // ConfigSectionKey only searches the keys in the given section, but it is O(n).
@@ -156,16 +209,20 @@ func (s *iniConfigSection) HasKey(key string) bool {
} }
func (s *iniConfigSection) NewKey(name, value string) (ConfigKey, error) { func (s *iniConfigSection) NewKey(name, value string) (ConfigKey, error) {
return s.sec.NewKey(name, value) k, err := s.sec.NewKey(name, value)
if err != nil {
return nil, err
}
return &iniConfigKey{k}, nil
} }
func (s *iniConfigSection) Key(key string) ConfigKey { func (s *iniConfigSection) Key(key string) ConfigKey {
return s.sec.Key(key) return &iniConfigKey{s.sec.Key(key)}
} }
func (s *iniConfigSection) Keys() (keys []ConfigKey) { func (s *iniConfigSection) Keys() (keys []ConfigKey) {
for _, k := range s.sec.Keys() { for _, k := range s.sec.Keys() {
keys = append(keys, k) keys = append(keys, &iniConfigKey{k})
} }
return keys return keys
} }
+13
View File
@@ -6,6 +6,7 @@ package setting
import ( import (
"os" "os"
"testing" "testing"
"time"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
@@ -136,3 +137,15 @@ func TestDisableSaving(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, "k1 = a\nk2 = y\nk3 = z\n", string(bs)) assert.Equal(t, "k1 = a\nk2 = y\nk3 = z\n", string(bs))
} }
func TestConfigValueRead(t *testing.T) {
cfg, _ := NewConfigProviderFromData(`
neg = -1
zero = 0
hour = 1h
`)
assert.Equal(t, -1*time.Second, cfg.Section("").Key("neg").MustDuration(9999))
assert.EqualValues(t, 0, cfg.Section("").Key("zero").MustDuration(9999))
assert.Equal(t, time.Hour, cfg.Section("").Key("hour").MustDuration(9999))
assert.Equal(t, time.Duration(9999), cfg.Section("").Key("def").MustDuration(9999))
}
+1 -1
View File
@@ -49,7 +49,7 @@ func loadLFSFrom(rootCfg ConfigProvider) error {
if lfsSec == nil { if lfsSec == nil {
lfsSec = rootCfg.Section("lfs") lfsSec = rootCfg.Section("lfs")
} }
lfsSec.Key("PATH").MustString(val) lfsSec.Key("PATH").MustString(val) // FIXME: INI-MUST-SIDE-EFFECT
} }
var err error var err error
+8 -6
View File
@@ -56,13 +56,13 @@ func prepareLoggerConfig(rootCfg ConfigProvider) {
sec := rootCfg.Section("log") sec := rootCfg.Section("log")
if !sec.HasKey("logger.default.MODE") { if !sec.HasKey("logger.default.MODE") {
sec.Key("logger.default.MODE").MustString(",") sec.Key("logger.default.MODE").MustString(",") // FIXME: INI-MUST-SIDE-EFFECT
} }
deprecatedSetting(rootCfg, "log", "ACCESS", "log", "logger.access.MODE", "1.21") deprecatedSetting(rootCfg, "log", "ACCESS", "log", "logger.access.MODE", "1.21")
deprecatedSetting(rootCfg, "log", "ENABLE_ACCESS_LOG", "log", "logger.access.MODE", "1.21") deprecatedSetting(rootCfg, "log", "ENABLE_ACCESS_LOG", "log", "logger.access.MODE", "1.21")
if val := sec.Key("ACCESS").String(); val != "" { if val := sec.Key("ACCESS").String(); val != "" {
sec.Key("logger.access.MODE").MustString(val) sec.Key("logger.access.MODE").MustString(val) // FIXME: INI-MUST-SIDE-EFFECT
} }
if sec.HasKey("ENABLE_ACCESS_LOG") && !sec.Key("ENABLE_ACCESS_LOG").MustBool() { if sec.HasKey("ENABLE_ACCESS_LOG") && !sec.Key("ENABLE_ACCESS_LOG").MustBool() {
sec.Key("logger.access.MODE").SetValue("") sec.Key("logger.access.MODE").SetValue("")
@@ -71,10 +71,11 @@ func prepareLoggerConfig(rootCfg ConfigProvider) {
deprecatedSetting(rootCfg, "log", "ROUTER", "log", "logger.router.MODE", "1.21") deprecatedSetting(rootCfg, "log", "ROUTER", "log", "logger.router.MODE", "1.21")
deprecatedSetting(rootCfg, "log", "DISABLE_ROUTER_LOG", "log", "logger.router.MODE", "1.21") deprecatedSetting(rootCfg, "log", "DISABLE_ROUTER_LOG", "log", "logger.router.MODE", "1.21")
if val := sec.Key("ROUTER").String(); val != "" { if val := sec.Key("ROUTER").String(); val != "" {
sec.Key("logger.router.MODE").MustString(val) sec.Key("logger.router.MODE").MustString(val) // FIXME: INI-MUST-SIDE-EFFECT
} }
if !sec.HasKey("logger.router.MODE") { if !sec.HasKey("logger.router.MODE") {
sec.Key("logger.router.MODE").MustString(",") // use default logger // Use the default logger.
sec.Key("logger.router.MODE").MustString(",") // FIXME: INI-MUST-SIDE-EFFECT
} }
if sec.HasKey("DISABLE_ROUTER_LOG") && sec.Key("DISABLE_ROUTER_LOG").MustBool() { if sec.HasKey("DISABLE_ROUTER_LOG") && sec.Key("DISABLE_ROUTER_LOG").MustBool() {
sec.Key("logger.router.MODE").SetValue("") sec.Key("logger.router.MODE").SetValue("")
@@ -83,10 +84,11 @@ func prepareLoggerConfig(rootCfg ConfigProvider) {
deprecatedSetting(rootCfg, "log", "XORM", "log", "logger.xorm.MODE", "1.21") deprecatedSetting(rootCfg, "log", "XORM", "log", "logger.xorm.MODE", "1.21")
deprecatedSetting(rootCfg, "log", "ENABLE_XORM_LOG", "log", "logger.xorm.MODE", "1.21") deprecatedSetting(rootCfg, "log", "ENABLE_XORM_LOG", "log", "logger.xorm.MODE", "1.21")
if val := sec.Key("XORM").String(); val != "" { if val := sec.Key("XORM").String(); val != "" {
sec.Key("logger.xorm.MODE").MustString(val) sec.Key("logger.xorm.MODE").MustString(val) // FIXME: INI-MUST-SIDE-EFFECT
} }
if !sec.HasKey("logger.xorm.MODE") { if !sec.HasKey("logger.xorm.MODE") {
sec.Key("logger.xorm.MODE").MustString(",") // use default logger // Use the default logger.
sec.Key("logger.xorm.MODE").MustString(",") // FIXME: INI-MUST-SIDE-EFFECT
} }
if sec.HasKey("ENABLE_XORM_LOG") && !sec.Key("ENABLE_XORM_LOG").MustBool() { if sec.HasKey("ENABLE_XORM_LOG") && !sec.Key("ENABLE_XORM_LOG").MustBool() {
sec.Key("logger.xorm.MODE").SetValue("") sec.Key("logger.xorm.MODE").SetValue("")
+17 -17
View File
@@ -79,7 +79,7 @@ func loadMailerFrom(rootCfg ConfigProvider) {
deprecatedSetting(rootCfg, "mailer", "MAILER_TYPE", "mailer", "PROTOCOL", "v1.19.0") deprecatedSetting(rootCfg, "mailer", "MAILER_TYPE", "mailer", "PROTOCOL", "v1.19.0")
if sec.HasKey("MAILER_TYPE") && !sec.HasKey("PROTOCOL") { if sec.HasKey("MAILER_TYPE") && !sec.HasKey("PROTOCOL") {
if sec.Key("MAILER_TYPE").String() == "sendmail" { if sec.Key("MAILER_TYPE").String() == "sendmail" {
sec.Key("PROTOCOL").MustString("sendmail") sec.Key("PROTOCOL").MustString("sendmail") // FIXME: INI-MUST-SIDE-EFFECT
} }
} }
@@ -95,32 +95,32 @@ func loadMailerFrom(rootCfg ConfigProvider) {
if addr == "" { if addr == "" {
addr = "127.0.0.1" addr = "127.0.0.1"
} }
sec.Key("SMTP_ADDR").MustString(addr) sec.Key("SMTP_ADDR").MustString(addr) // FIXME: INI-MUST-SIDE-EFFECT
sec.Key("SMTP_PORT").MustString(port) sec.Key("SMTP_PORT").MustString(port) // FIXME: INI-MUST-SIDE-EFFECT
} }
deprecatedSetting(rootCfg, "mailer", "IS_TLS_ENABLED", "mailer", "PROTOCOL", "v1.19.0") deprecatedSetting(rootCfg, "mailer", "IS_TLS_ENABLED", "mailer", "PROTOCOL", "v1.19.0")
if sec.HasKey("IS_TLS_ENABLED") && !sec.HasKey("PROTOCOL") { if sec.HasKey("IS_TLS_ENABLED") && !sec.HasKey("PROTOCOL") {
if sec.Key("IS_TLS_ENABLED").MustBool() { if sec.Key("IS_TLS_ENABLED").MustBool() {
sec.Key("PROTOCOL").MustString("smtps") sec.Key("PROTOCOL").MustString("smtps") // FIXME: INI-MUST-SIDE-EFFECT
} else { } else {
sec.Key("PROTOCOL").MustString("smtp+starttls") sec.Key("PROTOCOL").MustString("smtp+starttls") // FIXME: INI-MUST-SIDE-EFFECT
} }
} }
deprecatedSetting(rootCfg, "mailer", "DISABLE_HELO", "mailer", "ENABLE_HELO", "v1.19.0") deprecatedSetting(rootCfg, "mailer", "DISABLE_HELO", "mailer", "ENABLE_HELO", "v1.19.0")
if sec.HasKey("DISABLE_HELO") && !sec.HasKey("ENABLE_HELO") { if sec.HasKey("DISABLE_HELO") && !sec.HasKey("ENABLE_HELO") {
sec.Key("ENABLE_HELO").MustBool(!sec.Key("DISABLE_HELO").MustBool()) sec.Key("ENABLE_HELO").MustBool(!sec.Key("DISABLE_HELO").MustBool()) // FIXME: INI-MUST-SIDE-EFFECT
} }
deprecatedSetting(rootCfg, "mailer", "SKIP_VERIFY", "mailer", "FORCE_TRUST_SERVER_CERT", "v1.19.0") deprecatedSetting(rootCfg, "mailer", "SKIP_VERIFY", "mailer", "FORCE_TRUST_SERVER_CERT", "v1.19.0")
if sec.HasKey("SKIP_VERIFY") && !sec.HasKey("FORCE_TRUST_SERVER_CERT") { if sec.HasKey("SKIP_VERIFY") && !sec.HasKey("FORCE_TRUST_SERVER_CERT") {
sec.Key("FORCE_TRUST_SERVER_CERT").MustBool(sec.Key("SKIP_VERIFY").MustBool()) sec.Key("FORCE_TRUST_SERVER_CERT").MustBool(sec.Key("SKIP_VERIFY").MustBool()) // FIXME: INI-MUST-SIDE-EFFECT
} }
deprecatedSetting(rootCfg, "mailer", "USE_CERTIFICATE", "mailer", "USE_CLIENT_CERT", "v1.19.0") deprecatedSetting(rootCfg, "mailer", "USE_CERTIFICATE", "mailer", "USE_CLIENT_CERT", "v1.19.0")
if sec.HasKey("USE_CERTIFICATE") && !sec.HasKey("USE_CLIENT_CERT") { if sec.HasKey("USE_CERTIFICATE") && !sec.HasKey("USE_CLIENT_CERT") {
sec.Key("USE_CLIENT_CERT").MustBool(sec.Key("USE_CERTIFICATE").MustBool()) sec.Key("USE_CLIENT_CERT").MustBool(sec.Key("USE_CERTIFICATE").MustBool()) // FIXME: INI-MUST-SIDE-EFFECT
} }
deprecatedSetting(rootCfg, "mailer", "CERT_FILE", "mailer", "CLIENT_CERT_FILE", "v1.19.0") deprecatedSetting(rootCfg, "mailer", "CERT_FILE", "mailer", "CLIENT_CERT_FILE", "v1.19.0")
@@ -135,7 +135,7 @@ func loadMailerFrom(rootCfg ConfigProvider) {
deprecatedSetting(rootCfg, "mailer", "ENABLE_HTML_ALTERNATIVE", "mailer", "SEND_AS_PLAIN_TEXT", "v1.19.0") deprecatedSetting(rootCfg, "mailer", "ENABLE_HTML_ALTERNATIVE", "mailer", "SEND_AS_PLAIN_TEXT", "v1.19.0")
if sec.HasKey("ENABLE_HTML_ALTERNATIVE") && !sec.HasKey("SEND_AS_PLAIN_TEXT") { if sec.HasKey("ENABLE_HTML_ALTERNATIVE") && !sec.HasKey("SEND_AS_PLAIN_TEXT") {
sec.Key("SEND_AS_PLAIN_TEXT").MustBool(!sec.Key("ENABLE_HTML_ALTERNATIVE").MustBool(false)) sec.Key("SEND_AS_PLAIN_TEXT").MustBool(!sec.Key("ENABLE_HTML_ALTERNATIVE").MustBool(false)) // FIXME: INI-MUST-SIDE-EFFECT
} }
if sec.HasKey("PROTOCOL") && sec.Key("PROTOCOL").String() == "smtp+startls" { if sec.HasKey("PROTOCOL") && sec.Key("PROTOCOL").String() == "smtp+startls" {
@@ -144,15 +144,15 @@ func loadMailerFrom(rootCfg ConfigProvider) {
} }
// Set default values & validate // Set default values & validate
sec.Key("NAME").MustString(AppName) sec.Key("NAME").MustString(AppName) // FIXME: INI-MUST-SIDE-EFFECT
sec.Key("PROTOCOL").In("", []string{"smtp", "smtps", "smtp+starttls", "smtp+unix", "sendmail", "dummy"}) sec.Key("PROTOCOL").In("", []string{"smtp", "smtps", "smtp+starttls", "smtp+unix", "sendmail", "dummy"})
sec.Key("ENABLE_HELO").MustBool(true) sec.Key("ENABLE_HELO").MustBool(true) // FIXME: INI-MUST-SIDE-EFFECT
sec.Key("FORCE_TRUST_SERVER_CERT").MustBool(false) sec.Key("FORCE_TRUST_SERVER_CERT").MustBool(false) // FIXME: INI-MUST-SIDE-EFFECT
sec.Key("USE_CLIENT_CERT").MustBool(false) sec.Key("USE_CLIENT_CERT").MustBool(false) // FIXME: INI-MUST-SIDE-EFFECT
sec.Key("SENDMAIL_PATH").MustString("sendmail") sec.Key("SENDMAIL_PATH").MustString("sendmail") // FIXME: INI-MUST-SIDE-EFFECT
sec.Key("SENDMAIL_TIMEOUT").MustDuration(5 * time.Minute) sec.Key("SENDMAIL_TIMEOUT").MustDuration(5 * time.Minute) // FIXME: INI-MUST-SIDE-EFFECT
sec.Key("SENDMAIL_CONVERT_CRLF").MustBool(true) sec.Key("SENDMAIL_CONVERT_CRLF").MustBool(true) // FIXME: INI-MUST-SIDE-EFFECT
sec.Key("FROM").MustString(sec.Key("USER").String()) sec.Key("FROM").MustString(sec.Key("USER").String()) // FIXME: INI-MUST-SIDE-EFFECT
// Now map the values on to the MailService // Now map the values on to the MailService
MailService = &Mailer{} MailService = &Mailer{}
+2 -2
View File
@@ -38,7 +38,7 @@ func loadAvatarsFrom(rootCfg ConfigProvider) error {
avatarSec := rootCfg.Section("avatar") avatarSec := rootCfg.Section("avatar")
storageType := sec.Key("AVATAR_STORAGE_TYPE").MustString("") storageType := sec.Key("AVATAR_STORAGE_TYPE").MustString("")
// Specifically default PATH to AVATAR_UPLOAD_PATH // Specifically default PATH to AVATAR_UPLOAD_PATH
avatarSec.Key("PATH").MustString(sec.Key("AVATAR_UPLOAD_PATH").String()) avatarSec.Key("PATH").MustString(sec.Key("AVATAR_UPLOAD_PATH").String()) // FIXME: INI-MUST-SIDE-EFFECT
var err error var err error
Avatar.Storage, err = getStorage(rootCfg, "avatars", storageType, avatarSec) Avatar.Storage, err = getStorage(rootCfg, "avatars", storageType, avatarSec)
@@ -73,7 +73,7 @@ func loadRepoAvatarFrom(rootCfg ConfigProvider) error {
repoAvatarSec := rootCfg.Section("repo-avatar") repoAvatarSec := rootCfg.Section("repo-avatar")
storageType := sec.Key("REPOSITORY_AVATAR_STORAGE_TYPE").MustString("") storageType := sec.Key("REPOSITORY_AVATAR_STORAGE_TYPE").MustString("")
// Specifically default PATH to AVATAR_UPLOAD_PATH // Specifically default PATH to AVATAR_UPLOAD_PATH
repoAvatarSec.Key("PATH").MustString(sec.Key("REPOSITORY_AVATAR_UPLOAD_PATH").String()) repoAvatarSec.Key("PATH").MustString(sec.Key("REPOSITORY_AVATAR_UPLOAD_PATH").String()) // FIXME: INI-MUST-SIDE-EFFECT
var err error var err error
RepoAvatar.Storage, err = getStorage(rootCfg, "repo-avatars", storageType, repoAvatarSec) RepoAvatar.Storage, err = getStorage(rootCfg, "repo-avatars", storageType, repoAvatarSec)
+3 -3
View File
@@ -306,9 +306,9 @@ func loadRepositoryFrom(rootCfg ConfigProvider) {
Repository.GoGetCloneURLProtocol = sec.Key("GO_GET_CLONE_URL_PROTOCOL").MustString("https") Repository.GoGetCloneURLProtocol = sec.Key("GO_GET_CLONE_URL_PROTOCOL").MustString("https")
// MAX_CREATION_LIMIT is a shortcut that sets the default for the two per-type limits below. // MAX_CREATION_LIMIT is a shortcut that sets the default for the two per-type limits below.
// USER_/ORG_MAX_CREATION_LIMIT take precedence when explicitly set. // USER_/ORG_MAX_CREATION_LIMIT take precedence when explicitly set.
Repository.MaxCreationLimit = sec.Key("MAX_CREATION_LIMIT").MustInt(-1) Repository.MaxCreationLimit = sec.Key("MAX_CREATION_LIMIT").MustInt(-1) // FIXME: INI-MUST-SIDE-EFFECT
Repository.UserMaxCreationLimit = sec.Key("USER_MAX_CREATION_LIMIT").MustInt(Repository.MaxCreationLimit) Repository.UserMaxCreationLimit = sec.Key("USER_MAX_CREATION_LIMIT").MustInt(Repository.MaxCreationLimit) // FIXME: INI-MUST-SIDE-EFFECT
Repository.OrgMaxCreationLimit = sec.Key("ORG_MAX_CREATION_LIMIT").MustInt(Repository.MaxCreationLimit) Repository.OrgMaxCreationLimit = sec.Key("ORG_MAX_CREATION_LIMIT").MustInt(Repository.MaxCreationLimit) // FIXME: INI-MUST-SIDE-EFFECT
Repository.DefaultBranch = sec.Key("DEFAULT_BRANCH").MustString(Repository.DefaultBranch) Repository.DefaultBranch = sec.Key("DEFAULT_BRANCH").MustString(Repository.DefaultBranch)
RepoRootPath = sec.Key("ROOT").MustString(filepath.Join(AppDataPath, "gitea-repositories")) RepoRootPath = sec.Key("ROOT").MustString(filepath.Join(AppDataPath, "gitea-repositories"))
if !filepath.IsAbs(RepoRootPath) { if !filepath.IsAbs(RepoRootPath) {
+1 -1
View File
@@ -244,7 +244,7 @@ func loadServiceFrom(rootCfg ConfigProvider) {
Service.DefaultOrgMemberVisible = sec.Key("DEFAULT_ORG_MEMBER_VISIBLE").MustBool() Service.DefaultOrgMemberVisible = sec.Key("DEFAULT_ORG_MEMBER_VISIBLE").MustBool()
Service.UserDeleteWithCommentsMaxTime = sec.Key("USER_DELETE_WITH_COMMENTS_MAX_TIME").MustDuration(0) Service.UserDeleteWithCommentsMaxTime = sec.Key("USER_DELETE_WITH_COMMENTS_MAX_TIME").MustDuration(0)
sec.Key("VALID_SITE_URL_SCHEMES").MustString("http,https") sec.Key("VALID_SITE_URL_SCHEMES").MustString("http,https") // FIXME: INI-MUST-SIDE-EFFECT
Service.ValidSiteURLSchemes = sec.Key("VALID_SITE_URL_SCHEMES").Strings(",") Service.ValidSiteURLSchemes = sec.Key("VALID_SITE_URL_SCHEMES").Strings(",")
schemes := make([]string, 0, len(Service.ValidSiteURLSchemes)) schemes := make([]string, 0, len(Service.ValidSiteURLSchemes))
for _, scheme := range Service.ValidSiteURLSchemes { for _, scheme := range Service.ValidSiteURLSchemes {
+3 -3
View File
@@ -146,9 +146,9 @@ func loadSSHFrom(rootCfg ConfigProvider) {
} }
if len(SSH.TrustedUserCAKeys) > 0 { if len(SSH.TrustedUserCAKeys) > 0 {
// Set the default as email,username otherwise we can leave it empty // Set the default as email,username otherwise we can leave it empty
sec.Key("SSH_AUTHORIZED_PRINCIPALS_ALLOW").MustString("username,email") sec.Key("SSH_AUTHORIZED_PRINCIPALS_ALLOW").MustString("username,email") // FIXME: INI-MUST-SIDE-EFFECT
} else { } else {
sec.Key("SSH_AUTHORIZED_PRINCIPALS_ALLOW").MustString("off") sec.Key("SSH_AUTHORIZED_PRINCIPALS_ALLOW").MustString("off") // FIXME: INI-MUST-SIDE-EFFECT
} }
SSH.AuthorizedPrincipalsAllow, SSH.AuthorizedPrincipalsEnabled = parseAuthorizedPrincipalsAllow(sec.Key("SSH_AUTHORIZED_PRINCIPALS_ALLOW").Strings(",")) SSH.AuthorizedPrincipalsAllow, SSH.AuthorizedPrincipalsEnabled = parseAuthorizedPrincipalsAllow(sec.Key("SSH_AUTHORIZED_PRINCIPALS_ALLOW").Strings(","))
@@ -156,7 +156,7 @@ func loadSSHFrom(rootCfg ConfigProvider) {
SSH.MinimumKeySizeCheck = sec.Key("MINIMUM_KEY_SIZE_CHECK").MustBool(SSH.MinimumKeySizeCheck) SSH.MinimumKeySizeCheck = sec.Key("MINIMUM_KEY_SIZE_CHECK").MustBool(SSH.MinimumKeySizeCheck)
minimumKeySizes := rootCfg.Section("ssh.minimum_key_sizes").Keys() minimumKeySizes := rootCfg.Section("ssh.minimum_key_sizes").Keys()
for _, key := range minimumKeySizes { for _, key := range minimumKeySizes {
if key.MustInt() != -1 { if key.MustInt() != -1 { // FIXME: INI-MUST-SIDE-EFFECT
SSH.MinimumKeySizes[strings.ToLower(key.Name())] = key.MustInt() SSH.MinimumKeySizes[strings.ToLower(key.Name())] = key.MustInt()
} else { } else {
delete(SSH.MinimumKeySizes, strings.ToLower(key.Name())) delete(SSH.MinimumKeySizes, strings.ToLower(key.Name()))
+14 -14
View File
@@ -104,20 +104,20 @@ const storageSectionName = "storage"
func getDefaultStorageSection(rootCfg ConfigProvider) ConfigSection { func getDefaultStorageSection(rootCfg ConfigProvider) ConfigSection {
storageSec := rootCfg.Section(storageSectionName) storageSec := rootCfg.Section(storageSectionName)
// Global Defaults // Global Defaults
storageSec.Key("STORAGE_TYPE").MustString("local") storageSec.Key("STORAGE_TYPE").MustString("local") // FIXME: INI-MUST-SIDE-EFFECT
storageSec.Key("MINIO_ENDPOINT").MustString("localhost:9000") storageSec.Key("MINIO_ENDPOINT").MustString("localhost:9000") // FIXME: INI-MUST-SIDE-EFFECT
storageSec.Key("MINIO_ACCESS_KEY_ID").MustString("") storageSec.Key("MINIO_ACCESS_KEY_ID").MustString("") // FIXME: INI-MUST-SIDE-EFFECT
storageSec.Key("MINIO_SECRET_ACCESS_KEY").MustString("") storageSec.Key("MINIO_SECRET_ACCESS_KEY").MustString("") // FIXME: INI-MUST-SIDE-EFFECT
storageSec.Key("MINIO_BUCKET").MustString("gitea") storageSec.Key("MINIO_BUCKET").MustString("gitea") // FIXME: INI-MUST-SIDE-EFFECT
storageSec.Key("MINIO_LOCATION").MustString("us-east-1") storageSec.Key("MINIO_LOCATION").MustString("us-east-1") // FIXME: INI-MUST-SIDE-EFFECT
storageSec.Key("MINIO_USE_SSL").MustBool(false) storageSec.Key("MINIO_USE_SSL").MustBool(false) // FIXME: INI-MUST-SIDE-EFFECT
storageSec.Key("MINIO_INSECURE_SKIP_VERIFY").MustBool(false) storageSec.Key("MINIO_INSECURE_SKIP_VERIFY").MustBool(false) // FIXME: INI-MUST-SIDE-EFFECT
storageSec.Key("MINIO_CHECKSUM_ALGORITHM").MustString("default") storageSec.Key("MINIO_CHECKSUM_ALGORITHM").MustString("default") // FIXME: INI-MUST-SIDE-EFFECT
storageSec.Key("MINIO_BUCKET_LOOKUP_TYPE").MustString("auto") storageSec.Key("MINIO_BUCKET_LOOKUP_TYPE").MustString("auto") // FIXME: INI-MUST-SIDE-EFFECT
storageSec.Key("AZURE_BLOB_ENDPOINT").MustString("") storageSec.Key("AZURE_BLOB_ENDPOINT").MustString("") // FIXME: INI-MUST-SIDE-EFFECT
storageSec.Key("AZURE_BLOB_ACCOUNT_NAME").MustString("") storageSec.Key("AZURE_BLOB_ACCOUNT_NAME").MustString("") // FIXME: INI-MUST-SIDE-EFFECT
storageSec.Key("AZURE_BLOB_ACCOUNT_KEY").MustString("") storageSec.Key("AZURE_BLOB_ACCOUNT_KEY").MustString("") // FIXME: INI-MUST-SIDE-EFFECT
storageSec.Key("AZURE_BLOB_CONTAINER").MustString("gitea") storageSec.Key("AZURE_BLOB_CONTAINER").MustString("gitea") // FIXME: INI-MUST-SIDE-EFFECT
return storageSec return storageSec
} }
+5 -5
View File
@@ -16,11 +16,11 @@ func loadTaskFrom(rootCfg ConfigProvider) {
switch taskSec.Key("QUEUE_TYPE").MustString("channel") { switch taskSec.Key("QUEUE_TYPE").MustString("channel") {
case "channel": case "channel":
queueTaskSec.Key("TYPE").MustString("persistable-channel") queueTaskSec.Key("TYPE").MustString("persistable-channel") // FIXME: INI-MUST-SIDE-EFFECT
queueTaskSec.Key("CONN_STR").MustString(taskSec.Key("QUEUE_CONN_STR").MustString("")) queueTaskSec.Key("CONN_STR").MustString(taskSec.Key("QUEUE_CONN_STR").MustString("")) // FIXME: INI-MUST-SIDE-EFFECT
case "redis": case "redis":
queueTaskSec.Key("TYPE").MustString("redis") queueTaskSec.Key("TYPE").MustString("redis") // FIXME: INI-MUST-SIDE-EFFECT
queueTaskSec.Key("CONN_STR").MustString(taskSec.Key("QUEUE_CONN_STR").MustString("addrs=127.0.0.1:6379 db=0")) queueTaskSec.Key("CONN_STR").MustString(taskSec.Key("QUEUE_CONN_STR").MustString("addrs=127.0.0.1:6379 db=0")) // FIXME: INI-MUST-SIDE-EFFECT
} }
queueTaskSec.Key("LENGTH").MustInt(taskSec.Key("QUEUE_LENGTH").MustInt(1000)) queueTaskSec.Key("LENGTH").MustInt(taskSec.Key("QUEUE_LENGTH").MustInt(1000)) // FIXME: INI-MUST-SIDE-EFFECT
} }
+1 -1
View File
@@ -403,7 +403,7 @@ func fillInstallConfig(ctx *context.Context, envs []string, form *forms.InstallF
cfg.Section("session").Key("PROVIDER").SetValue("file") cfg.Section("session").Key("PROVIDER").SetValue("file")
cfg.Section("log").Key("MODE").MustString("console") cfg.Section("log").Key("MODE").MustString("console") // FIXME: INI-MUST-SIDE-EFFECT
cfg.Section("log").Key("LEVEL").SetValue(setting.Log.Level.String()) cfg.Section("log").Key("LEVEL").SetValue(setting.Log.Level.String())
cfg.Section("log").Key("ROOT_PATH").SetValue(form.LogRootPath) cfg.Section("log").Key("ROOT_PATH").SetValue(form.LogRootPath)