update context
This commit is contained in:
parent
7bb00b60ac
commit
b37294e622
1 changed files with 17 additions and 19 deletions
36
session.go
36
session.go
|
@ -1,9 +1,6 @@
|
||||||
package echosession
|
package echosession
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
"sync"
|
|
||||||
|
|
||||||
"github.com/go-session/session"
|
"github.com/go-session/session"
|
||||||
"github.com/labstack/echo"
|
"github.com/labstack/echo"
|
||||||
)
|
)
|
||||||
|
@ -19,29 +16,23 @@ type (
|
||||||
Skipper Skipper
|
Skipper Skipper
|
||||||
// StoreKey keys stored in the context
|
// StoreKey keys stored in the context
|
||||||
StoreKey string
|
StoreKey string
|
||||||
|
// ManageKey keys stored in the context
|
||||||
|
ManageKey string
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// DefaultConfig is the default Recover middleware config.
|
// DefaultConfig is the default Recover middleware config.
|
||||||
DefaultConfig = Config{
|
DefaultConfig = Config{
|
||||||
Skipper: func(_ echo.Context) bool { return false },
|
Skipper: func(_ echo.Context) bool { return false },
|
||||||
StoreKey: "github.com/go-session/echo-session",
|
StoreKey: "github.com/go-session/echo-session/store",
|
||||||
|
ManageKey: "github.com/go-session/echo-session/manage",
|
||||||
}
|
}
|
||||||
|
|
||||||
once sync.Once
|
storeKey string
|
||||||
internalManager *session.Manager
|
manageKey string
|
||||||
storeKey string
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// get a session manager
|
|
||||||
func manager(opt ...session.Option) *session.Manager {
|
|
||||||
once.Do(func() {
|
|
||||||
internalManager = session.NewManager(opt...)
|
|
||||||
})
|
|
||||||
return internalManager
|
|
||||||
}
|
|
||||||
|
|
||||||
// New create a session middleware
|
// New create a session middleware
|
||||||
func New(opt ...session.Option) echo.MiddlewareFunc {
|
func New(opt ...session.Option) echo.MiddlewareFunc {
|
||||||
return NewWithConfig(DefaultConfig, opt...)
|
return NewWithConfig(DefaultConfig, opt...)
|
||||||
|
@ -53,18 +44,25 @@ func NewWithConfig(config Config, opt ...session.Option) echo.MiddlewareFunc {
|
||||||
config.Skipper = DefaultConfig.Skipper
|
config.Skipper = DefaultConfig.Skipper
|
||||||
}
|
}
|
||||||
|
|
||||||
|
manageKey = config.ManageKey
|
||||||
|
if manageKey == "" {
|
||||||
|
manageKey = DefaultConfig.ManageKey
|
||||||
|
}
|
||||||
|
|
||||||
storeKey = config.StoreKey
|
storeKey = config.StoreKey
|
||||||
if storeKey == "" {
|
if storeKey == "" {
|
||||||
storeKey = DefaultConfig.StoreKey
|
storeKey = DefaultConfig.StoreKey
|
||||||
}
|
}
|
||||||
|
|
||||||
|
manage := session.NewManager(opt...)
|
||||||
return func(next echo.HandlerFunc) echo.HandlerFunc {
|
return func(next echo.HandlerFunc) echo.HandlerFunc {
|
||||||
return func(c echo.Context) error {
|
return func(c echo.Context) error {
|
||||||
if config.Skipper(c) {
|
if config.Skipper(c) {
|
||||||
return next(c)
|
return next(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
store, err := manager(opt...).Start(context.Background(), c.Response(), c.Request())
|
c.Set(manageKey, manage)
|
||||||
|
store, err := manage.Start(nil, c.Response(), c.Request())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -81,10 +79,10 @@ func FromContext(ctx echo.Context) session.Store {
|
||||||
|
|
||||||
// Destroy a session
|
// Destroy a session
|
||||||
func Destroy(ctx echo.Context) error {
|
func Destroy(ctx echo.Context) error {
|
||||||
return manager().Destroy(context.Background(), ctx.Response(), ctx.Request())
|
return ctx.Get(manageKey).(*session.Manager).Destroy(nil, ctx.Response(), ctx.Request())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Refresh a session and return to session storage
|
// Refresh a session and return to session storage
|
||||||
func Refresh(ctx echo.Context) (session.Store, error) {
|
func Refresh(ctx echo.Context) (session.Store, error) {
|
||||||
return manager().Refresh(context.Background(), ctx.Response(), ctx.Request())
|
return ctx.Get(manageKey).(*session.Manager).Refresh(nil, ctx.Response(), ctx.Request())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue