@@ -8,27 +8,31 @@ import (
8
8
"gopkg.in/session.v2"
9
9
)
10
10
11
+ type (
12
+ // ErrorHandleFunc error handling function
13
+ ErrorHandleFunc func (* gin.Context , error )
14
+ // Config defines the config for Session middleware
15
+ Config struct {
16
+ // error handling when starting the session
17
+ ErrorHandleFunc ErrorHandleFunc
18
+ // keys stored in the context
19
+ StoreKey string
20
+ }
21
+ )
22
+
11
23
var (
12
- // DefaultKey Keys stored in the context
13
- DefaultKey = "github.com/go-session/gin-session"
14
24
once sync.Once
15
25
internalManager * session.Manager
16
- internalError ErrorHandleFunc
17
- )
26
+ storeKey string
18
27
19
- func init () {
20
- internalError = func (ctx * gin.Context , err error ) {
21
- ctx .AbortWithError (500 , err )
28
+ // DefaultConfig is the default Recover middleware config.
29
+ DefaultConfig = Config {
30
+ ErrorHandleFunc : func (ctx * gin.Context , err error ) {
31
+ ctx .AbortWithError (500 , err )
32
+ },
33
+ StoreKey : "github.com/go-session/gin-session" ,
22
34
}
23
- }
24
-
25
- // ErrorHandleFunc error handling function
26
- type ErrorHandleFunc func (ctx * gin.Context , err error )
27
-
28
- // SetErrorHandler Set error handling
29
- func SetErrorHandler (handler ErrorHandleFunc ) {
30
- internalError = handler
31
- }
35
+ )
32
36
33
37
func manager (opt ... session.Option ) * session.Manager {
34
38
once .Do (func () {
@@ -37,22 +41,36 @@ func manager(opt ...session.Option) *session.Manager {
37
41
return internalManager
38
42
}
39
43
40
- // New Create a session middleware
44
+ // New create a session middleware
41
45
func New (opt ... session.Option ) gin.HandlerFunc {
46
+ return NewWithConfig (DefaultConfig , opt ... )
47
+ }
48
+
49
+ // NewWithConfig create a session middleware
50
+ func NewWithConfig (config Config , opt ... session.Option ) gin.HandlerFunc {
51
+ if config .ErrorHandleFunc == nil {
52
+ config .ErrorHandleFunc = DefaultConfig .ErrorHandleFunc
53
+ }
54
+
55
+ storeKey = config .StoreKey
56
+ if storeKey == "" {
57
+ storeKey = DefaultConfig .StoreKey
58
+ }
59
+
42
60
return func (ctx * gin.Context ) {
43
61
store , err := manager (opt ... ).Start (context .Background (), ctx .Writer , ctx .Request )
44
62
if err != nil {
45
- internalError (ctx , err )
63
+ config . ErrorHandleFunc (ctx , err )
46
64
return
47
65
}
48
- ctx .Set (DefaultKey , store )
66
+ ctx .Set (storeKey , store )
49
67
ctx .Next ()
50
68
}
51
69
}
52
70
53
71
// FromContext Get session storage from context
54
72
func FromContext (ctx * gin.Context ) session.Store {
55
- return ctx .MustGet (DefaultKey ).(session.Store )
73
+ return ctx .MustGet (storeKey ).(session.Store )
56
74
}
57
75
58
76
// Destroy a session
0 commit comments