summaryrefslogtreecommitdiffstats
path: root/modules/setting/setting.go
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2019-02-10 09:37:37 +0800
committerGitHub <noreply@github.com>2019-02-10 09:37:37 +0800
commit820e28c9044bbd9d398dd1617323665bb0935e13 (patch)
tree67f57519600b6f7a11c695af7d72728636590456 /modules/setting/setting.go
parent9e8cc3b18da7438b315676686d6552926cc2965a (diff)
downloadgitea-820e28c9044bbd9d398dd1617323665bb0935e13.tar.gz
gitea-820e28c9044bbd9d398dd1617323665bb0935e13.zip
Split setting.go as multiple files (#6014)
* split setting.go as multiple files * fix comments
Diffstat (limited to 'modules/setting/setting.go')
-rw-r--r--modules/setting/setting.go442
1 files changed, 0 insertions, 442 deletions
diff --git a/modules/setting/setting.go b/modules/setting/setting.go
index c878fbe92f..0e3dc46882 100644
--- a/modules/setting/setting.go
+++ b/modules/setting/setting.go
@@ -7,9 +7,7 @@ package setting
import (
"encoding/base64"
- "fmt"
"net"
- "net/mail"
"net/url"
"os"
"os/exec"
@@ -30,14 +28,12 @@ import (
"github.com/Unknwon/com"
_ "github.com/go-macaron/cache/memcache" // memcache plugin for cache
_ "github.com/go-macaron/cache/redis"
- "github.com/go-macaron/session"
_ "github.com/go-macaron/session/couchbase" // couchbase plugin for session store
_ "github.com/go-macaron/session/memcache" // memcache plugin for session store
_ "github.com/go-macaron/session/mysql" // mysql plugin for session store
_ "github.com/go-macaron/session/nodb" // nodb plugin for session store
_ "github.com/go-macaron/session/postgres" // postgres plugin for session store
_ "github.com/go-macaron/session/redis" // redis plugin for store session
- "github.com/go-xorm/core"
shellquote "github.com/kballard/go-shellquote"
version "github.com/mcuadros/go-version"
ini "gopkg.in/ini.v1"
@@ -192,20 +188,6 @@ var (
MaxIndexerFileSize int64
}
- // Webhook settings
- Webhook = struct {
- QueueLength int
- DeliverTimeout int
- SkipTLSVerify bool
- Types []string
- PagingNum int
- }{
- QueueLength: 1000,
- DeliverTimeout: 5,
- SkipTLSVerify: false,
- PagingNum: 10,
- }
-
// Repository settings
Repository = struct {
AnsiCharset string
@@ -409,8 +391,6 @@ var (
// Time settings
TimeFormat string
- // Session settings
- SessionConfig session.Options
CSRFCookieName = "_csrf"
// Cron tasks
@@ -1235,428 +1215,6 @@ func NewContext() {
}
}
-// Service settings
-var Service struct {
- ActiveCodeLives int
- ResetPwdCodeLives int
- RegisterEmailConfirm bool
- EmailDomainWhitelist []string
- DisableRegistration bool
- AllowOnlyExternalRegistration bool
- ShowRegistrationButton bool
- RequireSignInView bool
- EnableNotifyMail bool
- EnableReverseProxyAuth bool
- EnableReverseProxyAutoRegister bool
- EnableReverseProxyEmail bool
- EnableCaptcha bool
- CaptchaType string
- RecaptchaSecret string
- RecaptchaSitekey string
- DefaultKeepEmailPrivate bool
- DefaultAllowCreateOrganization bool
- EnableTimetracking bool
- DefaultEnableTimetracking bool
- DefaultEnableDependencies bool
- DefaultAllowOnlyContributorsToTrackTime bool
- NoReplyAddress string
- EnableUserHeatmap bool
- AutoWatchNewRepos bool
-
- // OpenID settings
- EnableOpenIDSignIn bool
- EnableOpenIDSignUp bool
- OpenIDWhitelist []*regexp.Regexp
- OpenIDBlacklist []*regexp.Regexp
-}
-
-func newService() {
- sec := Cfg.Section("service")
- Service.ActiveCodeLives = sec.Key("ACTIVE_CODE_LIVE_MINUTES").MustInt(180)
- Service.ResetPwdCodeLives = sec.Key("RESET_PASSWD_CODE_LIVE_MINUTES").MustInt(180)
- Service.DisableRegistration = sec.Key("DISABLE_REGISTRATION").MustBool()
- Service.AllowOnlyExternalRegistration = sec.Key("ALLOW_ONLY_EXTERNAL_REGISTRATION").MustBool()
- Service.EmailDomainWhitelist = sec.Key("EMAIL_DOMAIN_WHITELIST").Strings(",")
- Service.ShowRegistrationButton = sec.Key("SHOW_REGISTRATION_BUTTON").MustBool(!(Service.DisableRegistration || Service.AllowOnlyExternalRegistration))
- Service.RequireSignInView = sec.Key("REQUIRE_SIGNIN_VIEW").MustBool()
- Service.EnableReverseProxyAuth = sec.Key("ENABLE_REVERSE_PROXY_AUTHENTICATION").MustBool()
- Service.EnableReverseProxyAutoRegister = sec.Key("ENABLE_REVERSE_PROXY_AUTO_REGISTRATION").MustBool()
- Service.EnableReverseProxyEmail = sec.Key("ENABLE_REVERSE_PROXY_EMAIL").MustBool()
- Service.EnableCaptcha = sec.Key("ENABLE_CAPTCHA").MustBool(false)
- Service.CaptchaType = sec.Key("CAPTCHA_TYPE").MustString(ImageCaptcha)
- Service.RecaptchaSecret = sec.Key("RECAPTCHA_SECRET").MustString("")
- Service.RecaptchaSitekey = sec.Key("RECAPTCHA_SITEKEY").MustString("")
- Service.DefaultKeepEmailPrivate = sec.Key("DEFAULT_KEEP_EMAIL_PRIVATE").MustBool()
- Service.DefaultAllowCreateOrganization = sec.Key("DEFAULT_ALLOW_CREATE_ORGANIZATION").MustBool(true)
- Service.EnableTimetracking = sec.Key("ENABLE_TIMETRACKING").MustBool(true)
- if Service.EnableTimetracking {
- Service.DefaultEnableTimetracking = sec.Key("DEFAULT_ENABLE_TIMETRACKING").MustBool(true)
- }
- Service.DefaultEnableDependencies = sec.Key("DEFAULT_ENABLE_DEPENDENCIES").MustBool(true)
- Service.DefaultAllowOnlyContributorsToTrackTime = sec.Key("DEFAULT_ALLOW_ONLY_CONTRIBUTORS_TO_TRACK_TIME").MustBool(true)
- Service.NoReplyAddress = sec.Key("NO_REPLY_ADDRESS").MustString("noreply.example.org")
- Service.EnableUserHeatmap = sec.Key("ENABLE_USER_HEATMAP").MustBool(true)
- Service.AutoWatchNewRepos = sec.Key("AUTO_WATCH_NEW_REPOS").MustBool(true)
-
- sec = Cfg.Section("openid")
- Service.EnableOpenIDSignIn = sec.Key("ENABLE_OPENID_SIGNIN").MustBool(!InstallLock)
- Service.EnableOpenIDSignUp = sec.Key("ENABLE_OPENID_SIGNUP").MustBool(!Service.DisableRegistration && Service.EnableOpenIDSignIn)
- pats := sec.Key("WHITELISTED_URIS").Strings(" ")
- if len(pats) != 0 {
- Service.OpenIDWhitelist = make([]*regexp.Regexp, len(pats))
- for i, p := range pats {
- Service.OpenIDWhitelist[i] = regexp.MustCompilePOSIX(p)
- }
- }
- pats = sec.Key("BLACKLISTED_URIS").Strings(" ")
- if len(pats) != 0 {
- Service.OpenIDBlacklist = make([]*regexp.Regexp, len(pats))
- for i, p := range pats {
- Service.OpenIDBlacklist[i] = regexp.MustCompilePOSIX(p)
- }
- }
-}
-
-var logLevels = map[string]string{
- "Trace": "0",
- "Debug": "1",
- "Info": "2",
- "Warn": "3",
- "Error": "4",
- "Critical": "5",
-}
-
-func getLogLevel(section string, key string, defaultValue string) string {
- validLevels := []string{"Trace", "Debug", "Info", "Warn", "Error", "Critical"}
- return Cfg.Section(section).Key(key).In(defaultValue, validLevels)
-}
-
-func newLogService() {
- log.Info("Gitea v%s%s", AppVer, AppBuiltWith)
-
- LogModes = strings.Split(Cfg.Section("log").Key("MODE").MustString("console"), ",")
- LogConfigs = make([]string, len(LogModes))
-
- useConsole := false
- for i := 0; i < len(LogModes); i++ {
- LogModes[i] = strings.TrimSpace(LogModes[i])
- if LogModes[i] == "console" {
- useConsole = true
- }
- }
-
- if !useConsole {
- log.DelLogger("console")
- }
-
- for i, mode := range LogModes {
- sec, err := Cfg.GetSection("log." + mode)
- if err != nil {
- sec, _ = Cfg.NewSection("log." + mode)
- }
-
- // Log level.
- levelName := getLogLevel("log."+mode, "LEVEL", LogLevel)
- level, ok := logLevels[levelName]
- if !ok {
- log.Fatal(4, "Unknown log level: %s", levelName)
- }
-
- // Generate log configuration.
- switch mode {
- case "console":
- LogConfigs[i] = fmt.Sprintf(`{"level":%s}`, level)
- case "file":
- logPath := sec.Key("FILE_NAME").MustString(path.Join(LogRootPath, "gitea.log"))
- if err = os.MkdirAll(path.Dir(logPath), os.ModePerm); err != nil {
- panic(err.Error())
- }
-
- LogConfigs[i] = fmt.Sprintf(
- `{"level":%s,"filename":"%s","rotate":%v,"maxsize":%d,"daily":%v,"maxdays":%d}`, level,
- logPath,
- sec.Key("LOG_ROTATE").MustBool(true),
- 1<<uint(sec.Key("MAX_SIZE_SHIFT").MustInt(28)),
- sec.Key("DAILY_ROTATE").MustBool(true),
- sec.Key("MAX_DAYS").MustInt(7))
- case "conn":
- LogConfigs[i] = fmt.Sprintf(`{"level":%s,"reconnectOnMsg":%v,"reconnect":%v,"net":"%s","addr":"%s"}`, level,
- sec.Key("RECONNECT_ON_MSG").MustBool(),
- sec.Key("RECONNECT").MustBool(),
- sec.Key("PROTOCOL").In("tcp", []string{"tcp", "unix", "udp"}),
- sec.Key("ADDR").MustString(":7020"))
- case "smtp":
- LogConfigs[i] = fmt.Sprintf(`{"level":%s,"username":"%s","password":"%s","host":"%s","sendTos":["%s"],"subject":"%s"}`, level,
- sec.Key("USER").MustString("example@example.com"),
- sec.Key("PASSWD").MustString("******"),
- sec.Key("HOST").MustString("127.0.0.1:25"),
- strings.Replace(sec.Key("RECEIVERS").MustString("example@example.com"), ",", "\",\"", -1),
- sec.Key("SUBJECT").MustString("Diagnostic message from serve"))
- case "database":
- LogConfigs[i] = fmt.Sprintf(`{"level":%s,"driver":"%s","conn":"%s"}`, level,
- sec.Key("DRIVER").String(),
- sec.Key("CONN").String())
- }
-
- log.NewLogger(Cfg.Section("log").Key("BUFFER_LEN").MustInt64(10000), mode, LogConfigs[i])
- log.Info("Log Mode: %s(%s)", strings.Title(mode), levelName)
- }
-}
-
-// NewXORMLogService initializes xorm logger service
-func NewXORMLogService(disableConsole bool) {
- logModes := strings.Split(Cfg.Section("log").Key("MODE").MustString("console"), ",")
- var logConfigs string
- for _, mode := range logModes {
- mode = strings.TrimSpace(mode)
-
- if disableConsole && mode == "console" {
- continue
- }
-
- sec, err := Cfg.GetSection("log." + mode)
- if err != nil {
- sec, _ = Cfg.NewSection("log." + mode)
- }
-
- // Log level.
- levelName := getLogLevel("log."+mode, "LEVEL", LogLevel)
- level, ok := logLevels[levelName]
- if !ok {
- log.Fatal(4, "Unknown log level: %s", levelName)
- }
-
- // Generate log configuration.
- switch mode {
- case "console":
- logConfigs = fmt.Sprintf(`{"level":%s}`, level)
- case "file":
- logPath := sec.Key("FILE_NAME").MustString(path.Join(LogRootPath, "xorm.log"))
- if err = os.MkdirAll(path.Dir(logPath), os.ModePerm); err != nil {
- panic(err.Error())
- }
- logPath = path.Join(filepath.Dir(logPath), "xorm.log")
-
- logConfigs = fmt.Sprintf(
- `{"level":%s,"filename":"%s","rotate":%v,"maxsize":%d,"daily":%v,"maxdays":%d}`, level,
- logPath,
- sec.Key("LOG_ROTATE").MustBool(true),
- 1<<uint(sec.Key("MAX_SIZE_SHIFT").MustInt(28)),
- sec.Key("DAILY_ROTATE").MustBool(true),
- sec.Key("MAX_DAYS").MustInt(7))
- case "conn":
- logConfigs = fmt.Sprintf(`{"level":%s,"reconnectOnMsg":%v,"reconnect":%v,"net":"%s","addr":"%s"}`, level,
- sec.Key("RECONNECT_ON_MSG").MustBool(),
- sec.Key("RECONNECT").MustBool(),
- sec.Key("PROTOCOL").In("tcp", []string{"tcp", "unix", "udp"}),
- sec.Key("ADDR").MustString(":7020"))
- case "smtp":
- logConfigs = fmt.Sprintf(`{"level":%s,"username":"%s","password":"%s","host":"%s","sendTos":"%s","subject":"%s"}`, level,
- sec.Key("USER").MustString("example@example.com"),
- sec.Key("PASSWD").MustString("******"),
- sec.Key("HOST").MustString("127.0.0.1:25"),
- sec.Key("RECEIVERS").MustString("[]"),
- sec.Key("SUBJECT").MustString("Diagnostic message from serve"))
- case "database":
- logConfigs = fmt.Sprintf(`{"level":%s,"driver":"%s","conn":"%s"}`, level,
- sec.Key("DRIVER").String(),
- sec.Key("CONN").String())
- }
-
- log.NewXORMLogger(Cfg.Section("log").Key("BUFFER_LEN").MustInt64(10000), mode, logConfigs)
- if !disableConsole {
- log.Info("XORM Log Mode: %s(%s)", strings.Title(mode), levelName)
- }
-
- var lvl core.LogLevel
- switch levelName {
- case "Trace", "Debug":
- lvl = core.LOG_DEBUG
- case "Info":
- lvl = core.LOG_INFO
- case "Warn":
- lvl = core.LOG_WARNING
- case "Error", "Critical":
- lvl = core.LOG_ERR
- }
- log.XORMLogger.SetLevel(lvl)
- }
-
- if len(logConfigs) == 0 {
- log.DiscardXORMLogger()
- }
-}
-
-// Cache represents cache settings
-type Cache struct {
- Adapter string
- Interval int
- Conn string
- TTL time.Duration
-}
-
-var (
- // CacheService the global cache
- CacheService *Cache
-)
-
-func newCacheService() {
- sec := Cfg.Section("cache")
- CacheService = &Cache{
- Adapter: sec.Key("ADAPTER").In("memory", []string{"memory", "redis", "memcache"}),
- }
- switch CacheService.Adapter {
- case "memory":
- CacheService.Interval = sec.Key("INTERVAL").MustInt(60)
- case "redis", "memcache":
- CacheService.Conn = strings.Trim(sec.Key("HOST").String(), "\" ")
- default:
- log.Fatal(4, "Unknown cache adapter: %s", CacheService.Adapter)
- }
- CacheService.TTL = sec.Key("ITEM_TTL").MustDuration(16 * time.Hour)
-
- log.Info("Cache Service Enabled")
-}
-
-func newSessionService() {
- SessionConfig.Provider = Cfg.Section("session").Key("PROVIDER").In("memory",
- []string{"memory", "file", "redis", "mysql", "postgres", "couchbase", "memcache", "nodb"})
- SessionConfig.ProviderConfig = strings.Trim(Cfg.Section("session").Key("PROVIDER_CONFIG").MustString(path.Join(AppDataPath, "sessions")), "\" ")
- if SessionConfig.Provider == "file" && !filepath.IsAbs(SessionConfig.ProviderConfig) {
- SessionConfig.ProviderConfig = path.Join(AppWorkPath, SessionConfig.ProviderConfig)
- }
- SessionConfig.CookieName = Cfg.Section("session").Key("COOKIE_NAME").MustString("i_like_gitea")
- SessionConfig.CookiePath = AppSubURL
- SessionConfig.Secure = Cfg.Section("session").Key("COOKIE_SECURE").MustBool(false)
- SessionConfig.Gclifetime = Cfg.Section("session").Key("GC_INTERVAL_TIME").MustInt64(86400)
- SessionConfig.Maxlifetime = Cfg.Section("session").Key("SESSION_LIFE_TIME").MustInt64(86400)
-
- log.Info("Session Service Enabled")
-}
-
-// Mailer represents mail service.
-type Mailer struct {
- // Mailer
- QueueLength int
- Name string
- From string
- FromName string
- FromEmail string
- SendAsPlainText bool
- MailerType string
-
- // SMTP sender
- Host string
- User, Passwd string
- DisableHelo bool
- HeloHostname string
- SkipVerify bool
- UseCertificate bool
- CertFile, KeyFile string
- IsTLSEnabled bool
-
- // Sendmail sender
- SendmailPath string
- SendmailArgs []string
-}
-
-var (
- // MailService the global mailer
- MailService *Mailer
-)
-
-func newMailService() {
- sec := Cfg.Section("mailer")
- // Check mailer setting.
- if !sec.Key("ENABLED").MustBool() {
- return
- }
-
- MailService = &Mailer{
- QueueLength: sec.Key("SEND_BUFFER_LEN").MustInt(100),
- Name: sec.Key("NAME").MustString(AppName),
- SendAsPlainText: sec.Key("SEND_AS_PLAIN_TEXT").MustBool(false),
- MailerType: sec.Key("MAILER_TYPE").In("", []string{"smtp", "sendmail", "dummy"}),
-
- Host: sec.Key("HOST").String(),
- User: sec.Key("USER").String(),
- Passwd: sec.Key("PASSWD").String(),
- DisableHelo: sec.Key("DISABLE_HELO").MustBool(),
- HeloHostname: sec.Key("HELO_HOSTNAME").String(),
- SkipVerify: sec.Key("SKIP_VERIFY").MustBool(),
- UseCertificate: sec.Key("USE_CERTIFICATE").MustBool(),
- CertFile: sec.Key("CERT_FILE").String(),
- KeyFile: sec.Key("KEY_FILE").String(),
- IsTLSEnabled: sec.Key("IS_TLS_ENABLED").MustBool(),
-
- SendmailPath: sec.Key("SENDMAIL_PATH").MustString("sendmail"),
- }
- MailService.From = sec.Key("FROM").MustString(MailService.User)
-
- if sec.HasKey("ENABLE_HTML_ALTERNATIVE") {
- log.Warn("ENABLE_HTML_ALTERNATIVE is deprecated, use SEND_AS_PLAIN_TEXT")
- MailService.SendAsPlainText = !sec.Key("ENABLE_HTML_ALTERNATIVE").MustBool(false)
- }
-
- if sec.HasKey("USE_SENDMAIL") {
- log.Warn("USE_SENDMAIL is deprecated, use MAILER_TYPE=sendmail")
- if MailService.MailerType == "" && sec.Key("USE_SENDMAIL").MustBool(false) {
- MailService.MailerType = "sendmail"
- }
- }
-
- parsed, err := mail.ParseAddress(MailService.From)
- if err != nil {
- log.Fatal(4, "Invalid mailer.FROM (%s): %v", MailService.From, err)
- }
- MailService.FromName = parsed.Name
- MailService.FromEmail = parsed.Address
-
- if MailService.MailerType == "" {
- MailService.MailerType = "smtp"
- }
-
- if MailService.MailerType == "sendmail" {
- MailService.SendmailArgs, err = shellquote.Split(sec.Key("SENDMAIL_ARGS").String())
- if err != nil {
- log.Error(4, "Failed to parse Sendmail args: %v", CustomConf, err)
- }
- }
-
- log.Info("Mail Service Enabled")
-}
-
-func newRegisterMailService() {
- if !Cfg.Section("service").Key("REGISTER_EMAIL_CONFIRM").MustBool() {
- return
- } else if MailService == nil {
- log.Warn("Register Mail Service: Mail Service is not enabled")
- return
- }
- Service.RegisterEmailConfirm = true
- log.Info("Register Mail Service Enabled")
-}
-
-func newNotifyMailService() {
- if !Cfg.Section("service").Key("ENABLE_NOTIFY_MAIL").MustBool() {
- return
- } else if MailService == nil {
- log.Warn("Notify Mail Service: Mail Service is not enabled")
- return
- }
- Service.EnableNotifyMail = true
- log.Info("Notify Mail Service Enabled")
-}
-
-func newWebhookService() {
- sec := Cfg.Section("webhook")
- Webhook.QueueLength = sec.Key("QUEUE_LENGTH").MustInt(1000)
- Webhook.DeliverTimeout = sec.Key("DELIVER_TIMEOUT").MustInt(5)
- Webhook.SkipTLSVerify = sec.Key("SKIP_TLS_VERIFY").MustBool()
- Webhook.Types = []string{"gitea", "gogs", "slack", "discord", "dingtalk"}
- Webhook.PagingNum = sec.Key("PAGING_NUM").MustInt(10)
-}
-
// NewServices initializes the services
func NewServices() {
newService()