config.go 8.9 KB
Newer Older
1 2 3 4 5
package beego

import (
	"html/template"
	"os"
6
	"path/filepath"
7 8 9
	"runtime"
	"strconv"
	"strings"
P
Pengfei Xue 已提交
10 11

	"github.com/astaxie/beego/config"
12
	"github.com/astaxie/beego/logs"
P
Pengfei Xue 已提交
13
	"github.com/astaxie/beego/session"
14 15 16
)

var (
傅小黑 已提交
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
	BeeApp                 *App // beego application
	AppName                string
	AppPath                string
	AppConfigPath          string
	StaticDir              map[string]string
	TemplateCache          map[string]*template.Template // template caching map
	StaticExtensionsToGzip []string                      // files with should be compressed with gzip (.js,.css,etc)
	HttpAddr               string
	HttpPort               int
	HttpTLS                bool
	HttpCertFile           string
	HttpKeyFile            string
	RecoverPanic           bool // flag of auto recover panic
	AutoRender             bool // flag of render template automatically
	ViewsPath              string
	RunMode                string // run mode, "dev" or "prod"
	AppConfig              config.ConfigContainer
	GlobalSessions         *session.Manager // global session mananger
	SessionOn              bool             // flag of starting session auto. default is false.
	SessionProvider        string           // default session provider, memory, mysql , redis ,etc.
	SessionName            string           // the cookie name when saving session id into cookie.
	SessionGCMaxLifetime   int64            // session gc time for auto cleaning expired session.
	SessionSavePath        string           // if use mysql/redis/file provider, define save path to connection info.
	SessionHashFunc        string           // session hash generation func.
	SessionHashKey         string           // session hash salt string.
	SessionCookieLifeTime  int              // the life time of session id in cookie.
A
astaxie 已提交
43
	SessionAutoSetCookie   bool             // auto setcookie
傅小黑 已提交
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
	UseFcgi                bool
	MaxMemory              int64
	EnableGzip             bool // flag of enable gzip
	DirectoryIndex         bool // flag of display directory index. default is false.
	EnableHotUpdate        bool // flag of hot update checking by app self. default is false.
	HttpServerTimeOut      int64
	ErrorsShow             bool   // flag of show errors in page. if true, show error and trace info in page rendered with error template.
	XSRFKEY                string // xsrf hash salt string.
	EnableXSRF             bool   // flag of enable xsrf.
	XSRFExpire             int    // the expiry of xsrf value.
	CopyRequestBody        bool   // flag of copy raw request body in context.
	TemplateLeft           string
	TemplateRight          string
	BeegoServerName        string // beego server name exported in response header.
	EnableAdmin            bool   // flag of enable admin module to log every request info.
	AdminHttpAddr          string // http server configurations for admin module.
	AdminHttpPort          int
61 62
)

A
astaxie 已提交
63
func init() {
64
	// create beego application
A
astaxie 已提交
65
	BeeApp = NewApp()
P
Pengfei Xue 已提交
66 67

	// initialize default configurations
68 69
	AppPath, _ = filepath.Abs(filepath.Dir(os.Args[0]))
	os.Chdir(AppPath)
P
Pengfei Xue 已提交
70

71
	StaticDir = make(map[string]string)
P
Pengfei Xue 已提交
72
	StaticDir["/static"] = "static"
73

F
Francois 已提交
74
	StaticExtensionsToGzip = []string{".css", ".js"}
P
Pengfei Xue 已提交
75

A
typo  
astaxie 已提交
76
	TemplateCache = make(map[string]*template.Template)
P
Pengfei Xue 已提交
77 78

	// set this to 0.0.0.0 to make this app available to externally
A
astaxie 已提交
79
	HttpAddr = ""
80
	HttpPort = 8080
P
Pengfei Xue 已提交
81

82
	AppName = "beego"
P
Pengfei Xue 已提交
83

84
	RunMode = "dev" //default runmod
P
Pengfei Xue 已提交
85

86
	AutoRender = true
P
Pengfei Xue 已提交
87

88
	RecoverPanic = true
P
Pengfei Xue 已提交
89

90
	ViewsPath = "views"
P
Pengfei Xue 已提交
91

92 93 94 95 96 97 98
	SessionOn = false
	SessionProvider = "memory"
	SessionName = "beegosessionID"
	SessionGCMaxLifetime = 3600
	SessionSavePath = ""
	SessionHashFunc = "sha1"
	SessionHashKey = "beegoserversessionkey"
A
astaxie 已提交
99
	SessionCookieLifeTime = 0 //set cookie default is the brower life
A
astaxie 已提交
100
	SessionAutoSetCookie = true
P
Pengfei Xue 已提交
101

102
	UseFcgi = false
P
Pengfei Xue 已提交
103

傅小黑 已提交
104
	MaxMemory = 1 << 26 //64MB
P
Pengfei Xue 已提交
105

106
	EnableGzip = false
P
Pengfei Xue 已提交
107

108
	AppConfigPath = filepath.Join(AppPath, "conf", "app.conf")
P
Pengfei Xue 已提交
109

110
	HttpServerTimeOut = 0
P
Pengfei Xue 已提交
111

112
	ErrorsShow = true
P
Pengfei Xue 已提交
113

114 115
	XSRFKEY = "beegoxsrf"
	XSRFExpire = 0
P
Pengfei Xue 已提交
116

117 118
	TemplateLeft = "{{"
	TemplateRight = "}}"
P
Pengfei Xue 已提交
119

120
	BeegoServerName = "beegoServer"
P
Pengfei Xue 已提交
121

122
	EnableAdmin = false
P
Pengfei Xue 已提交
123
	AdminHttpAddr = "127.0.0.1"
124
	AdminHttpPort = 8088
P
Pengfei Xue 已提交
125

126
	runtime.GOMAXPROCS(runtime.NumCPU())
P
Pengfei Xue 已提交
127

128 129 130 131
	// init BeeLogger
	BeeLogger = logs.NewLogger(10000)
	BeeLogger.SetLogger("console", "")

P
Pengfei Xue 已提交
132 133
	err := ParseConfig()
	if err != nil && !os.IsNotExist(err) {
134 135
		// for init if doesn't have app.conf will not panic
		Info(err)
P
Pengfei Xue 已提交
136
	}
137 138
}

139 140
// ParseConfig parsed default config file.
// now only support ini, next will support json.
141 142 143 144 145
func ParseConfig() (err error) {
	AppConfig, err = config.NewConfig("ini", AppConfigPath)
	if err != nil {
		return err
	} else {
146
		HttpAddr = AppConfig.String("HttpAddr")
147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260

		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
		}

261
		if certfile := AppConfig.String("HttpCertFile"); certfile != "" {
262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285
			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]
				}
			}
		}
286

F
Francois 已提交
287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302
		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)
				}
			}
		}
303 304 305 306 307 308 309 310 311 312 313 314 315 316 317

		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
}