fix web.go

This commit is contained in:
Dikiy13371 2025-10-08 01:42:52 +03:00
parent b5861d31ae
commit edaa4851f7

View file

@ -4,6 +4,7 @@ package web
import ( import (
"context" "context"
"crypto/sha256"
"crypto/tls" "crypto/tls"
"embed" "embed"
"html/template" "html/template"
@ -26,6 +27,8 @@ import (
"github.com/mhsanaei/3x-ui/v2/web/service" "github.com/mhsanaei/3x-ui/v2/web/service"
"github.com/gin-contrib/gzip" "github.com/gin-contrib/gzip"
"github.com/gin-contrib/sessions"
"github.com/gin-contrib/sessions/cookie"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/robfig/cron/v3" "github.com/robfig/cron/v3"
) )
@ -161,6 +164,7 @@ func (s *Server) initRouter() (*gin.Engine, error) {
engine := gin.Default() engine := gin.Default()
// получаем домен и секрет/базовый путь из настроек
webDomain, err := s.settingService.GetWebDomain() webDomain, err := s.settingService.GetWebDomain()
if err != nil { if err != nil {
return nil, err return nil, err
@ -169,16 +173,28 @@ func (s *Server) initRouter() (*gin.Engine, error) {
engine.Use(middleware.DomainValidatorMiddleware(webDomain)) engine.Use(middleware.DomainValidatorMiddleware(webDomain))
} }
// Keep secret read to maintain behavior; silence unused warning. // вот ЭТО должно быть раньше, чем блок с сессиями:
if secret, err := s.settingService.GetSecret(); err == nil { secret, err := s.settingService.GetSecret()
_ = secret if err != nil {
return nil, err
} }
// Base path for all routes and assets (e.g. "/")
basePath, err := s.settingService.GetBasePath() basePath, err := s.settingService.GetBasePath()
if err != nil { if err != nil {
return nil, err // или basePath = "/" и продолжаем return nil, err
} }
// cookie-сессии на базе секретного ключа
key := sha256.Sum256([]byte(secret))
store := cookie.NewStore(key[:])
store.Options(sessions.Options{
Path: basePath,
HttpOnly: true,
Secure: false, // если HTTPS — поставить true
SameSite: http.SameSiteLaxMode,
})
engine.Use(sessions.Sessions("xui_sess", store))
// gzip, excluding API path to avoid double-compressing JSON where needed // gzip, excluding API path to avoid double-compressing JSON where needed
engine.Use(gzip.Gzip( engine.Use(gzip.Gzip(
gzip.DefaultCompression, gzip.DefaultCompression,