Beego/beego.go

162 lines
4.0 KiB
Go
Raw Normal View History

2014-08-18 08:41:43 +00:00
// Copyright 2014 beego Author. All Rights Reserved.
2014-07-03 15:40:21 +00:00
//
2014-08-18 08:41:43 +00:00
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
2014-07-03 15:40:21 +00:00
//
2014-08-18 08:41:43 +00:00
// http://www.apache.org/licenses/LICENSE-2.0
2014-07-03 15:40:21 +00:00
//
2014-08-18 08:41:43 +00:00
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
2012-12-17 05:53:03 +00:00
package beego
import (
"os"
2013-12-20 03:21:48 +00:00
"path/filepath"
2014-01-05 07:21:50 +00:00
"strconv"
2013-10-28 15:30:16 +00:00
"strings"
2013-12-03 11:26:51 +00:00
"github.com/astaxie/beego/session"
2012-12-17 05:53:03 +00:00
)
2013-12-20 11:36:54 +00:00
// beego web framework version.
2015-06-15 15:49:13 +00:00
const VERSION = "1.5.0"
2013-03-13 16:14:09 +00:00
2015-09-06 15:00:42 +00:00
//hook function to run
type hookfunc func() error
2015-09-06 15:00:42 +00:00
var (
hooks = make([]hookfunc, 0) //hook function slice to store the hookfunc
)
// SetViewsPath sets view directory path in beego application.
2013-04-14 15:20:38 +00:00
func SetViewsPath(path string) *App {
ViewsPath = path
2013-04-14 15:20:38 +00:00
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".
2013-04-14 15:20:38 +00:00
func SetStaticPath(url string, path string) *App {
2013-10-28 15:30:16 +00:00
if !strings.HasPrefix(url, "/") {
url = "/" + url
}
2014-04-07 06:20:30 +00:00
url = strings.TrimRight(url, "/")
2013-04-14 15:20:38 +00:00
StaticDir[url] = path
return BeeApp
}
2013-12-20 11:36:54 +00:00
// DelStaticPath removes the static folder setting in this url pattern in beego application.
func DelStaticPath(url string) *App {
2014-09-20 10:56:46 +00:00
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) {
hooks = append(hooks, hf)
}
2013-12-20 11:36:54 +00:00
// Run beego application.
// beego.Run() default run on HttpPort
// beego.Run(":8089")
// beego.Run("127.0.0.1:8089")
func Run(params ...string) {
initBeforeHttpRun()
2015-09-06 15:00:42 +00:00
if len(params) > 0 && params[0] != "" {
strs := strings.Split(params[0], ":")
if len(strs) > 0 && strs[0] != "" {
HttpAddr = strs[0]
}
if len(strs) > 1 && strs[1] != "" {
HttpPort, _ = strconv.Atoi(strs[1])
}
}
if EnableAdmin {
2014-04-05 17:02:10 +00:00
go beeAdminApp.Run()
}
BeeApp.Run()
}
func initBeforeHttpRun() {
2013-12-04 15:53:36 +00:00
// if AppConfigPath not In the conf/app.conf reParse config
2013-12-20 03:21:48 +00:00
if AppConfigPath != filepath.Join(AppPath, "conf", "app.conf") {
2013-12-04 09:03:49 +00:00
err := ParseConfig()
2014-04-04 01:49:55 +00:00
if err != nil && AppConfigPath != filepath.Join(workPath, "conf", "app.conf") {
2013-12-04 15:53:36 +00:00
// configuration is critical to app, panic here if parse failed
panic(err)
2013-12-04 09:03:49 +00:00
}
}
2013-09-09 16:00:11 +00:00
2014-10-20 10:21:17 +00:00
//init mime
AddAPPStartHook(initMime)
// do hooks function
for _, hk := range hooks {
err := hk()
if err != nil {
panic(err)
}
}
2013-01-01 15:11:15 +00:00
if SessionOn {
var err error
2014-01-05 06:59:39 +00:00
sessionConfig := AppConfig.String("sessionConfig")
if sessionConfig == "" {
2014-01-09 13:37:50 +00:00
sessionConfig = `{"cookieName":"` + SessionName + `",` +
2014-01-05 07:21:50 +00:00
`"gclifetime":` + strconv.FormatInt(SessionGCMaxLifetime, 10) + `,` +
2014-10-09 10:47:22 +00:00
`"providerConfig":"` + filepath.ToSlash(SessionSavePath) + `",` +
2014-05-20 07:30:17 +00:00
`"secure":` + strconv.FormatBool(EnableHttpTLS) + `,` +
2014-01-05 07:21:50 +00:00
`"enableSetCookie":` + strconv.FormatBool(SessionAutoSetCookie) + `,` +
2014-08-05 00:55:46 +00:00
`"domain":"` + SessionDomain + `",` +
2014-01-09 13:37:50 +00:00
`"cookieLifeTime":` + strconv.Itoa(SessionCookieLifeTime) + `}`
2014-01-05 06:59:39 +00:00
}
2014-01-10 05:31:08 +00:00
GlobalSessions, err = session.NewManager(SessionProvider,
2014-01-05 06:59:39 +00:00
sessionConfig)
2014-01-09 13:37:50 +00:00
if err != nil {
panic(err)
}
2013-01-01 15:11:15 +00:00
go GlobalSessions.GC()
}
2015-09-06 15:00:42 +00:00
if AutoRender {
err := BuildTemplate(ViewsPath)
2015-09-06 15:00:42 +00:00
if err != nil && RunMode == "dev" {
Warn(err)
}
2013-03-21 13:55:54 +00:00
}
2013-09-11 09:00:39 +00:00
2015-02-26 15:34:43 +00:00
registerDefaultErrorHandler()
2014-06-10 17:11:32 +00:00
2014-06-16 08:05:15 +00:00
if EnableDocs {
Get("/docs", serverDocs)
2014-06-16 08:05:15 +00:00
Get("/docs/*", serverDocs)
}
}
2013-09-11 09:00:39 +00:00
// this function is for test package init
func TestBeegoInit(apppath string) {
AppPath = apppath
2015-06-14 10:10:10 +00:00
os.Setenv("BEEGO_RUNMODE", "test")
AppConfigPath = filepath.Join(AppPath, "conf", "app.conf")
err := ParseConfig()
if err != nil && !os.IsNotExist(err) {
// for init if doesn't have app.conf will not panic
Info(err)
}
os.Chdir(AppPath)
initBeforeHttpRun()
2012-12-17 14:15:21 +00:00
}