311 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			311 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package beego
 | |
| 
 | |
| import (
 | |
| 	"html/template"
 | |
| 	"os"
 | |
| 	"path"
 | |
| 	"runtime"
 | |
| 	"strconv"
 | |
| 	"strings"
 | |
| 
 | |
| 	"github.com/astaxie/beego/config"
 | |
| 	"github.com/astaxie/beego/session"
 | |
| )
 | |
| 
 | |
| var (
 | |
| 	BeeApp        *App
 | |
| 	AppName       string
 | |
| 	AppPath       string
 | |
| 	AppConfigPath string
 | |
| 	StaticDir     map[string]string
 | |
| 	TemplateCache map[string]*template.Template
 | |
| 	StaticExtensionsToGzip []string //Files which should also be compressed with gzip (.js, .css, etc)
 | |
| 	HttpAddr      string
 | |
| 	HttpPort      int
 | |
| 	HttpTLS       bool
 | |
| 	HttpCertFile  string
 | |
| 	HttpKeyFile   string
 | |
| 	RecoverPanic  bool
 | |
| 	AutoRender    bool
 | |
| 	ViewsPath     string
 | |
| 	RunMode       string //"dev" or "prod"
 | |
| 	AppConfig     config.ConfigContainer
 | |
| 	//related to session
 | |
| 	GlobalSessions        *session.Manager //GlobalSessions
 | |
| 	SessionOn             bool             // whether auto start session,default is false
 | |
| 	SessionProvider       string           // default session provider  memory mysql redis
 | |
| 	SessionName           string           // sessionName cookie's name
 | |
| 	SessionGCMaxLifetime  int64            // session's gc maxlifetime
 | |
| 	SessionSavePath       string           // session savepath if use mysql/redis/file this set to the connectinfo
 | |
| 	SessionHashFunc       string
 | |
| 	SessionHashKey        string
 | |
| 	SessionCookieLifeTime int
 | |
| 	UseFcgi               bool
 | |
| 	MaxMemory             int64
 | |
| 	EnableGzip            bool   // enable gzip
 | |
| 	DirectoryIndex        bool   //enable DirectoryIndex default is false
 | |
| 	EnableHotUpdate       bool   //enable HotUpdate default is false
 | |
| 	HttpServerTimeOut     int64  //set httpserver timeout
 | |
| 	ErrorsShow            bool   //set weather show errors
 | |
| 	XSRFKEY               string //set XSRF
 | |
| 	EnableXSRF            bool
 | |
| 	XSRFExpire            int
 | |
| 	CopyRequestBody       bool //When in raw application, You want to the reqeustbody
 | |
| 	TemplateLeft          string
 | |
| 	TemplateRight         string
 | |
| 	BeegoServerName       string
 | |
| 	EnableAdmin           bool   //enable admin module to log api time
 | |
| 	AdminHttpAddr         string //admin module http addr
 | |
| 	AdminHttpPort         int
 | |
| )
 | |
| 
 | |
