-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathservice_provider.go
56 lines (45 loc) · 1.38 KB
/
service_provider.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package session
import (
"github.com/goal-web/contracts"
"github.com/goal-web/session/stores"
)
type ServiceProvider struct {
app contracts.Application
config Config
}
func (this *ServiceProvider) Register(application contracts.Application) {
this.app = application
application.Bind("session", func(
config contracts.Config,
request contracts.HttpRequest,
encryptor contracts.Encryptor,
redis contracts.RedisFactory,
) contracts.Session {
if session, isSession := request.Get("session").(contracts.Session); isSession {
return session
}
sessionConfig := config.Get("session").(Config)
var store contracts.SessionStore
switch sessionConfig.Driver {
case "cookie":
if sessionConfig.Encrypt {
store = stores.CookieStore(sessionConfig.Name, sessionConfig.Lifetime, request, encryptor)
} else {
store = stores.CookieStore(sessionConfig.Name, sessionConfig.Lifetime, request, nil)
}
case "redis":
store = stores.RedisStore(sessionConfig.Key, sessionConfig.Lifetime, redis.Connection(sessionConfig.Connection))
}
session := New(sessionConfig, request, store)
request.Set("session", session)
return session
})
}
func (this *ServiceProvider) Start() error {
this.app.Call(func(dispatcher contracts.EventDispatcher) {
dispatcher.Register("RESPONSE_BEFORE", &RequestAfterListener{})
})
return nil
}
func (this *ServiceProvider) Stop() {
}