73 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package session
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"net/http"
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/alexedwards/scs/pgxstore"
 | |
| 	"github.com/alexedwards/scs/v2"
 | |
| 	"github.com/jackc/pgx/v5/pgxpool"
 | |
| )
 | |
| 
 | |
| 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
 | |
| }
 | |
| 
 | |
| 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 = prod
 | |
| 
 | |
| 	// postgres
 | |
| 	// github.com/alexedwards/scs/postgresstore
 | |
| 	// sessionManager.Store = postgresstore.New(db)
 | |
| 	// pgx
 | |
| 	// github.com/alexedwards/scs/pgxstore
 | |
| 	sessionManager.Store = pgxstore.New(pool)
 | |
| 	// redis
 | |
| 	// sessionManager.Store = newRedisStore()
 | |
| 
 | |
| 	return &session{
 | |
| 		sessionManager: sessionManager,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (s *session) Destroy(ctx context.Context) error {
 | |
| 	return s.sessionManager.Destroy(ctx)
 | |
| }
 | |
| 
 | |
| func (s *session) LoadAndSave(next http.Handler) http.Handler {
 | |
| 	return s.sessionManager.LoadAndSave(next)
 | |
| }
 | |
| 
 | |
| func (s *session) Put(ctx context.Context, key string, val any) {
 | |
| 	s.sessionManager.Put(ctx, key, val)
 | |
| }
 | |
| 
 | |
| func (s *session) GetBytes(ctx context.Context, key string) []byte {
 | |
| 	return s.sessionManager.GetBytes(ctx, key)
 | |
| }
 | |
| 
 | |
| func (s *session) Exists(ctx context.Context, key string) bool {
 | |
| 	return s.sessionManager.Exists(ctx, key)
 | |
| }
 | |
| 
 | |
| func (s *session) RenewToken(ctx context.Context) error {
 | |
| 	return s.sessionManager.RenewToken(ctx)
 | |
| }
 |