From 119183971d6db471ff86972ad272dd8c6dd6a25d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Sat, 12 Oct 2024 02:52:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E4=B8=94=E9=BB=98?= =?UTF-8?q?=E8=AE=A4HTTPS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- README_EN.md | 2 +- config/config.example.yml | 2 +- internal/bootstrap/app.go | 2 +- internal/bootstrap/conf.go | 12 ++++++------ internal/bootstrap/cron.go | 4 ++-- internal/bootstrap/db.go | 6 +++--- internal/bootstrap/http.go | 26 +++++++++++++++++++++++--- internal/bootstrap/session.go | 6 +++--- internal/bootstrap/validator.go | 4 ++-- internal/http/middleware/throttle.go | 6 +++--- internal/service/cli.go | 3 +-- pkg/api/api.go | 3 ++- pkg/apploader/apploader.go | 3 ++- pkg/str/string.go | 5 +++-- 15 files changed, 54 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 9e18c23e..cb24048d 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,7 @@ panel-cli - [无畏云加速](https://su.sctes.com/register?code=8st689ujpmm2p) - [WAF PRO](https://waf.pro/) -- [盾云CDN](http://cdn.ddunyun.com/) +- [盾云SCDN](https://scdn.ddunyun.com/)

diff --git a/README_EN.md b/README_EN.md index 901d6c2c..622f2670 100644 --- a/README_EN.md +++ b/README_EN.md @@ -107,7 +107,7 @@ If the Rat Panel is helpful to you, welcome to [sponsor us](https://opencollecti - [无畏云加速](https://su.sctes.com/register?code=8st689ujpmm2p) - [WAF PRO](https://waf.pro/) -- [盾云CDN](http://cdn.ddunyun.com/) +- [盾云SCDN](https://scdn.ddunyun.com/)

diff --git a/config/config.example.yml b/config/config.example.yml index 5a27eccb..0b412587 100644 --- a/config/config.example.yml +++ b/config/config.example.yml @@ -11,6 +11,6 @@ http: debug: false port: 8888 entrance: / - tls: false + tls: true database: debug: false diff --git a/internal/bootstrap/app.go b/internal/bootstrap/app.go index 7dfc194a..0f1f1dfb 100644 --- a/internal/bootstrap/app.go +++ b/internal/bootstrap/app.go @@ -21,7 +21,7 @@ func BootWeb() { initSession() initCron() initQueue() - go initHttp() + initHttp() select {} } diff --git a/internal/bootstrap/conf.go b/internal/bootstrap/conf.go index cca55b2c..c21f261a 100644 --- a/internal/bootstrap/conf.go +++ b/internal/bootstrap/conf.go @@ -1,7 +1,7 @@ package bootstrap import ( - "fmt" + "log" "os" "path/filepath" "strings" @@ -17,22 +17,22 @@ import ( func initConf() { executable, err := os.Executable() if err != nil { - panic(fmt.Sprintf("failed to get executable: %v", err)) + log.Fatalf("failed to get executable: %v", err) } res, err := filepath.EvalSymlinks(filepath.Dir(executable)) if err != nil { - panic(fmt.Sprintf("failed to get executable path: %v", err)) + log.Fatalf("failed to get executable path: %v", err) } if isTesting() || isAir() || isDirectlyRun() { res, err = os.Getwd() if err != nil { - panic(fmt.Sprintf("failed to get working directory: %v", err)) + log.Fatalf("failed to get working directory: %v", err) } } app.Conf = koanf.New(".") if err = app.Conf.Load(file.Provider(filepath.Join(res, "config/config.yml")), yaml.Parser()); err != nil { - panic(fmt.Sprintf("failed to load config: %v", err)) + log.Fatalf("failed to load config: %v", err) } } @@ -44,7 +44,7 @@ func initGlobal() { // 初始化时区 loc, err := time.LoadLocation(app.Conf.MustString("app.timezone")) if err != nil { - panic(fmt.Sprintf("failed to load timezone: %v", err)) + log.Fatalf("failed to load timezone: %v", err) } time.Local = loc } diff --git a/internal/bootstrap/cron.go b/internal/bootstrap/cron.go index 3451f138..7b31d306 100644 --- a/internal/bootstrap/cron.go +++ b/internal/bootstrap/cron.go @@ -1,7 +1,7 @@ package bootstrap import ( - "fmt" + "log" "github.com/robfig/cron/v3" @@ -22,7 +22,7 @@ func initCron() { app.Cron = c if err := job.Boot(app.Cron); err != nil { - panic(fmt.Sprintf("failed to boot cron jobs: %v", err)) + log.Fatalf("failed to boot cron jobs: %v", err) } c.Start() diff --git a/internal/bootstrap/db.go b/internal/bootstrap/db.go index dc180799..fb98852e 100644 --- a/internal/bootstrap/db.go +++ b/internal/bootstrap/db.go @@ -1,7 +1,7 @@ package bootstrap import ( - "fmt" + "log" "path/filepath" "github.com/glebarez/sqlite" @@ -29,7 +29,7 @@ func initOrm() { DisableForeignKeyConstraintWhenMigrating: true, }) if err != nil { - panic(fmt.Sprintf("failed to connect database: %v", err)) + log.Fatalf("failed to connect database: %v", err) } app.Orm = db } @@ -40,6 +40,6 @@ func runMigrate() { ValidateUnknownMigrations: true, }, migration.Migrations) if err := migrator.Migrate(); err != nil { - panic(fmt.Sprintf("failed to migrate database: %v", err)) + log.Fatalf("failed to migrate database: %v", err) } } diff --git a/internal/bootstrap/http.go b/internal/bootstrap/http.go index 02d74036..8de54bf4 100644 --- a/internal/bootstrap/http.go +++ b/internal/bootstrap/http.go @@ -1,8 +1,11 @@ package bootstrap import ( + "crypto/tls" "fmt" + "log" "net/http" + "path/filepath" "github.com/go-chi/chi/v5" @@ -22,12 +25,29 @@ func initHttp() { route.Http(app.Http) apps.Boot(app.Http) - server := &http.Server{ + srv := &http.Server{ Addr: fmt.Sprintf(":%d", app.Conf.MustInt("http.port")), Handler: http.AllowQuerySemicolons(app.Http), MaxHeaderBytes: 2048 << 20, } - if err := server.ListenAndServe(); err != nil { - panic(fmt.Sprintf("failed to start http server: %v", err)) + + if app.Conf.Bool("http.tls") { + srv.TLSConfig = &tls.Config{ + MinVersion: tls.VersionTLS12, + } + + cert := filepath.Join(app.Root, "panel/storage/cert.pem") + key := filepath.Join(app.Root, "panel/storage/cert.key") + go func() { + if err := srv.ListenAndServeTLS(cert, key); err != nil { + log.Fatalf("failed to start https server: %v", err) + } + }() + } else { + go func() { + if err := srv.ListenAndServe(); err != nil { + log.Fatalf("failed to start http server: %v", err) + } + }() } } diff --git a/internal/bootstrap/session.go b/internal/bootstrap/session.go index aeeb8416..9d5933dc 100644 --- a/internal/bootstrap/session.go +++ b/internal/bootstrap/session.go @@ -1,7 +1,7 @@ package bootstrap import ( - "fmt" + "log" "github.com/go-rat/gormstore" "github.com/go-rat/sessions" @@ -18,13 +18,13 @@ func initSession() { DisableDefaultDriver: true, }) if err != nil { - panic(fmt.Sprintf("failed to initialize session manager: %v", err)) + log.Fatalf("failed to initialize session manager: %v", err) } // extend gorm store driver store := gormstore.New(app.Orm) if err = manager.Extend("default", store); err != nil { - panic(fmt.Sprintf("failed to extend session manager: %v", err)) + log.Fatalf("failed to extend session manager: %v", err) } app.Session = manager diff --git a/internal/bootstrap/validator.go b/internal/bootstrap/validator.go index 2427fb1c..c1efa244 100644 --- a/internal/bootstrap/validator.go +++ b/internal/bootstrap/validator.go @@ -1,7 +1,7 @@ package bootstrap import ( - "fmt" + "log" "github.com/go-playground/locales/zh_Hans_CN" ut "github.com/go-playground/universal-translator" @@ -18,7 +18,7 @@ func initValidator() { validate := validator.New(validator.WithRequiredStructEnabled()) if err := zh.RegisterDefaultTranslations(validate, trans); err != nil { - panic(fmt.Sprintf("failed to register validator translations: %v", err)) + log.Fatalf("failed to register validator translations: %v", err) } app.Translator = &trans diff --git a/internal/http/middleware/throttle.go b/internal/http/middleware/throttle.go index 01f4cf1a..8c6f29ed 100644 --- a/internal/http/middleware/throttle.go +++ b/internal/http/middleware/throttle.go @@ -1,7 +1,7 @@ package middleware import ( - "fmt" + "log" "net/http" "time" @@ -16,12 +16,12 @@ func Throttle(tokens uint64, interval time.Duration) func(next http.Handler) htt Interval: interval, }) if err != nil { - panic(fmt.Sprintf("failed to create throttle memorystore: %v", err)) + log.Fatalf("failed to create throttle memorystore: %v", err) } limiter, err := httplimit.NewMiddleware(store, httplimit.IPKeyFunc()) if err != nil { - panic(fmt.Sprintf("failed to initialize throttle middleware: %v", err)) + log.Fatalf("failed to initialize throttle middleware: %v", err) } return limiter.Handle diff --git a/internal/service/cli.go b/internal/service/cli.go index 91945174..51fef8f4 100644 --- a/internal/service/cli.go +++ b/internal/service/cli.go @@ -70,8 +70,7 @@ func (s *CliService) Info(ctx context.Context, cmd *cli.Command) error { user.Email = str.RandomString(8) + "@example.com" } - err = app.Orm.Save(user).Error - if err != nil { + if err = app.Orm.Save(user).Error; err != nil { return fmt.Errorf("管理员信息保存失败:%v", err) } diff --git a/pkg/api/api.go b/pkg/api/api.go index b64916d5..7b21a756 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -2,6 +2,7 @@ package api import ( "fmt" + "log" "time" "github.com/go-resty/resty/v2" @@ -30,7 +31,7 @@ func NewAPI(panelVersion string, url ...string) *API { hostInfo, err := host.Info() if err != nil { - panic(fmt.Sprintf("failed to get host info: %v", err)) + log.Fatalf("failed to get host info: %v", err) } client := resty.New() diff --git a/pkg/apploader/apploader.go b/pkg/apploader/apploader.go index fed6d5f3..275ba4eb 100644 --- a/pkg/apploader/apploader.go +++ b/pkg/apploader/apploader.go @@ -3,6 +3,7 @@ package apploader import ( "fmt" + "log" "sync" "github.com/go-chi/chi/v5" @@ -14,7 +15,7 @@ var apps sync.Map func Register(app *types.App) { if _, ok := apps.Load(app.Slug); ok { - panic(fmt.Sprintf("app %s already exists", app.Slug)) + log.Fatalf("app %s already exists", app.Slug) } apps.Store(app.Slug, app) } diff --git a/pkg/str/string.go b/pkg/str/string.go index fa596ea0..6842af05 100644 --- a/pkg/str/string.go +++ b/pkg/str/string.go @@ -5,6 +5,7 @@ import ( "crypto/rand" "fmt" "io" + "log" "strings" "text/template" "unicode/utf8" @@ -24,7 +25,7 @@ func RandomNumber(length int) string { b := make([]byte, length) n, err := io.ReadAtLeast(rand.Reader, b, length) if n != length { - panic(fmt.Sprintf("failed to generate random number: %v", err)) + log.Panicf("failed to generate random number: %v", err) } for i := 0; i < len(b); i++ { b[i] = table[int(b[i])%len(table)] @@ -37,7 +38,7 @@ func RandomString(length int) string { b := make([]byte, length) _, err := rand.Read(b) if err != nil { - panic(fmt.Sprintf("failed to generate random string: %v", err)) + log.Panicf("failed to generate random string: %v", err) } letters := "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" for i, v := range b {