mirror of
https://github.com/acepanel/panel.git
synced 2026-02-04 05:31:44 +08:00
feat: 支持且默认HTTPS
This commit is contained in:
@@ -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">
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -11,6 +11,6 @@ http:
|
||||
debug: false
|
||||
port: 8888
|
||||
entrance: /
|
||||
tls: false
|
||||
tls: true
|
||||
database:
|
||||
debug: false
|
||||
|
||||
@@ -21,7 +21,7 @@ func BootWeb() {
|
||||
initSession()
|
||||
initCron()
|
||||
initQueue()
|
||||
go initHttp()
|
||||
initHttp()
|
||||
|
||||
select {}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user