initial commit
This commit is contained in:
55
middleware/session/session.go
Normal file
55
middleware/session/session.go
Normal file
@ -0,0 +1,55 @@
|
||||
package session
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"net/http"
|
||||
|
||||
"git.jeffthecoder.xyz/public/lazyhandler/magic"
|
||||
"git.jeffthecoder.xyz/public/lazyhandler/middleware"
|
||||
|
||||
"github.com/go-session/session/v3"
|
||||
)
|
||||
|
||||
type ctxKey int
|
||||
|
||||
const (
|
||||
sessionKey ctxKey = iota
|
||||
)
|
||||
|
||||
var (
|
||||
ErrSessionStoreNotInitialized = errors.New("no session store in request context")
|
||||
)
|
||||
|
||||
func Session(sessionStore session.ManagerStore) middleware.Middleware {
|
||||
manager := session.NewManager(
|
||||
session.SetStore(sessionStore),
|
||||
)
|
||||
|
||||
return middleware.WrapFunc(func(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
store, err := manager.Start(r.Context(), w, r)
|
||||
if err != nil {
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
defer store.Save()
|
||||
|
||||
next.ServeHTTP(w, r.WithContext(context.WithValue(r.Context(), sessionKey, store)))
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func GetSession(r *http.Request) (session.Store, error) {
|
||||
if store, ok := r.Context().Value(sessionKey).(session.Store); ok {
|
||||
return store, nil
|
||||
}
|
||||
return nil, ErrSessionStoreNotInitialized
|
||||
}
|
||||
|
||||
func RegisterExtractor() {
|
||||
magic.RegisterExtractorGeneric[session.Store](func(r *http.Request) (any, error) {
|
||||
store, err := GetSession(r)
|
||||
return store, err
|
||||
})
|
||||
}
|
Reference in New Issue
Block a user