diff --git a/beego.go b/beego.go index ead5a6d4..042a4270 100644 --- a/beego.go +++ b/beego.go @@ -19,8 +19,6 @@ import ( "path/filepath" "strconv" "strings" - - "github.com/astaxie/beego/session" ) // beego web framework version. @@ -33,33 +31,6 @@ var ( hooks = make([]hookfunc, 0) //hook function slice to store the hookfunc ) -// SetViewsPath sets view directory path in beego application. -func SetViewsPath(path string) *App { - ViewsPath = path - return BeeApp -} - -// SetStaticPath sets static directory path and proper url pattern in beego application. -// if beego.SetStaticPath("static","public"), visit /static/* to load static file in folder "public". -func SetStaticPath(url string, path string) *App { - if !strings.HasPrefix(url, "/") { - url = "/" + url - } - url = strings.TrimRight(url, "/") - StaticDir[url] = path - return BeeApp -} - -// DelStaticPath removes the static folder setting in this url pattern in beego application. -func DelStaticPath(url string) *App { - if !strings.HasPrefix(url, "/") { - url = "/" + url - } - url = strings.TrimRight(url, "/") - delete(StaticDir, url) - return BeeApp -} - // The hookfunc will run in beego.Run() // such as sessionInit, middlerware start, buildtemplate, admin start func AddAPPStartHook(hf hookfunc) { @@ -90,62 +61,6 @@ func Run(params ...string) { BeeApp.Run() } -func initBeforeHttpRun() { - // if AppConfigPath not In the conf/app.conf reParse config - if AppConfigPath != filepath.Join(AppPath, "conf", "app.conf") { - err := ParseConfig() - if err != nil && AppConfigPath != filepath.Join(workPath, "conf", "app.conf") { - // configuration is critical to app, panic here if parse failed - panic(err) - } - } - - //init mime - AddAPPStartHook(initMime) - - // do hooks function - for _, hk := range hooks { - err := hk() - if err != nil { - panic(err) - } - } - - if SessionOn { - var err error - sessionConfig := AppConfig.String("sessionConfig") - if sessionConfig == "" { - sessionConfig = `{"cookieName":"` + SessionName + `",` + - `"gclifetime":` + strconv.FormatInt(SessionGCMaxLifetime, 10) + `,` + - `"providerConfig":"` + filepath.ToSlash(SessionSavePath) + `",` + - `"secure":` + strconv.FormatBool(EnableHttpTLS) + `,` + - `"enableSetCookie":` + strconv.FormatBool(SessionAutoSetCookie) + `,` + - `"domain":"` + SessionDomain + `",` + - `"cookieLifeTime":` + strconv.Itoa(SessionCookieLifeTime) + `}` - } - GlobalSessions, err = session.NewManager(SessionProvider, - sessionConfig) - if err != nil { - panic(err) - } - go GlobalSessions.GC() - } - - if AutoRender { - err := BuildTemplate(ViewsPath) - if err != nil && RunMode == "dev" { - Warn(err) - } - } - - registerDefaultErrorHandler() - - if EnableDocs { - Get("/docs", serverDocs) - Get("/docs/*", serverDocs) - } -} - // this function is for test package init func TestBeegoInit(apppath string) { AppPath = apppath @@ -159,3 +74,56 @@ func TestBeegoInit(apppath string) { os.Chdir(AppPath) initBeforeHttpRun() } + +func initBeforeHttpRun() { + // if AppConfigPath not In the conf/app.conf reParse config + if AppConfigPath != filepath.Join(AppPath, "conf", "app.conf") { + err := ParseConfig() + if err != nil && AppConfigPath != filepath.Join(workPath, "conf", "app.conf") { + // configuration is critical to app, panic here if parse failed + panic(err) + } + } + + //init mime + AddAPPStartHook(registerMime) + AddAPPStartHook(registerDefaultErrorHandler) + AddAPPStartHook(registerSession) + AddAPPStartHook(registerDocs) + AddAPPStartHook(registerTemplate) + + // do hooks function + for _, hk := range hooks { + err := hk() + if err != nil { + panic(err) + } + } +} + +// SetViewsPath sets view directory path in beego application. +func SetViewsPath(path string) *App { + ViewsPath = path + return BeeApp +} + +// SetStaticPath sets static directory path and proper url pattern in beego application. +// if beego.SetStaticPath("static","public"), visit /static/* to load static file in folder "public". +func SetStaticPath(url string, path string) *App { + if !strings.HasPrefix(url, "/") { + url = "/" + url + } + url = strings.TrimRight(url, "/") + StaticDir[url] = path + return BeeApp +} + +// DelStaticPath removes the static folder setting in this url pattern in beego application. +func DelStaticPath(url string) *App { + if !strings.HasPrefix(url, "/") { + url = "/" + url + } + url = strings.TrimRight(url, "/") + delete(StaticDir, url) + return BeeApp +} diff --git a/error.go b/error.go index 21768cdb..f5c0c80b 100644 --- a/error.go +++ b/error.go @@ -358,47 +358,6 @@ func gatewayTimeout(rw http.ResponseWriter, r *http.Request) { t.Execute(rw, data) } -// register default error http handlers, 404,401,403,500 and 503. -func registerDefaultErrorHandler() { - if _, ok := ErrorMaps["401"]; !ok { - Errorhandler("401", unauthorized) - } - - if _, ok := ErrorMaps["402"]; !ok { - Errorhandler("402", paymentRequired) - } - - if _, ok := ErrorMaps["403"]; !ok { - Errorhandler("403", forbidden) - } - - if _, ok := ErrorMaps["404"]; !ok { - Errorhandler("404", notFound) - } - - if _, ok := ErrorMaps["405"]; !ok { - Errorhandler("405", methodNotAllowed) - } - - if _, ok := ErrorMaps["500"]; !ok { - Errorhandler("500", internalServerError) - } - if _, ok := ErrorMaps["501"]; !ok { - Errorhandler("501", notImplemented) - } - if _, ok := ErrorMaps["502"]; !ok { - Errorhandler("502", badGateway) - } - - if _, ok := ErrorMaps["503"]; !ok { - Errorhandler("503", serviceUnavailable) - } - - if _, ok := ErrorMaps["504"]; !ok { - Errorhandler("504", gatewayTimeout) - } -} - // ErrorHandler registers http.HandlerFunc to each http err code string. // usage: // beego.ErrorHandler("404",NotFound) diff --git a/hooks.go b/hooks.go new file mode 100644 index 00000000..ded0d794 --- /dev/null +++ b/hooks.go @@ -0,0 +1,100 @@ +package beego + +import ( + "mime" + "path/filepath" + "strconv" + + "github.com/astaxie/beego/session" +) + +// +func registerMime() error { + for k, v := range mimemaps { + mime.AddExtensionType(k, v) + } + return nil +} + +// register default error http handlers, 404,401,403,500 and 503. +func registerDefaultErrorHandler() error { + if _, ok := ErrorMaps["401"]; !ok { + Errorhandler("401", unauthorized) + } + + if _, ok := ErrorMaps["402"]; !ok { + Errorhandler("402", paymentRequired) + } + + if _, ok := ErrorMaps["403"]; !ok { + Errorhandler("403", forbidden) + } + + if _, ok := ErrorMaps["404"]; !ok { + Errorhandler("404", notFound) + } + + if _, ok := ErrorMaps["405"]; !ok { + Errorhandler("405", methodNotAllowed) + } + + if _, ok := ErrorMaps["500"]; !ok { + Errorhandler("500", internalServerError) + } + if _, ok := ErrorMaps["501"]; !ok { + Errorhandler("501", notImplemented) + } + if _, ok := ErrorMaps["502"]; !ok { + Errorhandler("502", badGateway) + } + + if _, ok := ErrorMaps["503"]; !ok { + Errorhandler("503", serviceUnavailable) + } + + if _, ok := ErrorMaps["504"]; !ok { + Errorhandler("504", gatewayTimeout) + } + return nil +} + +func registerSession() error { + if SessionOn { + var err error + sessionConfig := AppConfig.String("sessionConfig") + if sessionConfig == "" { + sessionConfig = `{"cookieName":"` + SessionName + `",` + + `"gclifetime":` + strconv.FormatInt(SessionGCMaxLifetime, 10) + `,` + + `"providerConfig":"` + filepath.ToSlash(SessionSavePath) + `",` + + `"secure":` + strconv.FormatBool(EnableHttpTLS) + `,` + + `"enableSetCookie":` + strconv.FormatBool(SessionAutoSetCookie) + `,` + + `"domain":"` + SessionDomain + `",` + + `"cookieLifeTime":` + strconv.Itoa(SessionCookieLifeTime) + `}` + } + GlobalSessions, err = session.NewManager(SessionProvider, + sessionConfig) + if err != nil { + return err + } + go GlobalSessions.GC() + } + return nil +} + +func registerTemplate() error { + if AutoRender { + err := BuildTemplate(ViewsPath) + if err != nil && RunMode == "dev" { + Warn(err) + } + } + return nil +} + +func registerDocs() error { + if EnableDocs { + Get("/docs", serverDocs) + Get("/docs/*", serverDocs) + } + return nil +} diff --git a/mime.go b/mime.go index 20246c21..0034976e 100644 --- a/mime.go +++ b/mime.go @@ -14,10 +14,6 @@ package beego -import ( - "mime" -) - var mimemaps map[string]string = map[string]string{ ".3dm": "x-world/x-3dmf", ".3dmf": "x-world/x-3dmf", @@ -558,10 +554,3 @@ var mimemaps map[string]string = map[string]string{ ".oex": "application/x-opera-extension", ".mustache": "text/html", } - -func initMime() error { - for k, v := range mimemaps { - mime.AddExtensionType(k, v) - } - return nil -}