Skip to content

Commit 820e28c

Browse files
authored
Split setting.go as multiple files (#6014)
* split setting.go as multiple files * fix comments
1 parent 9e8cc3b commit 820e28c

File tree

7 files changed

+509
-442
lines changed

7 files changed

+509
-442
lines changed

modules/setting/cache.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// Copyright 2019 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package setting
6+
7+
import (
8+
"strings"
9+
"time"
10+
11+
"code.gitea.io/gitea/modules/log"
12+
)
13+
14+
// Cache represents cache settings
15+
type Cache struct {
16+
Adapter string
17+
Interval int
18+
Conn string
19+
TTL time.Duration
20+
}
21+
22+
var (
23+
// CacheService the global cache
24+
CacheService *Cache
25+
)
26+
27+
func newCacheService() {
28+
sec := Cfg.Section("cache")
29+
CacheService = &Cache{
30+
Adapter: sec.Key("ADAPTER").In("memory", []string{"memory", "redis", "memcache"}),
31+
}
32+
switch CacheService.Adapter {
33+
case "memory":
34+
CacheService.Interval = sec.Key("INTERVAL").MustInt(60)
35+
case "redis", "memcache":
36+
CacheService.Conn = strings.Trim(sec.Key("HOST").String(), "\" ")
37+
default:
38+
log.Fatal(4, "Unknown cache adapter: %s", CacheService.Adapter)
39+
}
40+
CacheService.TTL = sec.Key("ITEM_TTL").MustDuration(16 * time.Hour)
41+
42+
log.Info("Cache Service Enabled")
43+
}

modules/setting/log.go

Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
// Copyright 2019 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package setting
6+
7+
import (
8+
"fmt"
9+
"os"
10+
"path"
11+
"path/filepath"
12+
"strings"
13+
14+
"code.gitea.io/gitea/modules/log"
15+
"github.com/go-xorm/core"
16+
)
17+
18+
var logLevels = map[string]string{
19+
"Trace": "0",
20+
"Debug": "1",
21+
"Info": "2",
22+
"Warn": "3",
23+
"Error": "4",
24+
"Critical": "5",
25+
}
26+
27+
func getLogLevel(section string, key string, defaultValue string) string {
28+
validLevels := []string{"Trace", "Debug", "Info", "Warn", "Error", "Critical"}
29+
return Cfg.Section(section).Key(key).In(defaultValue, validLevels)
30+
}
31+
32+
func newLogService() {
33+
log.Info("Gitea v%s%s", AppVer, AppBuiltWith)
34+
35+
LogModes = strings.Split(Cfg.Section("log").Key("MODE").MustString("console"), ",")
36+
LogConfigs = make([]string, len(LogModes))
37+
38+
useConsole := false
39+
for i := 0; i < len(LogModes); i++ {
40+
LogModes[i] = strings.TrimSpace(LogModes[i])
41+
if LogModes[i] == "console" {
42+
useConsole = true
43+
}
44+
}
45+
46+
if !useConsole {
47+
log.DelLogger("console")
48+
}
49+
50+
for i, mode := range LogModes {
51+
sec, err := Cfg.GetSection("log." + mode)
52+
if err != nil {
53+
sec, _ = Cfg.NewSection("log." + mode)
54+
}
55+
56+
// Log level.
57+
levelName := getLogLevel("log."+mode, "LEVEL", LogLevel)
58+
level, ok := logLevels[levelName]
59+
if !ok {
60+
log.Fatal(4, "Unknown log level: %s", levelName)
61+
}
62+
63+
// Generate log configuration.
64+
switch mode {
65+
case "console":
66+
LogConfigs[i] = fmt.Sprintf(`{"level":%s}`, level)
67+
case "file":
68+
logPath := sec.Key("FILE_NAME").MustString(path.Join(LogRootPath, "gitea.log"))
69+
if err = os.MkdirAll(path.Dir(logPath), os.ModePerm); err != nil {
70+
panic(err.Error())
71+
}
72+
73+
LogConfigs[i] = fmt.Sprintf(
74+
`{"level":%s,"filename":"%s","rotate":%v,"maxsize":%d,"daily":%v,"maxdays":%d}`, level,
75+
logPath,
76+
sec.Key("LOG_ROTATE").MustBool(true),
77+
1<<uint(sec.Key("MAX_SIZE_SHIFT").MustInt(28)),
78+
sec.Key("DAILY_ROTATE").MustBool(true),
79+
sec.Key("MAX_DAYS").MustInt(7))
80+
case "conn":
81+
LogConfigs[i] = fmt.Sprintf(`{"level":%s,"reconnectOnMsg":%v,"reconnect":%v,"net":"%s","addr":"%s"}`, level,
82+
sec.Key("RECONNECT_ON_MSG").MustBool(),
83+
sec.Key("RECONNECT").MustBool(),
84+
sec.Key("PROTOCOL").In("tcp", []string{"tcp", "unix", "udp"}),
85+
sec.Key("ADDR").MustString(":7020"))
86+
case "smtp":
87+
LogConfigs[i] = fmt.Sprintf(`{"level":%s,"username":"%s","password":"%s","host":"%s","sendTos":["%s"],"subject":"%s"}`, level,
88+
sec.Key("USER").MustString("[email protected]"),
89+
sec.Key("PASSWD").MustString("******"),
90+
sec.Key("HOST").MustString("127.0.0.1:25"),
91+
strings.Replace(sec.Key("RECEIVERS").MustString("[email protected]"), ",", "\",\"", -1),
92+
sec.Key("SUBJECT").MustString("Diagnostic message from serve"))
93+
case "database":
94+
LogConfigs[i] = fmt.Sprintf(`{"level":%s,"driver":"%s","conn":"%s"}`, level,
95+
sec.Key("DRIVER").String(),
96+
sec.Key("CONN").String())
97+
}
98+
99+
log.NewLogger(Cfg.Section("log").Key("BUFFER_LEN").MustInt64(10000), mode, LogConfigs[i])
100+
log.Info("Log Mode: %s(%s)", strings.Title(mode), levelName)
101+
}
102+
}
103+
104+
// NewXORMLogService initializes xorm logger service
105+
func NewXORMLogService(disableConsole bool) {
106+
logModes := strings.Split(Cfg.Section("log").Key("MODE").MustString("console"), ",")
107+
var logConfigs string
108+
for _, mode := range logModes {
109+
mode = strings.TrimSpace(mode)
110+
111+
if disableConsole && mode == "console" {
112+
continue
113+
}
114+
115+
sec, err := Cfg.GetSection("log." + mode)
116+
if err != nil {
117+
sec, _ = Cfg.NewSection("log." + mode)
118+
}
119+
120+
// Log level.
121+
levelName := getLogLevel("log."+mode, "LEVEL", LogLevel)
122+
level, ok := logLevels[levelName]
123+
if !ok {
124+
log.Fatal(4, "Unknown log level: %s", levelName)
125+
}
126+
127+
// Generate log configuration.
128+
switch mode {
129+
case "console":
130+
logConfigs = fmt.Sprintf(`{"level":%s}`, level)
131+
case "file":
132+
logPath := sec.Key("FILE_NAME").MustString(path.Join(LogRootPath, "xorm.log"))
133+
if err = os.MkdirAll(path.Dir(logPath), os.ModePerm); err != nil {
134+
panic(err.Error())
135+
}
136+
logPath = path.Join(filepath.Dir(logPath), "xorm.log")
137+
138+
logConfigs = fmt.Sprintf(
139+
`{"level":%s,"filename":"%s","rotate":%v,"maxsize":%d,"daily":%v,"maxdays":%d}`, level,
140+
logPath,
141+
sec.Key("LOG_ROTATE").MustBool(true),
142+
1<<uint(sec.Key("MAX_SIZE_SHIFT").MustInt(28)),
143+
sec.Key("DAILY_ROTATE").MustBool(true),
144+
sec.Key("MAX_DAYS").MustInt(7))
145+
case "conn":
146+
logConfigs = fmt.Sprintf(`{"level":%s,"reconnectOnMsg":%v,"reconnect":%v,"net":"%s","addr":"%s"}`, level,
147+
sec.Key("RECONNECT_ON_MSG").MustBool(),
148+
sec.Key("RECONNECT").MustBool(),
149+
sec.Key("PROTOCOL").In("tcp", []string{"tcp", "unix", "udp"}),
150+
sec.Key("ADDR").MustString(":7020"))
151+
case "smtp":
152+
logConfigs = fmt.Sprintf(`{"level":%s,"username":"%s","password":"%s","host":"%s","sendTos":"%s","subject":"%s"}`, level,
153+
sec.Key("USER").MustString("[email protected]"),
154+
sec.Key("PASSWD").MustString("******"),
155+
sec.Key("HOST").MustString("127.0.0.1:25"),
156+
sec.Key("RECEIVERS").MustString("[]"),
157+
sec.Key("SUBJECT").MustString("Diagnostic message from serve"))
158+
case "database":
159+
logConfigs = fmt.Sprintf(`{"level":%s,"driver":"%s","conn":"%s"}`, level,
160+
sec.Key("DRIVER").String(),
161+
sec.Key("CONN").String())
162+
}
163+
164+
log.NewXORMLogger(Cfg.Section("log").Key("BUFFER_LEN").MustInt64(10000), mode, logConfigs)
165+
if !disableConsole {
166+
log.Info("XORM Log Mode: %s(%s)", strings.Title(mode), levelName)
167+
}
168+
169+
var lvl core.LogLevel
170+
switch levelName {
171+
case "Trace", "Debug":
172+
lvl = core.LOG_DEBUG
173+
case "Info":
174+
lvl = core.LOG_INFO
175+
case "Warn":
176+
lvl = core.LOG_WARNING
177+
case "Error", "Critical":
178+
lvl = core.LOG_ERR
179+
}
180+
log.XORMLogger.SetLevel(lvl)
181+
}
182+
183+
if len(logConfigs) == 0 {
184+
log.DiscardXORMLogger()
185+
}
186+
}

modules/setting/mailer.go

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
// Copyright 2019 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package setting
6+
7+
import (
8+
"net/mail"
9+
10+
"code.gitea.io/gitea/modules/log"
11+
shellquote "github.com/kballard/go-shellquote"
12+
)
13+
14+
// Mailer represents mail service.
15+
type Mailer struct {
16+
// Mailer
17+
QueueLength int
18+
Name string
19+
From string
20+
FromName string
21+
FromEmail string
22+
SendAsPlainText bool
23+
MailerType string
24+
25+
// SMTP sender
26+
Host string
27+
User, Passwd string
28+
DisableHelo bool
29+
HeloHostname string
30+
SkipVerify bool
31+
UseCertificate bool
32+
CertFile, KeyFile string
33+
IsTLSEnabled bool
34+
35+
// Sendmail sender
36+
SendmailPath string
37+
SendmailArgs []string
38+
}
39+
40+
var (
41+
// MailService the global mailer
42+
MailService *Mailer
43+
)
44+
45+
func newMailService() {
46+
sec := Cfg.Section("mailer")
47+
// Check mailer setting.
48+
if !sec.Key("ENABLED").MustBool() {
49+
return
50+
}
51+
52+
MailService = &Mailer{
53+
QueueLength: sec.Key("SEND_BUFFER_LEN").MustInt(100),
54+
Name: sec.Key("NAME").MustString(AppName),
55+
SendAsPlainText: sec.Key("SEND_AS_PLAIN_TEXT").MustBool(false),
56+
MailerType: sec.Key("MAILER_TYPE").In("", []string{"smtp", "sendmail", "dummy"}),
57+
58+
Host: sec.Key("HOST").String(),
59+
User: sec.Key("USER").String(),
60+
Passwd: sec.Key("PASSWD").String(),
61+
DisableHelo: sec.Key("DISABLE_HELO").MustBool(),
62+
HeloHostname: sec.Key("HELO_HOSTNAME").String(),
63+
SkipVerify: sec.Key("SKIP_VERIFY").MustBool(),
64+
UseCertificate: sec.Key("USE_CERTIFICATE").MustBool(),
65+
CertFile: sec.Key("CERT_FILE").String(),
66+
KeyFile: sec.Key("KEY_FILE").String(),
67+
IsTLSEnabled: sec.Key("IS_TLS_ENABLED").MustBool(),
68+
69+
SendmailPath: sec.Key("SENDMAIL_PATH").MustString("sendmail"),
70+
}
71+
MailService.From = sec.Key("FROM").MustString(MailService.User)
72+
73+
if sec.HasKey("ENABLE_HTML_ALTERNATIVE") {
74+
log.Warn("ENABLE_HTML_ALTERNATIVE is deprecated, use SEND_AS_PLAIN_TEXT")
75+
MailService.SendAsPlainText = !sec.Key("ENABLE_HTML_ALTERNATIVE").MustBool(false)
76+
}
77+
78+
if sec.HasKey("USE_SENDMAIL") {
79+
log.Warn("USE_SENDMAIL is deprecated, use MAILER_TYPE=sendmail")
80+
if MailService.MailerType == "" && sec.Key("USE_SENDMAIL").MustBool(false) {
81+
MailService.MailerType = "sendmail"
82+
}
83+
}
84+
85+
parsed, err := mail.ParseAddress(MailService.From)
86+
if err != nil {
87+
log.Fatal(4, "Invalid mailer.FROM (%s): %v", MailService.From, err)
88+
}
89+
MailService.FromName = parsed.Name
90+
MailService.FromEmail = parsed.Address
91+
92+
if MailService.MailerType == "" {
93+
MailService.MailerType = "smtp"
94+
}
95+
96+
if MailService.MailerType == "sendmail" {
97+
MailService.SendmailArgs, err = shellquote.Split(sec.Key("SENDMAIL_ARGS").String())
98+
if err != nil {
99+
log.Error(4, "Failed to parse Sendmail args: %v", CustomConf, err)
100+
}
101+
}
102+
103+
log.Info("Mail Service Enabled")
104+
}
105+
106+
func newRegisterMailService() {
107+
if !Cfg.Section("service").Key("REGISTER_EMAIL_CONFIRM").MustBool() {
108+
return
109+
} else if MailService == nil {
110+
log.Warn("Register Mail Service: Mail Service is not enabled")
111+
return
112+
}
113+
Service.RegisterEmailConfirm = true
114+
log.Info("Register Mail Service Enabled")
115+
}
116+
117+
func newNotifyMailService() {
118+
if !Cfg.Section("service").Key("ENABLE_NOTIFY_MAIL").MustBool() {
119+
return
120+
} else if MailService == nil {
121+
log.Warn("Notify Mail Service: Mail Service is not enabled")
122+
return
123+
}
124+
Service.EnableNotifyMail = true
125+
log.Info("Notify Mail Service Enabled")
126+
}

0 commit comments

Comments
 (0)