forked from ziipin-server/niuhe
-
Notifications
You must be signed in to change notification settings - Fork 0
/
context.go
133 lines (106 loc) · 2.92 KB
/
context.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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package niuhe
import "github.com/gin-gonic/gin"
type Context struct {
*gin.Context
index int8
handlers []HandlerFunc
sessCtrl _SessCtrl
}
func newContext(c *gin.Context, middlewares []HandlerFunc) *Context {
return &Context{Context: c, index: -1, handlers: middlewares}
}
func (c *Context) Next() {
c.index++
s := int8(len(c.handlers))
for ; c.index < s; c.index++ {
c.handlers[c.index](c)
}
}
func (c *Context) Abort() {
c.index = abortIndex
}
// Session segment
func (c *Context) SetSession(key string, value interface{}) {
c.sessCtrl.Set(c, key, value)
}
func (c *Context) GetSession(key string) interface{} {
return c.sessCtrl.Get(c, key)
}
func (c *Context) DelSession(key string) {
c.sessCtrl.Del(c, key)
}
func (c *Context) SessionMaxAge() int {
return c.sessCtrl.GetOptions(c).MaxAge
}
func (c *Context) SetSessionMaxAge(maxAge int) {
opts := c.sessCtrl.GetOptions(c)
opts.MaxAge = maxAge
c.sessCtrl.SetOptions(c, opts)
}
func (c *Context) SessionDomain() string {
return c.sessCtrl.GetOptions(c).Domain
}
func (c *Context) SetSessionDomain(domain string) {
opts := c.sessCtrl.GetOptions(c)
opts.Domain = domain
c.sessCtrl.SetOptions(c, opts)
}
func (c *Context) SessionPath() string {
return c.sessCtrl.GetOptions(c).Path
}
func (c *Context) SetSessionPath(path string) {
opts := c.sessCtrl.GetOptions(c)
opts.Path = path
c.sessCtrl.SetOptions(c, opts)
}
func (c *Context) beforeOutput() {
c.sessCtrl.MustSave(c)
}
func (c *Context) HTML(code int, name string, obj interface{}) {
c.beforeOutput()
c.Context.HTML(code, name, obj)
}
func (c *Context) JSON(code int, obj interface{}) {
c.beforeOutput()
c.Context.JSON(code, obj)
}
func (c *Context) IndentedJSON(code int, obj interface{}) {
c.beforeOutput()
c.Context.IndentedJSON(code, obj)
}
func (c *Context) XML(code int, obj interface{}) {
c.beforeOutput()
c.Context.XML(code, obj)
}
// YAML serializes the given struct as YAML into the response body.
type _ICanYAML interface {
YAML(code int, obj interface{})
}
func (c *Context) YAML(code int, obj interface{}) {
if ctx, ok := interface{}(c.Context).(_ICanYAML); !ok {
c.beforeOutput()
ctx.YAML(code, obj)
} else {
panic("Current version of gin cannot output YAML")
}
}
// String writes the given string into the response body.
func (c *Context) String(code int, format string, values ...interface{}) {
c.beforeOutput()
c.Context.String(code, format, values...)
}
// Redirect returns a HTTP redirect to the specific location.
func (c *Context) Redirect(code int, location string) {
c.beforeOutput()
c.Context.Redirect(code, location)
}
// Data writes some data into the body stream and updates the HTTP code.
func (c *Context) Data(code int, contentType string, data []byte) {
c.beforeOutput()
c.Context.Data(code, contentType, data)
}
// File writes the specified file into the body stream in a efficient way.
func (c *Context) File(filepath string) {
c.beforeOutput()
c.Context.File(filepath)
}