/
flash.go
54 lines (46 loc) · 1.3 KB
/
flash.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
package admin
import (
"encoding/base64"
"encoding/json"
"net/http"
)
type Flash struct {
Type string
Message string
Keep bool
}
func (context *Context) readFlashFromCookie() (flashes []Flash) {
if cookie, err := context.Request.Cookie("qor-flashes"); err == nil {
if bytes, err := base64.StdEncoding.DecodeString(cookie.Value); err == nil {
json.Unmarshal(bytes, &flashes)
}
}
return
}
func (context *Context) writeFlashes() {
var flashes []Flash
for _, flash := range context.Flashes {
if flash.Keep {
flashes = append(flashes, flash)
}
}
if bytes, err := json.Marshal(flashes); err == nil {
prefix := context.Admin.GetRouter().Prefix
cookie := http.Cookie{Name: "qor-flashes", Value: base64.StdEncoding.EncodeToString(bytes), Path: prefix}
http.SetCookie(context.Writer, &cookie)
}
}
func (context *Context) FlashNow(message, typ string) {
context.Flashes = append(context.Flashes, Flash{Type: typ, Message: message})
}
func (context *Context) Flash(message, typ string) {
flash := Flash{Type: typ, Message: message, Keep: true}
context.Flashes = append(context.Flashes, flash)
context.writeFlashes()
}
func (context *Context) GetFlashes() []Flash {
flashes := context.readFlashFromCookie()
flashes = append(flashes, context.Flashes...)
context.writeFlashes()
return flashes
}