From bfb5b34edcfdd6aadfcf927273af13aecaf438ed Mon Sep 17 00:00:00 2001 From: HFO4 <912394456@qq.com> Date: Sat, 23 May 2020 13:17:48 +0800 Subject: [PATCH] Fix: concurrent logging lock / Feat: listen SSL (#287) --- bootstrap/app.go | 2 ++ main.go | 12 ++++++++++++ pkg/conf/conf.go | 7 +++++++ pkg/conf/defaults.go | 6 ++++++ pkg/util/logger.go | 6 ++++++ 5 files changed, 33 insertions(+) diff --git a/bootstrap/app.go b/bootstrap/app.go index 616c802..ccb4fdc 100644 --- a/bootstrap/app.go +++ b/bootstrap/app.go @@ -37,11 +37,13 @@ func CheckUpdate() { res, err := client.Request("GET", "https://api.github.com/repos/cloudreve/cloudreve/releases", nil).GetResponse() if err != nil { util.Log().Warning("更新检查失败, %s", err) + return } var list []GitHubRelease if err := json.Unmarshal([]byte(res), &list); err != nil { util.Log().Warning("更新检查失败, %s", err) + return } if len(list) > 0 { diff --git a/main.go b/main.go index a05bd5a..d65ff07 100644 --- a/main.go +++ b/main.go @@ -18,6 +18,18 @@ func init() { func main() { api := routers.InitRouter() + + // 如果启用了SSL + if conf.SSLConfig.CertPath != "" { + go func() { + util.Log().Info("开始监听 %s", conf.SSLConfig.Listen) + if err := api.RunTLS(conf.SSLConfig.Listen, + conf.SSLConfig.CertPath, conf.SSLConfig.KeyPath); err != nil { + util.Log().Error("无法监听[%s],%s", conf.SSLConfig.Listen, err) + } + }() + } + util.Log().Info("开始监听 %s", conf.SystemConfig.Listen) if err := api.Run(conf.SystemConfig.Listen); err != nil { util.Log().Error("无法监听[%s],%s", conf.SystemConfig.Listen, err) diff --git a/pkg/conf/conf.go b/pkg/conf/conf.go index d28d043..a19110b 100644 --- a/pkg/conf/conf.go +++ b/pkg/conf/conf.go @@ -27,6 +27,12 @@ type system struct { HashIDSalt string } +type ssl struct { + CertPath string `validate:"omitempty,required"` + KeyPath string `validate:"omitempty,required"` + Listen string `validate:"required"` +} + // slave 作为slave存储端配置 type slave struct { Secret string `validate:"omitempty,gte=64"` @@ -113,6 +119,7 @@ func Init(path string) { sections := map[string]interface{}{ "Database": DatabaseConfig, "System": SystemConfig, + "SSL": SSLConfig, "Captcha": CaptchaConfig, "Redis": RedisConfig, "Thumbnail": ThumbConfig, diff --git a/pkg/conf/defaults.go b/pkg/conf/defaults.go index f4ff903..406a203 100644 --- a/pkg/conf/defaults.go +++ b/pkg/conf/defaults.go @@ -59,3 +59,9 @@ var SlaveConfig = &slave{ CallbackTimeout: 20, SignatureTTL: 60, } + +var SSLConfig = &ssl{ + Listen: ":443", + CertPath: "", + KeyPath: "", +} diff --git a/pkg/util/logger.go b/pkg/util/logger.go index 81e3652..107ec71 100644 --- a/pkg/util/logger.go +++ b/pkg/util/logger.go @@ -3,6 +3,7 @@ package util import ( "fmt" "github.com/fatih/color" + "sync" "time" ) @@ -23,6 +24,7 @@ var Level = LevelDebug // Logger 日志 type Logger struct { level int + mu sync.Mutex } // 日志颜色 @@ -49,6 +51,10 @@ func (ll *Logger) Println(prefix string, msg string) { // color.NoColor = false c := color.New() + + ll.mu.Lock() + defer ll.mu.Unlock() + _, _ = c.Printf( "%s%s %s %s\n", colors[prefix]("["+prefix+"]"), -- GitLab