/
sessions.go
115 lines (92 loc) · 2.38 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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package web
import (
"encoding/gob"
"log"
"net/http"
)
var (
sessionKey = "session"
flashMessagesKey = "_messages"
)
func init() {
gob.Register(FlashMessage{})
}
// FlashMessage is used to contain a message that only shows up for a user once
type FlashMessage struct {
Message string
Severity string
}
func (ctx *Context) setFlashMessage(r *http.Request, w http.ResponseWriter, m FlashMessage) {
session, _ := ctx.CookieStore.Get(r, sessionKey)
session.AddFlash(m, flashMessagesKey)
err := session.Save(r, w)
if err != nil {
log.Printf("WARN: Could not store session: %s", err)
}
}
func (ctx *Context) getFlashMessages(r *http.Request, w http.ResponseWriter) []FlashMessage {
session, _ := ctx.CookieStore.Get(r, sessionKey)
values := session.Flashes(flashMessagesKey)
var messages []FlashMessage
for _, value := range values {
message, ok := value.(FlashMessage)
if !ok {
continue
}
messages = append(messages, message)
}
err := session.Save(r, w)
if err != nil {
log.Printf("WARN: Could not store session: %s", err)
}
return messages
}
func (ctx *Context) getSessionValueWithDefault(r *http.Request, key string, defaultValue string) string {
value := ctx.getSessionValue(r, key)
if value == nil {
return defaultValue
}
strValue, ok := value.(string)
if !ok {
return defaultValue
}
return strValue
}
func (ctx *Context) getSessionBooleanWithDefault(r *http.Request, key string, defaultValue bool) bool {
value := ctx.getSessionValue(r, key)
if value == nil {
return defaultValue
}
boolValue, ok := value.(bool)
if !ok {
return defaultValue
}
return boolValue
}
func (ctx *Context) getSessionFloat64WithDefault(r *http.Request, key string, defaultValue float64) float64 {
value := ctx.getSessionValue(r, key)
if value == nil {
return defaultValue
}
float64Value, ok := value.(float64)
if !ok {
return defaultValue
}
return float64Value
}
func (ctx *Context) setSessionValue(r *http.Request, w http.ResponseWriter, name string, value interface{}) {
session, _ := ctx.CookieStore.Get(r, sessionKey)
session.Values[name] = value
err := session.Save(r, w)
if err != nil {
log.Printf("WARN: Could not store session: %s", err)
}
}
func (ctx *Context) getSessionValue(r *http.Request, name string) interface{} {
session, _ := ctx.CookieStore.Get(r, sessionKey)
val, ok := session.Values[name]
if !ok {
return nil
}
return val
}