mirror of
https://github.com/astaxie/beego.git
synced 2024-11-22 11:40:55 +00:00
Merge pull request #537 from jfolkins/develop
(REF#519) Enhancement: Allow developer to set FlashName and FlashSeperator values
This commit is contained in:
commit
b59dae6fb8
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1,3 @@
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
13
config.go
13
config.go
@ -58,6 +58,8 @@ var (
|
|||||||
EnableAdmin bool // flag of enable admin module to log every request info.
|
EnableAdmin bool // flag of enable admin module to log every request info.
|
||||||
AdminHttpAddr string // http server configurations for admin module.
|
AdminHttpAddr string // http server configurations for admin module.
|
||||||
AdminHttpPort int
|
AdminHttpPort int
|
||||||
|
FlashName string // name of the flash variable found in response header and cookie
|
||||||
|
FlashSeperator string // used to seperate flash key:value
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@ -123,6 +125,9 @@ func init() {
|
|||||||
AdminHttpAddr = "127.0.0.1"
|
AdminHttpAddr = "127.0.0.1"
|
||||||
AdminHttpPort = 8088
|
AdminHttpPort = 8088
|
||||||
|
|
||||||
|
FlashName = "BEEGO_FLASH"
|
||||||
|
FlashSeperator = "BEEGOFLASH"
|
||||||
|
|
||||||
runtime.GOMAXPROCS(runtime.NumCPU())
|
runtime.GOMAXPROCS(runtime.NumCPU())
|
||||||
|
|
||||||
// init BeeLogger
|
// init BeeLogger
|
||||||
@ -271,6 +276,14 @@ func ParseConfig() (err error) {
|
|||||||
BeegoServerName = serverName
|
BeegoServerName = serverName
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if flashname := AppConfig.String("FlashName"); flashname != "" {
|
||||||
|
FlashName = flashname
|
||||||
|
}
|
||||||
|
|
||||||
|
if flashseperator := AppConfig.String("FlashSeperator"); flashseperator != "" {
|
||||||
|
FlashSeperator = flashseperator
|
||||||
|
}
|
||||||
|
|
||||||
if sd := AppConfig.String("StaticDir"); sd != "" {
|
if sd := AppConfig.String("StaticDir"); sd != "" {
|
||||||
for k := range StaticDir {
|
for k := range StaticDir {
|
||||||
delete(StaticDir, k)
|
delete(StaticDir, k)
|
||||||
|
15
config_test.go
Normal file
15
config_test.go
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package beego
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestDefaults(t *testing.T) {
|
||||||
|
if FlashName != "BEEGO_FLASH" {
|
||||||
|
t.Errorf("FlashName was not set to default.")
|
||||||
|
}
|
||||||
|
|
||||||
|
if FlashSeperator != "BEEGOFLASH" {
|
||||||
|
t.Errorf("FlashName was not set to default.")
|
||||||
|
}
|
||||||
|
}
|
17
flash.go
17
flash.go
@ -6,9 +6,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// the separation string when encoding flash data.
|
|
||||||
const BEEGO_FLASH_SEP = "#BEEGOFLASH#"
|
|
||||||
|
|
||||||
// FlashData is a tools to maintain data when using across request.
|
// FlashData is a tools to maintain data when using across request.
|
||||||
type FlashData struct {
|
type FlashData struct {
|
||||||
Data map[string]string
|
Data map[string]string
|
||||||
@ -54,29 +51,27 @@ func (fd *FlashData) Store(c *Controller) {
|
|||||||
c.Data["flash"] = fd.Data
|
c.Data["flash"] = fd.Data
|
||||||
var flashValue string
|
var flashValue string
|
||||||
for key, value := range fd.Data {
|
for key, value := range fd.Data {
|
||||||
flashValue += "\x00" + key + BEEGO_FLASH_SEP + value + "\x00"
|
flashValue += "\x00" + key + "\x23" + FlashSeperator + "\x23" + value + "\x00"
|
||||||
}
|
}
|
||||||
c.Ctx.SetCookie("BEEGO_FLASH", url.QueryEscape(flashValue), 0, "/")
|
c.Ctx.SetCookie(FlashName, url.QueryEscape(flashValue), 0, "/")
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReadFromRequest parsed flash data from encoded values in cookie.
|
// ReadFromRequest parsed flash data from encoded values in cookie.
|
||||||
func ReadFromRequest(c *Controller) *FlashData {
|
func ReadFromRequest(c *Controller) *FlashData {
|
||||||
flash := &FlashData{
|
flash := NewFlash()
|
||||||
Data: make(map[string]string),
|
if cookie, err := c.Ctx.Request.Cookie(FlashName); err == nil {
|
||||||
}
|
|
||||||
if cookie, err := c.Ctx.Request.Cookie("BEEGO_FLASH"); err == nil {
|
|
||||||
v, _ := url.QueryUnescape(cookie.Value)
|
v, _ := url.QueryUnescape(cookie.Value)
|
||||||
vals := strings.Split(v, "\x00")
|
vals := strings.Split(v, "\x00")
|
||||||
for _, v := range vals {
|
for _, v := range vals {
|
||||||
if len(v) > 0 {
|
if len(v) > 0 {
|
||||||
kv := strings.Split(v, BEEGO_FLASH_SEP)
|
kv := strings.Split(v, FlashSeperator)
|
||||||
if len(kv) == 2 {
|
if len(kv) == 2 {
|
||||||
flash.Data[kv[0]] = kv[1]
|
flash.Data[kv[0]] = kv[1]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//read one time then delete it
|
//read one time then delete it
|
||||||
c.Ctx.SetCookie("BEEGO_FLASH", "", -1, "/")
|
c.Ctx.SetCookie(FlashName, "", -1, "/")
|
||||||
}
|
}
|
||||||
c.Data["flash"] = flash.Data
|
c.Data["flash"] = flash.Data
|
||||||
return flash
|
return flash
|
||||||
|
40
flash_test.go
Normal file
40
flash_test.go
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
package beego
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
"net/http/httptest"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
type TestFlashController struct {
|
||||||
|
Controller
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *TestFlashController) TestWriteFlash() {
|
||||||
|
flash := NewFlash()
|
||||||
|
flash.Notice("TestFlashString")
|
||||||
|
flash.Store(&this.Controller)
|
||||||
|
// we choose to serve json because we don't want to load a template html file
|
||||||
|
this.ServeJson(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestFlashHeader(t *testing.T) {
|
||||||
|
// create fake GET request
|
||||||
|
r, _ := http.NewRequest("GET", "/", nil)
|
||||||
|
w := httptest.NewRecorder()
|
||||||
|
|
||||||
|
// setup the handler
|
||||||
|
handler := NewControllerRegistor()
|
||||||
|
handler.Add("/", &TestFlashController{}, "get:TestWriteFlash")
|
||||||
|
handler.ServeHTTP(w, r)
|
||||||
|
|
||||||
|
// get the Set-Cookie value
|
||||||
|
sc := w.Header().Get("Set-Cookie")
|
||||||
|
// match for the expected header
|
||||||
|
res := strings.Contains(sc, "BEEGO_FLASH=%00notice%23BEEGOFLASH%23TestFlashString%00")
|
||||||
|
// validate the assertion
|
||||||
|
if res != true {
|
||||||
|
t.Errorf("TestFlashHeader() unable to validate flash message")
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user