/
sessions.go
77 lines (63 loc) · 2.04 KB
/
sessions.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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package prago
import (
"github.com/gorilla/sessions"
)
type sessionsManager struct {
cookieStore *sessions.CookieStore
}
type requestSession struct {
session *sessions.Session
dirty bool
}
func (rs *requestSession) setValue(key string, value interface{}) {
rs.session.Values[key] = value
rs.dirty = true
}
const userIDSessionName = "user_id"
func (request *Request) logInUser(user *user) {
request.session.setValue(userIDSessionName, user.ID)
}
func (request *Request) logOutUser() {
delete(request.session.session.Values, userIDSessionName)
request.session.dirty = true
}
func (request *Request) writeSessionIfDirty() {
if request.session != nil && request.session.dirty {
must(request.session.session.Save(request.Request(), request.Response()))
}
}
// AddFlashMessage adds flash message to request
func (request *Request) AddFlashMessage(message string) {
request.app.Notification(message).Flash(request)
}
func initRequestWithSession(request *Request) {
session, err := request.app.sessionsManager.cookieStore.Get(request.Request(), request.app.codeName)
if err != nil {
request.app.Log().Println("Session not valid")
request.Response().Header().Set("Set-Cookie", request.app.codeName+"=; expires=Thu, 01 Jan 1970 00:00:01 GMT;")
panic(err)
}
request.session = &requestSession{
session: session,
}
var notifications []*notificationView
for _, v := range session.Flashes() {
notificationID := v.(string)
notification := request.app.notificationCenter.getFromUUID(notificationID)
if notification != nil {
request.app.notificationCenter.delete(notificationID)
notifications = append(notifications, notification.getView())
request.session.dirty = true
}
}
request.notifications = notifications
}
func (app *App) initSessions() {
random := app.mustGetSetting("random")
cookieStore := sessions.NewCookieStore([]byte(random))
app.sessionsManager = &sessionsManager{
cookieStore: cookieStore,
}
app.mainController.addBeforeAction(initRequestWithSession)
//app.accessController.addBeforeAction(initRequestWithSession)
}