2
0
mirror of https://github.com/acepanel/panel.git synced 2026-02-04 05:31:44 +08:00

feat: 支持且默认HTTPS

This commit is contained in:
耗子
2024-10-12 02:52:23 +08:00
parent 96d7e14631
commit 119183971d
15 changed files with 54 additions and 32 deletions

View File

@@ -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/)
<p align="center">
<a target="_blank" href="https://afdian.com/a/TheTNB">

View File

@@ -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/)
<p align="center">
<a target="_blank" href="https://afdian.com/a/TheTNB">

View File

@@ -11,6 +11,6 @@ http:
debug: false
port: 8888
entrance: /
tls: false
tls: true
database:
debug: false

View File

@@ -21,7 +21,7 @@ func BootWeb() {
initSession()
initCron()
initQueue()
go initHttp()
initHttp()
select {}
}

View File

@@ -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
}

View File

@@ -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()

View File

@@ -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)
}
}

View File

@@ -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)
}
}()
}
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)
}

View File

@@ -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()

View File

@@ -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)
}

View File

@@ -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 {