60 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package session
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"net/http"
 | |
| 	"time"
 | |
| 
 | |
| 	"management/internal/config"
 | |
| 	db "management/internal/db/sqlc"
 | |
| 
 | |
| 	"github.com/alexedwards/scs/pgxstore"
 | |
| 	"github.com/alexedwards/scs/v2"
 | |
| )
 | |
| 
 | |
| var sessionManager *scs.SessionManager
 | |
| 
 | |
| func Init() {
 | |
| 	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
 | |
| 
 | |
| 	// postgres
 | |
| 	// github.com/alexedwards/scs/postgresstore
 | |
| 	// sessionManager.Store = postgresstore.New(db)
 | |
| 	// pgx
 | |
| 	// github.com/alexedwards/scs/pgxstore
 | |
| 	sessionManager.Store = pgxstore.New(db.Engine.Pool())
 | |
| 	// redis
 | |
| 	// sessionManager.Store = newRedisStore()
 | |
| }
 | |
| 
 | |
| func Destroy(ctx context.Context) error {
 | |
| 	return sessionManager.Destroy(ctx)
 | |
| }
 | |
| 
 | |
| func LoadAndSave(next http.Handler) http.Handler {
 | |
| 	return sessionManager.LoadAndSave(next)
 | |
| }
 | |
| 
 | |
| func Put(ctx context.Context, key string, val interface{}) {
 | |
| 	sessionManager.Put(ctx, key, val)
 | |
| }
 | |
| 
 | |
| func GetBytes(ctx context.Context, key string) []byte {
 | |
| 	return sessionManager.GetBytes(ctx, key)
 | |
| }
 | |
| 
 | |
| func Exists(ctx context.Context, key string) bool {
 | |
| 	return sessionManager.Exists(ctx, key)
 | |
| }
 | |
| 
 | |
| func RenewToken(ctx context.Context) error {
 | |
| 	return sessionManager.RenewToken(ctx)
 | |
| }
 |