| func init() {
 | |
| 	// create beeapp
 | |
| 	BeeApp = NewApp()
 | |
| 
 | |
| 	// initialize default configurations
 | |
| 	os.Chdir(path.Dir(os.Args[0]))
 | |
| 	AppPath = path.Dir(os.Args[0])
 | |
| 
 | |
| 	StaticDir = make(map[string]string)
 | |
| 	StaticDir["/static"] = "static"
 | |
| 	
 | |
| 	StaticExtensionsToGzip = []string{".css", ".js"}
 | |
| 
 | |
| 	TemplateCache = make(map[string]*template.Template)
 | |
| 
 | |
| 	// set this to 0.0.0.0 to make this app available to externally
 | |
| 	HttpAddr = ""
 | |
| 	HttpPort = 8080
 | |
| 
 | |
| 	AppName = "beego"
 | |
| 
 | |
| 	RunMode = "dev" //default runmod
 | |
| 
 | |
| 	AutoRender = true
 | |
| 
 | |
| 	RecoverPanic = true
 | |
| 
 | |
| 	ViewsPath = "views"
 | |
| 
 | |
| 	SessionOn = false
 | |
| 	SessionProvider = "memory"
 | |
| 	SessionName = "beegosessionID"
 | |
| 	SessionGCMaxLifetime = 3600
 | |
| 	SessionSavePath = ""
 | |
| 	SessionHashFunc = "sha1"
 | |
| 	SessionHashKey = "beegoserversessionkey"
 | |
| 	SessionCookieLifeTime = 0 //set cookie default is the brower life
 | |
| 
 | |
| 	UseFcgi = false
 | |
| 
 | |
| 	MaxMemory = 1 << 26 //64MB
 | |
| 
 | |
| 	EnableGzip = false
 | |
| 
 | |
| 	AppConfigPath = path.Join(AppPath, "conf", "app.conf")
 | |
| 
 | |
| 	HttpServerTimeOut = 0
 | |
| 
 | |
| 	ErrorsShow = true
 | |
| 
 | |
| 	XSRFKEY = "beegoxsrf"
 | |
| 	XSRFExpire = 0
 | |
| 
 | |
| 	TemplateLeft = "{{"
 | |
| 	TemplateRight = "}}"
 | |
| 
 | |
| 	BeegoServerName = "beegoServer"
 | |
| 
 | |
| 	EnableAdmin = true
 | |
| 	AdminHttpAddr = "127.0.0.1"
 | |
| 	AdminHttpPort = 8088
 | |
| 
 | |
| 	runtime.GOMAXPROCS(runtime.NumCPU())
 | |
| 
 | |
| 	err := ParseConfig()
 | |
| 	if err != nil && !os.IsNotExist(err) {
 | |
| 		// for init if doesn't have app.conf will not panic
 | |
| 		Info(err)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| //parse config now only support ini, next will support json
 | |
| func ParseConfig() (err error) {
 | |
| 	AppConfig, err = config.NewConfig("ini", AppConfigPath)
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	} else {
 | |
| 		HttpAddr = AppConfig.String("HttpAddr")
 | |
| 
 | |
| 		if v, err := AppConfig.Int("HttpPort"); err == nil {
 | |
| 			HttpPort = v
 | |
| 		}
 | |
| 
 | |
| 		if maxmemory, err := AppConfig.Int64("MaxMemory"); err == nil {
 | |
| 			MaxMemory = maxmemory
 | |
| 		}
 | |
| 
 | |
| 		if appname := AppConfig.String("AppName"); appname != "" {
 | |
| 			AppName = appname
 | |
| 		}
 | |
| 
 | |
| 		if runmode := AppConfig.String("RunMode"); runmode != "" {
 | |
| 			RunMode = runmode
 | |
| 		}
 | |
| 
 | |
| 		if autorender, err := AppConfig.Bool("AutoRender"); err == nil {
 | |
| 			AutoRender = autorender
 | |
| 		}
 | |
| 
 | |
| 		if autorecover, err := AppConfig.Bool("RecoverPanic"); err == nil {
 | |
| 			RecoverPanic = autorecover
 | |
| 		}
 | |
| 
 | |
| 		if views := AppConfig.String("ViewsPath"); views != "" {
 | |
| 			ViewsPath = views
 | |
| 		}
 | |
| 
 | |
| 		if sessionon, err := AppConfig.Bool("SessionOn"); err == nil {
 | |
| 			SessionOn = sessionon
 | |
| 		}
 | |
| 
 | |
| 		if sessProvider := AppConfig.String("SessionProvider"); sessProvider != "" {
 | |
| 			SessionProvider = sessProvider
 | |
| 		}
 | |
| 
 | |
| 		if sessName := AppConfig.String("SessionName"); sessName != "" {
 | |
| 			SessionName = sessName
 | |
| 		}
 | |
| 
 | |
| 		if sesssavepath := AppConfig.String("SessionSavePath"); sesssavepath != "" {
 | |
| 			SessionSavePath = sesssavepath
 | |
| 		}
 | |
| 
 | |
| 		if sesshashfunc := AppConfig.String("SessionHashFunc"); sesshashfunc != "" {
 | |
| 			SessionHashFunc = sesshashfunc
 | |
| 		}
 | |
| 
 | |
| 		if sesshashkey := AppConfig.String("SessionHashKey"); sesshashkey != "" {
 | |
| 			SessionHashKey = sesshashkey
 | |
| 		}
 | |
| 
 | |
| 		if sessMaxLifeTime, err := AppConfig.Int("SessionGCMaxLifetime"); err == nil && sessMaxLifeTime != 0 {
 | |
| 			int64val, _ := strconv.ParseInt(strconv.Itoa(sessMaxLifeTime), 10, 64)
 | |
| 			SessionGCMaxLifetime = int64val
 | |
| 		}
 | |
| 
 | |
| 		if sesscookielifetime, err := AppConfig.Int("SessionCookieLifeTime"); err == nil && sesscookielifetime != 0 {
 | |
| 			SessionCookieLifeTime = sesscookielifetime
 | |
| 		}
 | |
| 
 | |
| 		if usefcgi, err := AppConfig.Bool("UseFcgi"); err == nil {
 | |
| 			UseFcgi = usefcgi
 | |
| 		}
 | |
| 
 | |
| 		if enablegzip, err := AppConfig.Bool("EnableGzip"); err == nil {
 | |
| 			EnableGzip = enablegzip
 | |
| 		}
 | |
| 
 | |
| 		if directoryindex, err := AppConfig.Bool("DirectoryIndex"); err == nil {
 | |
| 			DirectoryIndex = directoryindex
 | |
| 		}
 | |
| 
 | |
| 		if hotupdate, err := AppConfig.Bool("HotUpdate"); err == nil {
 | |
| 			EnableHotUpdate = hotupdate
 | |
| 		}
 | |
| 
 | |
| 		if timeout, err := AppConfig.Int64("HttpServerTimeOut"); err == nil {
 | |
| 			HttpServerTimeOut = timeout
 | |
| 		}
 | |
| 
 | |
| 		if errorsshow, err := AppConfig.Bool("ErrorsShow"); err == nil {
 | |
| 			ErrorsShow = errorsshow
 | |
| 		}
 | |
| 
 | |
| 		if copyrequestbody, err := AppConfig.Bool("CopyRequestBody"); err == nil {
 | |
| 			CopyRequestBody = copyrequestbody
 | |
| 		}
 | |
| 
 | |
| 		if xsrfkey := AppConfig.String("XSRFKEY"); xsrfkey != "" {
 | |
| 			XSRFKEY = xsrfkey
 | |
| 		}
 | |
| 
 | |
| 		if enablexsrf, err := AppConfig.Bool("EnableXSRF"); err == nil {
 | |
| 			EnableXSRF = enablexsrf
 | |
| 		}
 | |
| 
 | |
| 		if expire, err := AppConfig.Int("XSRFExpire"); err == nil {
 | |
| 			XSRFExpire = expire
 | |
| 		}
 | |
| 
 | |
| 		if tplleft := AppConfig.String("TemplateLeft"); tplleft != "" {
 | |
| 			TemplateLeft = tplleft
 | |
| 		}
 | |
| 
 | |
| 		if tplright := AppConfig.String("TemplateRight"); tplright != "" {
 | |
| 			TemplateRight = tplright
 | |
| 		}
 | |
| 
 | |
| 		if httptls, err := AppConfig.Bool("HttpTLS"); err == nil {
 | |
| 			HttpTLS = httptls
 | |
| 		}
 | |
| 
 | |
| 		if certfile := AppConfig.String("HttpCertFile"); certfile != "" {
 | |
| 			HttpCertFile = certfile
 | |
| 		}
 | |
| 
 | |
| 		if keyfile := AppConfig.String("HttpKeyFile"); keyfile != "" {
 | |
| 			HttpKeyFile = keyfile
 | |
| 		}
 | |
| 
 | |
| 		if serverName := AppConfig.String("BeegoServerName"); serverName != "" {
 | |
| 			BeegoServerName = serverName
 | |
| 		}
 | |
| 
 | |
| 		if sd := AppConfig.String("StaticDir"); sd != "" {
 | |
| 			for k := range StaticDir {
 | |
| 				delete(StaticDir, k)
 | |
| 			}
 | |
| 			sds := strings.Fields(sd)
 | |
| 			for _, v := range sds {
 | |
| 				if url2fsmap := strings.SplitN(v, ":", 2); len(url2fsmap) == 2 {
 | |
| 					StaticDir["/"+url2fsmap[0]] = url2fsmap[1]
 | |
| 				} else {
 | |
| 					StaticDir["/"+url2fsmap[0]] = url2fsmap[0]
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		
 | |
| 		if sgz := AppConfig.String("StaticExtensionsToGzip"); sgz != "" {
 | |
| 			extensions := strings.Split(sgz, ",")
 | |
| 			if len(extensions) > 0 {
 | |
| 				StaticExtensionsToGzip = []string{}
 | |
| 				for _, ext := range extensions {
 | |
| 					if len(ext) == 0 {
 | |
| 						continue
 | |
| 					}
 | |
| 					extWithDot := ext
 | |
| 					if extWithDot[:1] != "." {
 | |
| 						extWithDot = "." + extWithDot
 | |
| 					}
 | |
| 					StaticExtensionsToGzip = append(StaticExtensionsToGzip, extWithDot)
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		if enableadmin, err := AppConfig.Bool("EnableAdmin"); err == nil {
 | |
| 			EnableAdmin = enableadmin
 | |
| 		}
 | |
| 
 | |
| 		if adminhttpaddr := AppConfig.String("AdminHttpAddr"); adminhttpaddr != "" {
 | |
| 			AdminHttpAddr = adminhttpaddr
 | |
| 		}
 | |
| 
 | |
| 		if adminhttpport, err := AppConfig.Int("AdminHttpPort"); err == nil {
 | |
| 			AdminHttpPort = adminhttpport
 | |
| 		}
 | |
| 	}
 | |
| 	return nil
 | |
| }
 |