Add SetCookie and GetCookie method for Context
This commit is contained in:
		
							
								
								
									
										59
									
								
								context.go
									
									
									
									
									
								
							
							
						
						
									
										59
									
								
								context.go
									
									
									
									
									
								
							@ -9,6 +9,7 @@ import (
 | 
				
			|||||||
	"io"
 | 
						"io"
 | 
				
			||||||
	"math"
 | 
						"math"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
						"net/url"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -321,6 +322,64 @@ func (c *Context) Header(key, value string) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (c *Context) SetCookie(name string, value string, options ...interface{}) {
 | 
				
			||||||
 | 
						cookie := http.Cookie{}
 | 
				
			||||||
 | 
						cookie.Name = name
 | 
				
			||||||
 | 
						cookie.Value = url.QueryEscape(value)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if len(options) > 0 {
 | 
				
			||||||
 | 
							switch v := options[0].(type) {
 | 
				
			||||||
 | 
							case int:
 | 
				
			||||||
 | 
								cookie.MaxAge = v
 | 
				
			||||||
 | 
							case int64:
 | 
				
			||||||
 | 
								cookie.MaxAge = int(v)
 | 
				
			||||||
 | 
							case int32:
 | 
				
			||||||
 | 
								cookie.MaxAge = int(v)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cookie.Path = "/"
 | 
				
			||||||
 | 
						if len(options) > 1 {
 | 
				
			||||||
 | 
							if v, ok := options[1].(string); ok && len(v) > 0 {
 | 
				
			||||||
 | 
								cookie.Path = v
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if len(options) > 2 {
 | 
				
			||||||
 | 
							if v, ok := options[2].(string); ok && len(v) > 0 {
 | 
				
			||||||
 | 
								cookie.Domain = v
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if len(options) > 3 {
 | 
				
			||||||
 | 
							switch v := options[3].(type) {
 | 
				
			||||||
 | 
							case bool:
 | 
				
			||||||
 | 
								cookie.Secure = v
 | 
				
			||||||
 | 
							default:
 | 
				
			||||||
 | 
								if options[3] != nil {
 | 
				
			||||||
 | 
									cookie.Secure = true
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if len(options) > 4 {
 | 
				
			||||||
 | 
							if v, ok := options[4].(bool); ok && v {
 | 
				
			||||||
 | 
								cookie.HttpOnly = true
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						c.Writer.Header().Add("Set-Cookie", cookie.String())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (c *Context) GetCookie(name string) string {
 | 
				
			||||||
 | 
						cookie, err := c.Request.Cookie(name)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return ""
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						val, _ := url.QueryUnescape(cookie.Value)
 | 
				
			||||||
 | 
						return val
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *Context) Render(code int, r render.Render) {
 | 
					func (c *Context) Render(code int, r render.Render) {
 | 
				
			||||||
	c.writermem.WriteHeader(code)
 | 
						c.writermem.WriteHeader(code)
 | 
				
			||||||
	if err := r.Render(c.Writer); err != nil {
 | 
						if err := r.Render(c.Writer); err != nil {
 | 
				
			||||||
 | 
				
			|||||||
@ -246,6 +246,23 @@ func TestContextPostFormMultipart(t *testing.T) {
 | 
				
			|||||||
	assert.Equal(t, c.PostForm("bar"), "foo")
 | 
						assert.Equal(t, c.PostForm("bar"), "foo")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestContextSetCookie(t *testing.T) {
 | 
				
			||||||
 | 
						c, w, _ := createTestContext()
 | 
				
			||||||
 | 
						c.SetCookie("user", "gin", 1, "/", "localhost", true, true)
 | 
				
			||||||
 | 
						c.SetCookie("user", "gin", int32(1), "/", "localhost", 1)
 | 
				
			||||||
 | 
						c.SetCookie("user", "gin", int64(1))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						c.Request, _ = http.NewRequest("GET", "/set", nil)
 | 
				
			||||||
 | 
						assert.Equal(t, c.GetCookie("Set-Cookie"), "user=gin; Path=/; Domain=localhost; Max-Age=1; HttpOnly; Secure")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestContextGetCookie(t *testing.T) {
 | 
				
			||||||
 | 
						c, w, _ := createTestContext()
 | 
				
			||||||
 | 
						c.Request, _ = http.NewRequest("GET", "/get", nil)
 | 
				
			||||||
 | 
						c.Request.Header.Set("Cookie", "user=gin")
 | 
				
			||||||
 | 
						assert.Equal(t, w.Body.String(), "gin")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Tests that the response is serialized as JSON
 | 
					// Tests that the response is serialized as JSON
 | 
				
			||||||
// and Content-Type is set to application/json
 | 
					// and Content-Type is set to application/json
 | 
				
			||||||
func TestContextRenderJSON(t *testing.T) {
 | 
					func TestContextRenderJSON(t *testing.T) {
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user