mirror of
https://github.com/astaxie/beego.git
synced 2024-11-26 15:41:30 +00:00
commit
48f19b4191
5
cache/memcache/memcache.go
vendored
5
cache/memcache/memcache.go
vendored
@ -36,8 +36,9 @@ import (
|
|||||||
|
|
||||||
"github.com/bradfitz/gomemcache/memcache"
|
"github.com/bradfitz/gomemcache/memcache"
|
||||||
|
|
||||||
"github.com/astaxie/beego/cache"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/astaxie/beego/cache"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Cache Memcache adapter.
|
// Cache Memcache adapter.
|
||||||
@ -100,7 +101,7 @@ func (rc *Cache) Put(key string, val interface{}, timeout time.Duration) error {
|
|||||||
if !ok {
|
if !ok {
|
||||||
return errors.New("val must string")
|
return errors.New("val must string")
|
||||||
}
|
}
|
||||||
item := memcache.Item{Key: key, Value: []byte(v), Expiration: int32(timeout/time.Second)}
|
item := memcache.Item{Key: key, Value: []byte(v), Expiration: int32(timeout / time.Second)}
|
||||||
return rc.conn.Set(&item)
|
return rc.conn.Set(&item)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -164,7 +164,7 @@ func (c *JSONConfigContainer) String(key string) string {
|
|||||||
// DefaultString returns the string value for a given key.
|
// DefaultString returns the string value for a given key.
|
||||||
// if err != nil return defaltval
|
// if err != nil return defaltval
|
||||||
func (c *JSONConfigContainer) DefaultString(key string, defaultval string) string {
|
func (c *JSONConfigContainer) DefaultString(key string, defaultval string) string {
|
||||||
// TODO FIXME should not use "" to replace non existance
|
// TODO FIXME should not use "" to replace non existence
|
||||||
if v := c.String(key); v != "" {
|
if v := c.String(key); v != "" {
|
||||||
return v
|
return v
|
||||||
}
|
}
|
||||||
|
@ -20,26 +20,25 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func Test_ExtractEncoding(t *testing.T) {
|
func Test_ExtractEncoding(t *testing.T) {
|
||||||
if parseEncoding(&http.Request{Header: map[string][]string{"Accept-Encoding": []string{"gzip,deflate"}}}) != "gzip" {
|
if parseEncoding(&http.Request{Header: map[string][]string{"Accept-Encoding": {"gzip,deflate"}}}) != "gzip" {
|
||||||
t.Fail()
|
t.Fail()
|
||||||
}
|
}
|
||||||
if parseEncoding(&http.Request{Header: map[string][]string{"Accept-Encoding": []string{"deflate,gzip"}}}) != "deflate" {
|
if parseEncoding(&http.Request{Header: map[string][]string{"Accept-Encoding": {"deflate,gzip"}}}) != "deflate" {
|
||||||
t.Fail()
|
t.Fail()
|
||||||
}
|
}
|
||||||
if parseEncoding(&http.Request{Header: map[string][]string{"Accept-Encoding": []string{"gzip;q=.5,deflate"}}}) != "deflate" {
|
if parseEncoding(&http.Request{Header: map[string][]string{"Accept-Encoding": {"gzip;q=.5,deflate"}}}) != "deflate" {
|
||||||
t.Fail()
|
t.Fail()
|
||||||
}
|
}
|
||||||
if parseEncoding(&http.Request{Header: map[string][]string{"Accept-Encoding": []string{"gzip;q=.5,deflate;q=0.3"}}}) != "gzip" {
|
if parseEncoding(&http.Request{Header: map[string][]string{"Accept-Encoding": {"gzip;q=.5,deflate;q=0.3"}}}) != "gzip" {
|
||||||
t.Fail()
|
t.Fail()
|
||||||
}
|
}
|
||||||
|
if parseEncoding(&http.Request{Header: map[string][]string{"Accept-Encoding": {"gzip;q=0,deflate"}}}) != "deflate" {
|
||||||
if parseEncoding(&http.Request{Header: map[string][]string{"Accept-Encoding": []string{"gzip;q=0,deflate"}}}) != "deflate" {
|
|
||||||
t.Fail()
|
t.Fail()
|
||||||
}
|
}
|
||||||
if parseEncoding(&http.Request{Header: map[string][]string{"Accept-Encoding": []string{"deflate;q=0.5,gzip;q=0.5,identity"}}}) != "" {
|
if parseEncoding(&http.Request{Header: map[string][]string{"Accept-Encoding": {"deflate;q=0.5,gzip;q=0.5,identity"}}}) != "" {
|
||||||
t.Fail()
|
t.Fail()
|
||||||
}
|
}
|
||||||
if parseEncoding(&http.Request{Header: map[string][]string{"Accept-Encoding": []string{"*"}}}) != "gzip" {
|
if parseEncoding(&http.Request{Header: map[string][]string{"Accept-Encoding": {"*"}}}) != "gzip" {
|
||||||
t.Fail()
|
t.Fail()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
2
doc.go
2
doc.go
@ -12,6 +12,6 @@ beego is inspired by Tornado, Sinatra and Flask with the added benefit of some G
|
|||||||
beego.Run()
|
beego.Run()
|
||||||
}
|
}
|
||||||
|
|
||||||
more infomation: http://beego.me
|
more information: http://beego.me
|
||||||
*/
|
*/
|
||||||
package beego
|
package beego
|
||||||
|
@ -118,15 +118,15 @@ func NewServer(addr string, handler http.Handler) (srv *Server) {
|
|||||||
sigChan: make(chan os.Signal),
|
sigChan: make(chan os.Signal),
|
||||||
isChild: isChild,
|
isChild: isChild,
|
||||||
SignalHooks: map[int]map[os.Signal][]func(){
|
SignalHooks: map[int]map[os.Signal][]func(){
|
||||||
PreSignal: map[os.Signal][]func(){
|
PreSignal: {
|
||||||
syscall.SIGHUP: []func(){},
|
syscall.SIGHUP: {},
|
||||||
syscall.SIGINT: []func(){},
|
syscall.SIGINT: {},
|
||||||
syscall.SIGTERM: []func(){},
|
syscall.SIGTERM: {},
|
||||||
},
|
},
|
||||||
PostSignal: map[os.Signal][]func(){
|
PostSignal: {
|
||||||
syscall.SIGHUP: []func(){},
|
syscall.SIGHUP: {},
|
||||||
syscall.SIGINT: []func(){},
|
syscall.SIGINT: {},
|
||||||
syscall.SIGTERM: []func(){},
|
syscall.SIGTERM: {},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
state: StateInit,
|
state: StateInit,
|
||||||
|
@ -42,4 +42,3 @@ func TestConsole(t *testing.T) {
|
|||||||
log2.SetLogger("console", `{"level":3}`)
|
log2.SetLogger("console", `{"level":3}`)
|
||||||
testConsoleCalls(log2)
|
testConsoleCalls(log2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,7 +130,6 @@ func BenchmarkFile(b *testing.B) {
|
|||||||
os.Remove("test4.log")
|
os.Remove("test4.log")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func BenchmarkFileAsynchronous(b *testing.B) {
|
func BenchmarkFileAsynchronous(b *testing.B) {
|
||||||
log := NewLogger(100000)
|
log := NewLogger(100000)
|
||||||
log.SetLogger("file", `{"filename":"test4.log"}`)
|
log.SetLogger("file", `{"filename":"test4.log"}`)
|
||||||
|
@ -19,7 +19,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ExprSep define the expression seperation
|
// ExprSep define the expression separation
|
||||||
const (
|
const (
|
||||||
ExprSep = "__"
|
ExprSep = "__"
|
||||||
)
|
)
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// CommaSpace is the seperation
|
// CommaSpace is the separation
|
||||||
const CommaSpace = ", "
|
const CommaSpace = ", "
|
||||||
|
|
||||||
// MySQLQueryBuilder is the SQL build
|
// MySQLQueryBuilder is the SQL build
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
//
|
//
|
||||||
// 1. appid
|
// 1. appid
|
||||||
//
|
//
|
||||||
// appid is asigned to the application
|
// appid is assigned to the application
|
||||||
//
|
//
|
||||||
// 2. signature
|
// 2. signature
|
||||||
//
|
//
|
||||||
|
@ -80,7 +80,7 @@ func TestDestorySessionCookie(t *testing.T) {
|
|||||||
t.Fatal("get cookie session id is not the same again.")
|
t.Fatal("get cookie session id is not the same again.")
|
||||||
}
|
}
|
||||||
|
|
||||||
// After destory session , will get a new session id .
|
// After destroy session , will get a new session id .
|
||||||
globalSessions.SessionDestroy(w, r1)
|
globalSessions.SessionDestroy(w, r1)
|
||||||
r2, _ := http.NewRequest("GET", "/", nil)
|
r2, _ := http.NewRequest("GET", "/", nil)
|
||||||
r2.Header.Set("Cookie", w.Header().Get("Set-Cookie"))
|
r2.Header.Set("Cookie", w.Header().Get("Set-Cookie"))
|
||||||
@ -91,6 +91,6 @@ func TestDestorySessionCookie(t *testing.T) {
|
|||||||
t.Fatal("session start error")
|
t.Fatal("session start error")
|
||||||
}
|
}
|
||||||
if newSession.SessionID() == session.SessionID() {
|
if newSession.SessionID() == session.SessionID() {
|
||||||
t.Fatal("after destory session and reqeust again ,get cookie session id is same.")
|
t.Fatal("after destroy session and reqeust again ,get cookie session id is same.")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ var (
|
|||||||
beegoTplFuncMap = make(template.FuncMap)
|
beegoTplFuncMap = make(template.FuncMap)
|
||||||
// BeeTemplates caching map and supported template file extensions.
|
// BeeTemplates caching map and supported template file extensions.
|
||||||
BeeTemplates = make(map[string]*template.Template)
|
BeeTemplates = make(map[string]*template.Template)
|
||||||
// BeeTemplateExt stores the template extention which will build
|
// BeeTemplateExt stores the template extension which will build
|
||||||
BeeTemplateExt = []string{"tpl", "html"}
|
BeeTemplateExt = []string{"tpl", "html"}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -670,7 +670,7 @@ func MapGet(arg1 interface{}, arg2 ...interface{}) (interface{}, error) {
|
|||||||
|
|
||||||
if arg1Type.Kind() == reflect.Map && len(arg2) > 0 {
|
if arg1Type.Kind() == reflect.Map && len(arg2) > 0 {
|
||||||
// check whether arg2[0] type equals to arg1 key type
|
// check whether arg2[0] type equals to arg1 key type
|
||||||
// if they are different, make convertion
|
// if they are different, make conversion
|
||||||
arg2Val := reflect.ValueOf(arg2[0])
|
arg2Val := reflect.ValueOf(arg2[0])
|
||||||
arg2Type := reflect.TypeOf(arg2[0])
|
arg2Type := reflect.TypeOf(arg2[0])
|
||||||
if arg2Type.Kind() != arg1Type.Key().Kind() {
|
if arg2Type.Kind() != arg1Type.Key().Kind() {
|
||||||
|
4
tree.go
4
tree.go
@ -141,7 +141,7 @@ func (t *Tree) addtree(segments []string, tree *Tree, wildcards []string, reg st
|
|||||||
regexpStr = "([^.]+).(.+)"
|
regexpStr = "([^.]+).(.+)"
|
||||||
params = params[1:]
|
params = params[1:]
|
||||||
} else {
|
} else {
|
||||||
for _ = range params {
|
for range params {
|
||||||
regexpStr = "([^/]+)/" + regexpStr
|
regexpStr = "([^/]+)/" + regexpStr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -254,7 +254,7 @@ func (t *Tree) addseg(segments []string, route interface{}, wildcards []string,
|
|||||||
regexpStr = "/([^.]+).(.+)"
|
regexpStr = "/([^.]+).(.+)"
|
||||||
params = params[1:]
|
params = params[1:]
|
||||||
} else {
|
} else {
|
||||||
for _ = range params {
|
for range params {
|
||||||
regexpStr = "/([^/]+)" + regexpStr
|
regexpStr = "/([^/]+)" + regexpStr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -158,7 +158,7 @@ func (c *Captcha) Handler(ctx *context.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateCaptchaHTML tempalte func for output html
|
// CreateCaptchaHTML template func for output html
|
||||||
func (c *Captcha) CreateCaptchaHTML() template.HTML {
|
func (c *Captcha) CreateCaptchaHTML() template.HTML {
|
||||||
value, err := c.CreateCaptcha()
|
value, err := c.CreateCaptcha()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -255,7 +255,7 @@ func NewCaptcha(urlPrefix string, store cache.Cache) *Captcha {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewWithFilter create a new captcha.Captcha and auto AddFilter for serve captacha image
|
// NewWithFilter create a new captcha.Captcha and auto AddFilter for serve captacha image
|
||||||
// and add a tempalte func for output html
|
// and add a template func for output html
|
||||||
func NewWithFilter(urlPrefix string, store cache.Cache) *Captcha {
|
func NewWithFilter(urlPrefix string, store cache.Cache) *Captcha {
|
||||||
cpt := NewCaptcha(urlPrefix, store)
|
cpt := NewCaptcha(urlPrefix, store)
|
||||||
|
|
||||||
|
@ -96,12 +96,16 @@ func (e *Email) Bytes() ([]byte, error) {
|
|||||||
e.Headers.Set("Disposition-Notification-To", strings.Join(e.ReadReceipt, ","))
|
e.Headers.Set("Disposition-Notification-To", strings.Join(e.ReadReceipt, ","))
|
||||||
}
|
}
|
||||||
e.Headers.Set("MIME-Version", "1.0")
|
e.Headers.Set("MIME-Version", "1.0")
|
||||||
e.Headers.Set("Content-Type", fmt.Sprintf("multipart/mixed;\r\n boundary=%s\r\n", w.Boundary()))
|
|
||||||
|
|
||||||
// Write the envelope headers (including any custom headers)
|
// Write the envelope headers (including any custom headers)
|
||||||
if err := headerToBytes(buff, e.Headers); err != nil {
|
if err := headerToBytes(buff, e.Headers); err != nil {
|
||||||
return nil, fmt.Errorf("Failed to render message headers: %s", err)
|
return nil, fmt.Errorf("Failed to render message headers: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
e.Headers.Set("Content-Type", fmt.Sprintf("multipart/mixed;\r\n boundary=%s\r\n", w.Boundary()))
|
||||||
|
fmt.Fprintf(w, "%s:", "Content-Type")
|
||||||
|
fmt.Fprintf(w, " %s\r\n", fmt.Sprintf("multipart/mixed;\r\n boundary=%s\r\n", w.Boundary()))
|
||||||
|
|
||||||
// Start the multipart/mixed part
|
// Start the multipart/mixed part
|
||||||
fmt.Fprintf(buff, "--%s\r\n", w.Boundary())
|
fmt.Fprintf(buff, "--%s\r\n", w.Boundary())
|
||||||
header := textproto.MIMEHeader{}
|
header := textproto.MIMEHeader{}
|
||||||
|
Loading…
Reference in New Issue
Block a user