Migrate from the via meta-framework to direct dependencies:
- chi for routing, templ for HTML templates, datastar for SSE/reactivity
- Feature-sliced architecture (features/{auth,lobby,c4game,snakegame}/)
- Shared layouts and components (features/common/)
- Handler factory pattern (HandleX(deps) http.HandlerFunc)
- Embedded NATS server (nats/), SCS sessions (sessions/), chi router wiring (router/)
- Move ChatMessage domain type from ui package to game package
- Remove old ui/ package (gomponents-based via/h views)
- Remove via dependency from go.mod entirely
32 lines
870 B
Go
32 lines
870 B
Go
// Package sessions configures the SCS session manager backed by SQLite.
|
|
package sessions
|
|
|
|
import (
|
|
"database/sql"
|
|
"log/slog"
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/alexedwards/scs/sqlite3store"
|
|
"github.com/alexedwards/scs/v2"
|
|
)
|
|
|
|
// SetupSessionManager creates a configured session manager backed by SQLite.
|
|
// Returns the manager and a cleanup function the caller should defer.
|
|
func SetupSessionManager(db *sql.DB) (*scs.SessionManager, func()) {
|
|
store := sqlite3store.New(db)
|
|
cleanup := func() { store.StopCleanup() }
|
|
|
|
sessionManager := scs.New()
|
|
sessionManager.Store = store
|
|
sessionManager.Lifetime = 30 * 24 * time.Hour
|
|
sessionManager.Cookie.Path = "/"
|
|
sessionManager.Cookie.HttpOnly = true
|
|
sessionManager.Cookie.Secure = false
|
|
sessionManager.Cookie.SameSite = http.SameSiteLaxMode
|
|
|
|
slog.Info("session manager configured")
|
|
|
|
return sessionManager, cleanup
|
|
}
|