cookie: MaxAge
Some checks are pending
Release 3X-UI / build (386) (push) Waiting to run
Release 3X-UI / build (amd64) (push) Waiting to run
Release 3X-UI / build (arm64) (push) Waiting to run
Release 3X-UI / build (armv5) (push) Waiting to run
Release 3X-UI / build (armv6) (push) Waiting to run
Release 3X-UI / build (armv7) (push) Waiting to run
Release 3X-UI / build (s390x) (push) Waiting to run
Release 3X-UI / Build for Windows (push) Waiting to run

and minor changes
This commit is contained in:
mhsanaei 2025-09-12 13:04:36 +02:00
parent 40b6d7707a
commit 311d11a3c1
No known key found for this signature in database
GPG key ID: D875CD086CF668A0
2 changed files with 20 additions and 3 deletions

View file

@ -2,6 +2,7 @@ package session
import ( import (
"encoding/gob" "encoding/gob"
"net/http"
"x-ui/database/model" "x-ui/database/model"
@ -32,6 +33,7 @@ func SetMaxAge(c *gin.Context, maxAge int) {
Path: defaultPath, Path: defaultPath,
MaxAge: maxAge, MaxAge: maxAge,
HttpOnly: true, HttpOnly: true,
SameSite: http.SameSiteLaxMode,
}) })
} }
@ -61,5 +63,6 @@ func ClearSession(c *gin.Context) {
Path: defaultPath, Path: defaultPath,
MaxAge: -1, MaxAge: -1,
HttpOnly: true, HttpOnly: true,
SameSite: http.SameSiteLaxMode,
}) })
} }

View file

@ -31,7 +31,7 @@ import (
"github.com/robfig/cron/v3" "github.com/robfig/cron/v3"
) )
//go:embed assets/* //go:embed assets
var assetsFS embed.FS var assetsFS embed.FS
//go:embed html/* //go:embed html/*
@ -180,6 +180,15 @@ func (s *Server) initRouter() (*gin.Engine, error) {
assetsBasePath := basePath + "assets/" assetsBasePath := basePath + "assets/"
store := cookie.NewStore(secret) store := cookie.NewStore(secret)
// Configure default session cookie options, including expiration (MaxAge)
if sessionMaxAge, err := s.settingService.GetSessionMaxAge(); err == nil {
store.Options(sessions.Options{
Path: "/",
MaxAge: sessionMaxAge * 60, // minutes -> seconds
HttpOnly: true,
SameSite: http.SameSiteLaxMode,
})
}
engine.Use(sessions.Sessions("3x-ui", store)) engine.Use(sessions.Sessions("3x-ui", store))
engine.Use(func(c *gin.Context) { engine.Use(func(c *gin.Context) {
c.Set("base_path", basePath) c.Set("base_path", basePath)
@ -201,7 +210,11 @@ func (s *Server) initRouter() (*gin.Engine, error) {
i18nWebFunc := func(key string, params ...string) string { i18nWebFunc := func(key string, params ...string) string {
return locale.I18n(locale.Web, key, params...) return locale.I18n(locale.Web, key, params...)
} }
engine.FuncMap["i18n"] = i18nWebFunc // Register template functions before loading templates
funcMap := template.FuncMap{
"i18n": i18nWebFunc,
}
engine.SetFuncMap(funcMap)
engine.Use(locale.LocalizerMiddleware()) engine.Use(locale.LocalizerMiddleware())
// set static files and template // set static files and template
@ -211,11 +224,12 @@ func (s *Server) initRouter() (*gin.Engine, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
// Use the registered func map with the loaded templates
engine.LoadHTMLFiles(files...) engine.LoadHTMLFiles(files...)
engine.StaticFS(basePath+"assets", http.FS(os.DirFS("web/assets"))) engine.StaticFS(basePath+"assets", http.FS(os.DirFS("web/assets")))
} else { } else {
// for production // for production
template, err := s.getHtmlTemplate(engine.FuncMap) template, err := s.getHtmlTemplate(funcMap)
if err != nil { if err != nil {
return nil, err return nil, err
} }