mirror of https://github.com/allinssl/allinssl
77 lines
1.6 KiB
Go
77 lines
1.6 KiB
Go
package server
|
|
|
|
import (
|
|
"ALLinSSL/backend/middleware"
|
|
"ALLinSSL/backend/public"
|
|
"ALLinSSL/backend/route"
|
|
"context"
|
|
"crypto/tls"
|
|
"encoding/gob"
|
|
"github.com/gin-contrib/gzip"
|
|
"github.com/gin-contrib/sessions"
|
|
"github.com/gin-contrib/sessions/memstore"
|
|
"github.com/gin-gonic/gin"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
func Run() error {
|
|
public.ReloadConfig()
|
|
public.InitLogger(public.LogPath)
|
|
defer public.CloseLogger()
|
|
r := gin.Default()
|
|
|
|
store := memstore.NewStore([]byte("secret")) // 只在内存中,不持久化
|
|
r.Use(sessions.Sessions(public.SessionKey, store))
|
|
r.Use(middleware.LoggerMiddleware())
|
|
r.Use(gzip.Gzip(gzip.DefaultCompression))
|
|
gob.Register(time.Time{})
|
|
r.Use(middleware.SessionAuthMiddleware())
|
|
// r.Use(middleware.OpLoggerMiddleware())
|
|
route.Register(r)
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
public.ShutdownFunc = cancel
|
|
err := RunServer(ctx, r)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func RunServer(ctx context.Context, r *gin.Engine) error {
|
|
|
|
// 初始化http服务
|
|
srv := &http.Server{
|
|
Addr: ":" + public.Port,
|
|
Handler: r,
|
|
}
|
|
errchan := make(chan error, 1)
|
|
if public.GetSettingIgnoreError("https") == "1" {
|
|
srv.TLSConfig = &tls.Config{
|
|
MinVersion: tls.VersionTLS12, // 推荐设置最低 TLS 版本
|
|
}
|
|
go func() {
|
|
defer close(errchan)
|
|
err := srv.ListenAndServeTLS("data/https/cert.pem", "data/https/key.pem")
|
|
if err != nil {
|
|
errchan <- err
|
|
}
|
|
}()
|
|
} else {
|
|
go func() {
|
|
defer close(errchan)
|
|
err := srv.ListenAndServe()
|
|
if err != nil {
|
|
errchan <- err
|
|
}
|
|
}()
|
|
}
|
|
select {
|
|
case err := <-errchan:
|
|
return err
|
|
case <-ctx.Done():
|
|
_ = srv.Shutdown(ctx)
|
|
}
|
|
return nil
|
|
}
|