This commit is contained in:
2025-03-28 17:51:34 +08:00
parent da612380e0
commit 5c8802d2f0
68 changed files with 3422 additions and 630 deletions

View File

@@ -5,55 +5,68 @@ import (
"net/http"
"time"
"management/internal/config"
db "management/internal/db/sqlc"
"github.com/alexedwards/scs/pgxstore"
"github.com/alexedwards/scs/v2"
"github.com/jackc/pgx/v5/pgxpool"
)
var sessionManager *scs.SessionManager
type ISession interface {
Destroy(ctx context.Context) error
LoadAndSave(next http.Handler) http.Handler
Put(ctx context.Context, key string, val any)
GetBytes(ctx context.Context, key string) []byte
Exists(ctx context.Context, key string) bool
RenewToken(ctx context.Context) error
}
func Init() {
sessionManager = scs.New()
type session struct {
sessionManager *scs.SessionManager
}
func New(pool *pgxpool.Pool, prod bool) ISession {
sessionManager := scs.New()
sessionManager.Lifetime = 24 * time.Hour
sessionManager.IdleTimeout = 2 * time.Hour
sessionManager.Cookie.Name = "token"
sessionManager.Cookie.HttpOnly = true
sessionManager.Cookie.Persist = true
sessionManager.Cookie.SameSite = http.SameSiteStrictMode
sessionManager.Cookie.Secure = config.File.App.Prod
sessionManager.Cookie.Secure = prod
// postgres
// github.com/alexedwards/scs/postgresstore
// sessionManager.Store = postgresstore.New(db)
// pgx
// github.com/alexedwards/scs/pgxstore
sessionManager.Store = pgxstore.New(db.Engine.Pool())
sessionManager.Store = pgxstore.New(pool)
// redis
// sessionManager.Store = newRedisStore()
return &session{
sessionManager: sessionManager,
}
}
func Destroy(ctx context.Context) error {
return sessionManager.Destroy(ctx)
func (s *session) Destroy(ctx context.Context) error {
return s.sessionManager.Destroy(ctx)
}
func LoadAndSave(next http.Handler) http.Handler {
return sessionManager.LoadAndSave(next)
func (s *session) LoadAndSave(next http.Handler) http.Handler {
return s.sessionManager.LoadAndSave(next)
}
func Put(ctx context.Context, key string, val interface{}) {
sessionManager.Put(ctx, key, val)
func (s *session) Put(ctx context.Context, key string, val any) {
s.sessionManager.Put(ctx, key, val)
}
func GetBytes(ctx context.Context, key string) []byte {
return sessionManager.GetBytes(ctx, key)
func (s *session) GetBytes(ctx context.Context, key string) []byte {
return s.sessionManager.GetBytes(ctx, key)
}
func Exists(ctx context.Context, key string) bool {
return sessionManager.Exists(ctx, key)
func (s *session) Exists(ctx context.Context, key string) bool {
return s.sessionManager.Exists(ctx, key)
}
func RenewToken(ctx context.Context) error {
return sessionManager.RenewToken(ctx)
func (s *session) RenewToken(ctx context.Context) error {
return s.sessionManager.RenewToken(ctx)
}