2018-05-17 05:13:22 +03:00
|
|
|
package echosession
|
|
|
|
|
|
|
|
import (
|
2018-06-13 10:15:27 +03:00
|
|
|
"github.com/go-session/session"
|
2018-05-17 05:13:22 +03:00
|
|
|
"github.com/labstack/echo"
|
|
|
|
)
|
|
|
|
|
|
|
|
type (
|
|
|
|
// Skipper defines a function to skip middleware. Returning true skips processing
|
|
|
|
// the middleware.
|
|
|
|
Skipper func(c echo.Context) bool
|
|
|
|
|
|
|
|
// Config defines the config for Session middleware.
|
|
|
|
Config struct {
|
|
|
|
// Skipper defines a function to skip middleware.
|
|
|
|
Skipper Skipper
|
|
|
|
// StoreKey keys stored in the context
|
|
|
|
StoreKey string
|
2018-10-19 06:32:16 +03:00
|
|
|
// ManageKey keys stored in the context
|
|
|
|
ManageKey string
|
2018-05-17 05:13:22 +03:00
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
// DefaultConfig is the default Recover middleware config.
|
|
|
|
DefaultConfig = Config{
|
2018-10-19 06:32:16 +03:00
|
|
|
Skipper: func(_ echo.Context) bool { return false },
|
|
|
|
StoreKey: "github.com/go-session/echo-session/store",
|
|
|
|
ManageKey: "github.com/go-session/echo-session/manage",
|
2018-05-17 05:13:22 +03:00
|
|
|
}
|
|
|
|
|
2018-10-19 06:32:16 +03:00
|
|
|
storeKey string
|
|
|
|
manageKey string
|
2018-05-17 05:13:22 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
// New create a session middleware
|
|
|
|
func New(opt ...session.Option) echo.MiddlewareFunc {
|
|
|
|
return NewWithConfig(DefaultConfig, opt...)
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewWithConfig create a session middleware
|
|
|
|
func NewWithConfig(config Config, opt ...session.Option) echo.MiddlewareFunc {
|
|
|
|
if config.Skipper == nil {
|
|
|
|
config.Skipper = DefaultConfig.Skipper
|
|
|
|
}
|
|
|
|
|
2018-10-19 06:32:16 +03:00
|
|
|
manageKey = config.ManageKey
|
|
|
|
if manageKey == "" {
|
|
|
|
manageKey = DefaultConfig.ManageKey
|
|
|
|
}
|
|
|
|
|
2018-05-17 05:13:22 +03:00
|
|
|
storeKey = config.StoreKey
|
|
|
|
if storeKey == "" {
|
|
|
|
storeKey = DefaultConfig.StoreKey
|
|
|
|
}
|
|
|
|
|
2018-10-19 06:32:16 +03:00
|
|
|
manage := session.NewManager(opt...)
|
2018-05-17 05:13:22 +03:00
|
|
|
return func(next echo.HandlerFunc) echo.HandlerFunc {
|
|
|
|
return func(c echo.Context) error {
|
|
|
|
if config.Skipper(c) {
|
|
|
|
return next(c)
|
|
|
|
}
|
|
|
|
|
2018-10-19 06:32:16 +03:00
|
|
|
c.Set(manageKey, manage)
|
|
|
|
store, err := manage.Start(nil, c.Response(), c.Request())
|
2018-05-17 05:13:22 +03:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
c.Set(storeKey, store)
|
|
|
|
return next(c)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// FromContext get session storage from context
|
|
|
|
func FromContext(ctx echo.Context) session.Store {
|
|
|
|
return ctx.Get(storeKey).(session.Store)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Destroy a session
|
|
|
|
func Destroy(ctx echo.Context) error {
|
2018-10-19 06:32:16 +03:00
|
|
|
return ctx.Get(manageKey).(*session.Manager).Destroy(nil, ctx.Response(), ctx.Request())
|
2018-05-17 05:13:22 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
// Refresh a session and return to session storage
|
|
|
|
func Refresh(ctx echo.Context) (session.Store, error) {
|
2018-10-19 06:32:16 +03:00
|
|
|
return ctx.Get(manageKey).(*session.Manager).Refresh(nil, ctx.Response(), ctx.Request())
|
2018-05-17 05:13:22 +03:00
|
|
|
}
|