Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
B
beego
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
go
beego
Commits
70f3f6b8
Commit
70f3f6b8
authored
Apr 20, 2016
by
astaxie
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1883 from JessonChan/config_improve
Config improve
parents
86e18bf6
5ac254bf
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
279 additions
and
124 deletions
+279
-124
admin.go
admin.go
+25
-49
admin_test.go
admin_test.go
+72
-0
config.go
config.go
+72
-75
config_test.go
config_test.go
+110
-0
No files found.
admin.go
View file @
70f3f6b8
...
...
@@ -23,6 +23,8 @@ import (
"text/template"
"time"
"reflect"
"github.com/astaxie/beego/grace"
"github.com/astaxie/beego/logs"
"github.com/astaxie/beego/toolbox"
...
...
@@ -91,57 +93,9 @@ func listConf(rw http.ResponseWriter, r *http.Request) {
switch
command
{
case
"conf"
:
m
:=
make
(
map
[
string
]
interface
{})
list
(
"BConfig"
,
BConfig
,
m
)
m
[
"AppConfigPath"
]
=
appConfigPath
m
[
"AppConfigProvider"
]
=
appConfigProvider
m
[
"BConfig.AppName"
]
=
BConfig
.
AppName
m
[
"BConfig.RunMode"
]
=
BConfig
.
RunMode
m
[
"BConfig.RouterCaseSensitive"
]
=
BConfig
.
RouterCaseSensitive
m
[
"BConfig.ServerName"
]
=
BConfig
.
ServerName
m
[
"BConfig.RecoverPanic"
]
=
BConfig
.
RecoverPanic
m
[
"BConfig.CopyRequestBody"
]
=
BConfig
.
CopyRequestBody
m
[
"BConfig.EnableGzip"
]
=
BConfig
.
EnableGzip
m
[
"BConfig.MaxMemory"
]
=
BConfig
.
MaxMemory
m
[
"BConfig.EnableErrorsShow"
]
=
BConfig
.
EnableErrorsShow
m
[
"BConfig.Listen.Graceful"
]
=
BConfig
.
Listen
.
Graceful
m
[
"BConfig.Listen.ServerTimeOut"
]
=
BConfig
.
Listen
.
ServerTimeOut
m
[
"BConfig.Listen.ListenTCP4"
]
=
BConfig
.
Listen
.
ListenTCP4
m
[
"BConfig.Listen.EnableHTTP"
]
=
BConfig
.
Listen
.
EnableHTTP
m
[
"BConfig.Listen.HTTPAddr"
]
=
BConfig
.
Listen
.
HTTPAddr
m
[
"BConfig.Listen.HTTPPort"
]
=
BConfig
.
Listen
.
HTTPPort
m
[
"BConfig.Listen.EnableHTTPS"
]
=
BConfig
.
Listen
.
EnableHTTPS
m
[
"BConfig.Listen.HTTPSAddr"
]
=
BConfig
.
Listen
.
HTTPSAddr
m
[
"BConfig.Listen.HTTPSPort"
]
=
BConfig
.
Listen
.
HTTPSPort
m
[
"BConfig.Listen.HTTPSCertFile"
]
=
BConfig
.
Listen
.
HTTPSCertFile
m
[
"BConfig.Listen.HTTPSKeyFile"
]
=
BConfig
.
Listen
.
HTTPSKeyFile
m
[
"BConfig.Listen.EnableAdmin"
]
=
BConfig
.
Listen
.
EnableAdmin
m
[
"BConfig.Listen.AdminAddr"
]
=
BConfig
.
Listen
.
AdminAddr
m
[
"BConfig.Listen.AdminPort"
]
=
BConfig
.
Listen
.
AdminPort
m
[
"BConfig.Listen.EnableFcgi"
]
=
BConfig
.
Listen
.
EnableFcgi
m
[
"BConfig.Listen.EnableStdIo"
]
=
BConfig
.
Listen
.
EnableStdIo
m
[
"BConfig.WebConfig.AutoRender"
]
=
BConfig
.
WebConfig
.
AutoRender
m
[
"BConfig.WebConfig.EnableDocs"
]
=
BConfig
.
WebConfig
.
EnableDocs
m
[
"BConfig.WebConfig.FlashName"
]
=
BConfig
.
WebConfig
.
FlashName
m
[
"BConfig.WebConfig.FlashSeparator"
]
=
BConfig
.
WebConfig
.
FlashSeparator
m
[
"BConfig.WebConfig.DirectoryIndex"
]
=
BConfig
.
WebConfig
.
DirectoryIndex
m
[
"BConfig.WebConfig.StaticDir"
]
=
BConfig
.
WebConfig
.
StaticDir
m
[
"BConfig.WebConfig.StaticExtensionsToGzip"
]
=
BConfig
.
WebConfig
.
StaticExtensionsToGzip
m
[
"BConfig.WebConfig.TemplateLeft"
]
=
BConfig
.
WebConfig
.
TemplateLeft
m
[
"BConfig.WebConfig.TemplateRight"
]
=
BConfig
.
WebConfig
.
TemplateRight
m
[
"BConfig.WebConfig.ViewsPath"
]
=
BConfig
.
WebConfig
.
ViewsPath
m
[
"BConfig.WebConfig.EnableXSRF"
]
=
BConfig
.
WebConfig
.
EnableXSRF
m
[
"BConfig.WebConfig.XSRFKEY"
]
=
BConfig
.
WebConfig
.
XSRFKey
m
[
"BConfig.WebConfig.XSRFExpire"
]
=
BConfig
.
WebConfig
.
XSRFExpire
m
[
"BConfig.WebConfig.Session.SessionOn"
]
=
BConfig
.
WebConfig
.
Session
.
SessionOn
m
[
"BConfig.WebConfig.Session.SessionProvider"
]
=
BConfig
.
WebConfig
.
Session
.
SessionProvider
m
[
"BConfig.WebConfig.Session.SessionName"
]
=
BConfig
.
WebConfig
.
Session
.
SessionName
m
[
"BConfig.WebConfig.Session.SessionGCMaxLifetime"
]
=
BConfig
.
WebConfig
.
Session
.
SessionGCMaxLifetime
m
[
"BConfig.WebConfig.Session.SessionProviderConfig"
]
=
BConfig
.
WebConfig
.
Session
.
SessionProviderConfig
m
[
"BConfig.WebConfig.Session.SessionCookieLifeTime"
]
=
BConfig
.
WebConfig
.
Session
.
SessionCookieLifeTime
m
[
"BConfig.WebConfig.Session.SessionAutoSetCookie"
]
=
BConfig
.
WebConfig
.
Session
.
SessionAutoSetCookie
m
[
"BConfig.WebConfig.Session.SessionDomain"
]
=
BConfig
.
WebConfig
.
Session
.
SessionDomain
m
[
"BConfig.Log.AccessLogs"
]
=
BConfig
.
Log
.
AccessLogs
m
[
"BConfig.Log.FileLineNum"
]
=
BConfig
.
Log
.
FileLineNum
m
[
"BConfig.Log.Outputs"
]
=
BConfig
.
Log
.
Outputs
tmpl
:=
template
.
Must
(
template
.
New
(
"dashboard"
)
.
Parse
(
dashboardTpl
))
tmpl
=
template
.
Must
(
tmpl
.
Parse
(
configTpl
))
tmpl
=
template
.
Must
(
tmpl
.
Parse
(
defaultScriptsTpl
))
...
...
@@ -224,6 +178,28 @@ func listConf(rw http.ResponseWriter, r *http.Request) {
}
}
func
list
(
root
string
,
p
interface
{},
m
map
[
string
]
interface
{})
{
pt
:=
reflect
.
TypeOf
(
p
)
pv
:=
reflect
.
ValueOf
(
p
)
if
pt
.
Kind
()
==
reflect
.
Ptr
{
pt
=
pt
.
Elem
()
pv
=
pv
.
Elem
()
}
for
i
:=
0
;
i
<
pv
.
NumField
();
i
++
{
var
key
string
if
root
==
""
{
key
=
pt
.
Field
(
i
)
.
Name
}
else
{
key
=
root
+
"."
+
pt
.
Field
(
i
)
.
Name
}
if
pv
.
Field
(
i
)
.
Kind
()
==
reflect
.
Struct
{
list
(
key
,
pv
.
Field
(
i
)
.
Interface
(),
m
)
}
else
{
m
[
key
]
=
pv
.
Field
(
i
)
.
Interface
()
}
}
}
func
printTree
(
resultList
*
[][]
string
,
t
*
Tree
)
{
for
_
,
tr
:=
range
t
.
fixrouters
{
printTree
(
resultList
,
tr
)
...
...
admin_test.go
0 → 100644
View file @
70f3f6b8
package
beego
import
(
"testing"
"fmt"
)
func
TestList_01
(
t
*
testing
.
T
)
{
m
:=
make
(
map
[
string
]
interface
{})
list
(
"BConfig"
,
BConfig
,
m
)
t
.
Log
(
m
)
om
:=
oldMap
()
for
k
,
v
:=
range
om
{
if
fmt
.
Sprint
(
m
[
k
])
!=
fmt
.
Sprint
(
v
)
{
t
.
Log
(
k
,
"old-key"
,
v
,
"new-key"
,
m
[
k
])
t
.
FailNow
()
}
}
}
func
oldMap
()
map
[
string
]
interface
{}
{
m
:=
make
(
map
[
string
]
interface
{})
m
[
"BConfig.AppName"
]
=
BConfig
.
AppName
m
[
"BConfig.RunMode"
]
=
BConfig
.
RunMode
m
[
"BConfig.RouterCaseSensitive"
]
=
BConfig
.
RouterCaseSensitive
m
[
"BConfig.ServerName"
]
=
BConfig
.
ServerName
m
[
"BConfig.RecoverPanic"
]
=
BConfig
.
RecoverPanic
m
[
"BConfig.CopyRequestBody"
]
=
BConfig
.
CopyRequestBody
m
[
"BConfig.EnableGzip"
]
=
BConfig
.
EnableGzip
m
[
"BConfig.MaxMemory"
]
=
BConfig
.
MaxMemory
m
[
"BConfig.EnableErrorsShow"
]
=
BConfig
.
EnableErrorsShow
m
[
"BConfig.Listen.Graceful"
]
=
BConfig
.
Listen
.
Graceful
m
[
"BConfig.Listen.ServerTimeOut"
]
=
BConfig
.
Listen
.
ServerTimeOut
m
[
"BConfig.Listen.ListenTCP4"
]
=
BConfig
.
Listen
.
ListenTCP4
m
[
"BConfig.Listen.EnableHTTP"
]
=
BConfig
.
Listen
.
EnableHTTP
m
[
"BConfig.Listen.HTTPAddr"
]
=
BConfig
.
Listen
.
HTTPAddr
m
[
"BConfig.Listen.HTTPPort"
]
=
BConfig
.
Listen
.
HTTPPort
m
[
"BConfig.Listen.EnableHTTPS"
]
=
BConfig
.
Listen
.
EnableHTTPS
m
[
"BConfig.Listen.HTTPSAddr"
]
=
BConfig
.
Listen
.
HTTPSAddr
m
[
"BConfig.Listen.HTTPSPort"
]
=
BConfig
.
Listen
.
HTTPSPort
m
[
"BConfig.Listen.HTTPSCertFile"
]
=
BConfig
.
Listen
.
HTTPSCertFile
m
[
"BConfig.Listen.HTTPSKeyFile"
]
=
BConfig
.
Listen
.
HTTPSKeyFile
m
[
"BConfig.Listen.EnableAdmin"
]
=
BConfig
.
Listen
.
EnableAdmin
m
[
"BConfig.Listen.AdminAddr"
]
=
BConfig
.
Listen
.
AdminAddr
m
[
"BConfig.Listen.AdminPort"
]
=
BConfig
.
Listen
.
AdminPort
m
[
"BConfig.Listen.EnableFcgi"
]
=
BConfig
.
Listen
.
EnableFcgi
m
[
"BConfig.Listen.EnableStdIo"
]
=
BConfig
.
Listen
.
EnableStdIo
m
[
"BConfig.WebConfig.AutoRender"
]
=
BConfig
.
WebConfig
.
AutoRender
m
[
"BConfig.WebConfig.EnableDocs"
]
=
BConfig
.
WebConfig
.
EnableDocs
m
[
"BConfig.WebConfig.FlashName"
]
=
BConfig
.
WebConfig
.
FlashName
m
[
"BConfig.WebConfig.FlashSeparator"
]
=
BConfig
.
WebConfig
.
FlashSeparator
m
[
"BConfig.WebConfig.DirectoryIndex"
]
=
BConfig
.
WebConfig
.
DirectoryIndex
m
[
"BConfig.WebConfig.StaticDir"
]
=
BConfig
.
WebConfig
.
StaticDir
m
[
"BConfig.WebConfig.StaticExtensionsToGzip"
]
=
BConfig
.
WebConfig
.
StaticExtensionsToGzip
m
[
"BConfig.WebConfig.TemplateLeft"
]
=
BConfig
.
WebConfig
.
TemplateLeft
m
[
"BConfig.WebConfig.TemplateRight"
]
=
BConfig
.
WebConfig
.
TemplateRight
m
[
"BConfig.WebConfig.ViewsPath"
]
=
BConfig
.
WebConfig
.
ViewsPath
m
[
"BConfig.WebConfig.EnableXSRF"
]
=
BConfig
.
WebConfig
.
EnableXSRF
m
[
"BConfig.WebConfig.XSRFExpire"
]
=
BConfig
.
WebConfig
.
XSRFExpire
m
[
"BConfig.WebConfig.Session.SessionOn"
]
=
BConfig
.
WebConfig
.
Session
.
SessionOn
m
[
"BConfig.WebConfig.Session.SessionProvider"
]
=
BConfig
.
WebConfig
.
Session
.
SessionProvider
m
[
"BConfig.WebConfig.Session.SessionName"
]
=
BConfig
.
WebConfig
.
Session
.
SessionName
m
[
"BConfig.WebConfig.Session.SessionGCMaxLifetime"
]
=
BConfig
.
WebConfig
.
Session
.
SessionGCMaxLifetime
m
[
"BConfig.WebConfig.Session.SessionProviderConfig"
]
=
BConfig
.
WebConfig
.
Session
.
SessionProviderConfig
m
[
"BConfig.WebConfig.Session.SessionCookieLifeTime"
]
=
BConfig
.
WebConfig
.
Session
.
SessionCookieLifeTime
m
[
"BConfig.WebConfig.Session.SessionAutoSetCookie"
]
=
BConfig
.
WebConfig
.
Session
.
SessionAutoSetCookie
m
[
"BConfig.WebConfig.Session.SessionDomain"
]
=
BConfig
.
WebConfig
.
Session
.
SessionDomain
m
[
"BConfig.Log.AccessLogs"
]
=
BConfig
.
Log
.
AccessLogs
m
[
"BConfig.Log.FileLineNum"
]
=
BConfig
.
Log
.
FileLineNum
m
[
"BConfig.Log.Outputs"
]
=
BConfig
.
Log
.
Outputs
return
m
}
config.go
View file @
70f3f6b8
...
...
@@ -18,6 +18,7 @@ import (
"fmt"
"os"
"path/filepath"
"reflect"
"strings"
"github.com/astaxie/beego/config"
...
...
@@ -116,7 +117,30 @@ var (
)
func
init
()
{
BConfig
=
&
Config
{
BConfig
=
newBConfig
()
var
err
error
if
AppPath
,
err
=
filepath
.
Abs
(
filepath
.
Dir
(
os
.
Args
[
0
]));
err
!=
nil
{
panic
(
err
)
}
workPath
,
err
:=
os
.
Getwd
()
if
err
!=
nil
{
panic
(
err
)
}
appConfigPath
=
filepath
.
Join
(
workPath
,
"conf"
,
"app.conf"
)
if
!
utils
.
FileExists
(
appConfigPath
)
{
appConfigPath
=
filepath
.
Join
(
AppPath
,
"conf"
,
"app.conf"
)
if
!
utils
.
FileExists
(
appConfigPath
)
{
AppConfig
=
&
beegoAppConfig
{
innerConfig
:
config
.
NewFakeConfig
()}
return
}
}
if
err
=
parseConfig
(
appConfigPath
);
err
!=
nil
{
panic
(
err
)
}
}
func
newBConfig
()
*
Config
{
return
&
Config
{
AppName
:
"beego"
,
RunMode
:
DEV
,
RouterCaseSensitive
:
true
,
...
...
@@ -175,25 +199,6 @@ func init() {
Outputs
:
map
[
string
]
string
{
"console"
:
""
},
},
}
var
err
error
if
AppPath
,
err
=
filepath
.
Abs
(
filepath
.
Dir
(
os
.
Args
[
0
]));
err
!=
nil
{
panic
(
err
)
}
workPath
,
err
:=
os
.
Getwd
()
if
err
!=
nil
{
panic
(
err
)
}
appConfigPath
=
filepath
.
Join
(
workPath
,
"conf"
,
"app.conf"
)
if
!
utils
.
FileExists
(
appConfigPath
)
{
appConfigPath
=
filepath
.
Join
(
AppPath
,
"conf"
,
"app.conf"
)
if
!
utils
.
FileExists
(
appConfigPath
)
{
AppConfig
=
&
beegoAppConfig
{
innerConfig
:
config
.
NewFakeConfig
()}
return
}
}
if
err
=
parseConfig
(
appConfigPath
);
err
!=
nil
{
panic
(
err
)
}
}
// now only support ini, next will support json.
...
...
@@ -202,63 +207,23 @@ func parseConfig(appConfigPath string) (err error) {
if
err
!=
nil
{
return
err
}
return
assignConfig
(
AppConfig
)
}
func
assignConfig
(
ac
config
.
Configer
)
error
{
// set the run mode first
if
envRunMode
:=
os
.
Getenv
(
"BEEGO_RUNMODE"
);
envRunMode
!=
""
{
BConfig
.
RunMode
=
envRunMode
}
else
if
runMode
:=
AppConfig
.
String
(
"RunMode"
);
runMode
!=
""
{
}
else
if
runMode
:=
ac
.
String
(
"RunMode"
);
runMode
!=
""
{
BConfig
.
RunMode
=
runMode
}
BConfig
.
AppName
=
AppConfig
.
DefaultString
(
"AppName"
,
BConfig
.
AppName
)
BConfig
.
RecoverPanic
=
AppConfig
.
DefaultBool
(
"RecoverPanic"
,
BConfig
.
RecoverPanic
)
BConfig
.
RouterCaseSensitive
=
AppConfig
.
DefaultBool
(
"RouterCaseSensitive"
,
BConfig
.
RouterCaseSensitive
)
BConfig
.
ServerName
=
AppConfig
.
DefaultString
(
"ServerName"
,
BConfig
.
ServerName
)
BConfig
.
EnableGzip
=
AppConfig
.
DefaultBool
(
"EnableGzip"
,
BConfig
.
EnableGzip
)
BConfig
.
EnableErrorsShow
=
AppConfig
.
DefaultBool
(
"EnableErrorsShow"
,
BConfig
.
EnableErrorsShow
)
BConfig
.
CopyRequestBody
=
AppConfig
.
DefaultBool
(
"CopyRequestBody"
,
BConfig
.
CopyRequestBody
)
BConfig
.
MaxMemory
=
AppConfig
.
DefaultInt64
(
"MaxMemory"
,
BConfig
.
MaxMemory
)
BConfig
.
Listen
.
Graceful
=
AppConfig
.
DefaultBool
(
"Graceful"
,
BConfig
.
Listen
.
Graceful
)
BConfig
.
Listen
.
HTTPAddr
=
AppConfig
.
String
(
"HTTPAddr"
)
BConfig
.
Listen
.
HTTPPort
=
AppConfig
.
DefaultInt
(
"HTTPPort"
,
BConfig
.
Listen
.
HTTPPort
)
BConfig
.
Listen
.
ListenTCP4
=
AppConfig
.
DefaultBool
(
"ListenTCP4"
,
BConfig
.
Listen
.
ListenTCP4
)
BConfig
.
Listen
.
EnableHTTP
=
AppConfig
.
DefaultBool
(
"EnableHTTP"
,
BConfig
.
Listen
.
EnableHTTP
)
BConfig
.
Listen
.
EnableHTTPS
=
AppConfig
.
DefaultBool
(
"EnableHTTPS"
,
BConfig
.
Listen
.
EnableHTTPS
)
BConfig
.
Listen
.
HTTPSAddr
=
AppConfig
.
DefaultString
(
"HTTPSAddr"
,
BConfig
.
Listen
.
HTTPSAddr
)
BConfig
.
Listen
.
HTTPSPort
=
AppConfig
.
DefaultInt
(
"HTTPSPort"
,
BConfig
.
Listen
.
HTTPSPort
)
BConfig
.
Listen
.
HTTPSCertFile
=
AppConfig
.
DefaultString
(
"HTTPSCertFile"
,
BConfig
.
Listen
.
HTTPSCertFile
)
BConfig
.
Listen
.
HTTPSKeyFile
=
AppConfig
.
DefaultString
(
"HTTPSKeyFile"
,
BConfig
.
Listen
.
HTTPSKeyFile
)
BConfig
.
Listen
.
EnableAdmin
=
AppConfig
.
DefaultBool
(
"EnableAdmin"
,
BConfig
.
Listen
.
EnableAdmin
)
BConfig
.
Listen
.
AdminAddr
=
AppConfig
.
DefaultString
(
"AdminAddr"
,
BConfig
.
Listen
.
AdminAddr
)
BConfig
.
Listen
.
AdminPort
=
AppConfig
.
DefaultInt
(
"AdminPort"
,
BConfig
.
Listen
.
AdminPort
)
BConfig
.
Listen
.
EnableFcgi
=
AppConfig
.
DefaultBool
(
"EnableFcgi"
,
BConfig
.
Listen
.
EnableFcgi
)
BConfig
.
Listen
.
EnableStdIo
=
AppConfig
.
DefaultBool
(
"EnableStdIo"
,
BConfig
.
Listen
.
EnableStdIo
)
BConfig
.
Listen
.
ServerTimeOut
=
AppConfig
.
DefaultInt64
(
"ServerTimeOut"
,
BConfig
.
Listen
.
ServerTimeOut
)
BConfig
.
WebConfig
.
AutoRender
=
AppConfig
.
DefaultBool
(
"AutoRender"
,
BConfig
.
WebConfig
.
AutoRender
)
BConfig
.
WebConfig
.
ViewsPath
=
AppConfig
.
DefaultString
(
"ViewsPath"
,
BConfig
.
WebConfig
.
ViewsPath
)
BConfig
.
WebConfig
.
DirectoryIndex
=
AppConfig
.
DefaultBool
(
"DirectoryIndex"
,
BConfig
.
WebConfig
.
DirectoryIndex
)
BConfig
.
WebConfig
.
FlashName
=
AppConfig
.
DefaultString
(
"FlashName"
,
BConfig
.
WebConfig
.
FlashName
)
BConfig
.
WebConfig
.
FlashSeparator
=
AppConfig
.
DefaultString
(
"FlashSeparator"
,
BConfig
.
WebConfig
.
FlashSeparator
)
BConfig
.
WebConfig
.
EnableDocs
=
AppConfig
.
DefaultBool
(
"EnableDocs"
,
BConfig
.
WebConfig
.
EnableDocs
)
BConfig
.
WebConfig
.
XSRFKey
=
AppConfig
.
DefaultString
(
"XSRFKEY"
,
BConfig
.
WebConfig
.
XSRFKey
)
BConfig
.
WebConfig
.
EnableXSRF
=
AppConfig
.
DefaultBool
(
"EnableXSRF"
,
BConfig
.
WebConfig
.
EnableXSRF
)
BConfig
.
WebConfig
.
XSRFExpire
=
AppConfig
.
DefaultInt
(
"XSRFExpire"
,
BConfig
.
WebConfig
.
XSRFExpire
)
BConfig
.
WebConfig
.
TemplateLeft
=
AppConfig
.
DefaultString
(
"TemplateLeft"
,
BConfig
.
WebConfig
.
TemplateLeft
)
BConfig
.
WebConfig
.
TemplateRight
=
AppConfig
.
DefaultString
(
"TemplateRight"
,
BConfig
.
WebConfig
.
TemplateRight
)
BConfig
.
WebConfig
.
Session
.
SessionOn
=
AppConfig
.
DefaultBool
(
"SessionOn"
,
BConfig
.
WebConfig
.
Session
.
SessionOn
)
BConfig
.
WebConfig
.
Session
.
SessionProvider
=
AppConfig
.
DefaultString
(
"SessionProvider"
,
BConfig
.
WebConfig
.
Session
.
SessionProvider
)
BConfig
.
WebConfig
.
Session
.
SessionName
=
AppConfig
.
DefaultString
(
"SessionName"
,
BConfig
.
WebConfig
.
Session
.
SessionName
)
BConfig
.
WebConfig
.
Session
.
SessionProviderConfig
=
AppConfig
.
DefaultString
(
"SessionProviderConfig"
,
BConfig
.
WebConfig
.
Session
.
SessionProviderConfig
)
BConfig
.
WebConfig
.
Session
.
SessionGCMaxLifetime
=
AppConfig
.
DefaultInt64
(
"SessionGCMaxLifetime"
,
BConfig
.
WebConfig
.
Session
.
SessionGCMaxLifetime
)
BConfig
.
WebConfig
.
Session
.
SessionCookieLifeTime
=
AppConfig
.
DefaultInt
(
"SessionCookieLifeTime"
,
BConfig
.
WebConfig
.
Session
.
SessionCookieLifeTime
)
BConfig
.
WebConfig
.
Session
.
SessionAutoSetCookie
=
AppConfig
.
DefaultBool
(
"SessionAutoSetCookie"
,
BConfig
.
WebConfig
.
Session
.
SessionAutoSetCookie
)
BConfig
.
WebConfig
.
Session
.
SessionDomain
=
AppConfig
.
DefaultString
(
"SessionDomain"
,
BConfig
.
WebConfig
.
Session
.
SessionDomain
)
BConfig
.
Log
.
AccessLogs
=
AppConfig
.
DefaultBool
(
"LogAccessLogs"
,
BConfig
.
Log
.
AccessLogs
)
BConfig
.
Log
.
FileLineNum
=
AppConfig
.
DefaultBool
(
"LogFileLineNum"
,
BConfig
.
Log
.
FileLineNum
)
if
sd
:=
AppConfig
.
String
(
"StaticDir"
);
sd
!=
""
{
for
k
:=
range
BConfig
.
WebConfig
.
StaticDir
{
delete
(
BConfig
.
WebConfig
.
StaticDir
,
k
)
}
for
_
,
i
:=
range
[]
interface
{}{
BConfig
,
&
BConfig
.
Listen
,
&
BConfig
.
WebConfig
,
&
BConfig
.
Log
,
&
BConfig
.
WebConfig
.
Session
}
{
assignSingleConfig
(
i
,
ac
)
}
if
sd
:=
ac
.
String
(
"StaticDir"
);
sd
!=
""
{
BConfig
.
WebConfig
.
StaticDir
=
map
[
string
]
string
{}
sds
:=
strings
.
Fields
(
sd
)
for
_
,
v
:=
range
sds
{
if
url2fsmap
:=
strings
.
SplitN
(
v
,
":"
,
2
);
len
(
url2fsmap
)
==
2
{
...
...
@@ -269,7 +234,7 @@ func parseConfig(appConfigPath string) (err error) {
}
}
if
sgz
:=
AppConfig
.
String
(
"StaticExtensionsToGzip"
);
sgz
!=
""
{
if
sgz
:=
ac
.
String
(
"StaticExtensionsToGzip"
);
sgz
!=
""
{
extensions
:=
strings
.
Split
(
sgz
,
","
)
fileExts
:=
[]
string
{}
for
_
,
ext
:=
range
extensions
{
...
...
@@ -287,7 +252,7 @@ func parseConfig(appConfigPath string) (err error) {
}
}
if
lo
:=
AppConfig
.
String
(
"LogOutputs"
);
lo
!=
""
{
if
lo
:=
ac
.
String
(
"LogOutputs"
);
lo
!=
""
{
los
:=
strings
.
Split
(
lo
,
";"
)
for
_
,
v
:=
range
los
{
if
logType2Config
:=
strings
.
SplitN
(
v
,
","
,
2
);
len
(
logType2Config
)
==
2
{
...
...
@@ -301,9 +266,9 @@ func parseConfig(appConfigPath string) (err error) {
//init log
logs
.
Reset
()
for
adaptor
,
config
:=
range
BConfig
.
Log
.
Outputs
{
err
=
logs
.
SetLogger
(
adaptor
,
config
)
err
:
=
logs
.
SetLogger
(
adaptor
,
config
)
if
err
!=
nil
{
fmt
.
Printf
(
"%s with the config `%s` got err:%s
\n
"
,
adaptor
,
config
,
err
)
fmt
.
Fprintln
(
os
.
Stderr
,
"%s with the config `%s` got err:%s
\n
"
,
adaptor
,
config
,
err
)
}
}
logs
.
SetLogFuncCall
(
BConfig
.
Log
.
FileLineNum
)
...
...
@@ -311,6 +276,38 @@ func parseConfig(appConfigPath string) (err error) {
return
nil
}
func
assignSingleConfig
(
p
interface
{},
ac
config
.
Configer
)
{
pt
:=
reflect
.
TypeOf
(
p
)
if
pt
.
Kind
()
!=
reflect
.
Ptr
{
return
}
pt
=
pt
.
Elem
()
if
pt
.
Kind
()
!=
reflect
.
Struct
{
return
}
pv
:=
reflect
.
ValueOf
(
p
)
.
Elem
()
for
i
:=
0
;
i
<
pt
.
NumField
();
i
++
{
pf
:=
pv
.
Field
(
i
)
if
!
pf
.
CanSet
()
{
continue
}
name
:=
pt
.
Field
(
i
)
.
Name
switch
pf
.
Kind
()
{
case
reflect
.
String
:
pf
.
SetString
(
ac
.
DefaultString
(
name
,
pf
.
String
()))
case
reflect
.
Int
,
reflect
.
Int64
:
pf
.
SetInt
(
int64
(
ac
.
DefaultInt64
(
name
,
pf
.
Int
())))
case
reflect
.
Bool
:
pf
.
SetBool
(
ac
.
DefaultBool
(
name
,
pf
.
Bool
()))
case
reflect
.
Struct
:
default
:
//do nothing here
}
}
}
// LoadAppConfig allow developer to apply a config file
func
LoadAppConfig
(
adapterName
,
configPath
string
)
error
{
absConfigPath
,
err
:=
filepath
.
Abs
(
configPath
)
...
...
config_test.go
View file @
70f3f6b8
...
...
@@ -15,7 +15,11 @@
package
beego
import
(
"encoding/json"
"reflect"
"testing"
"github.com/astaxie/beego/config"
)
func
TestDefaults
(
t
*
testing
.
T
)
{
...
...
@@ -27,3 +31,109 @@ func TestDefaults(t *testing.T) {
t
.
Errorf
(
"FlashName was not set to default."
)
}
}
func
TestAssignConfig_01
(
t
*
testing
.
T
)
{
_BConfig
:=
&
Config
{}
_BConfig
.
AppName
=
"beego_test"
jcf
:=
&
config
.
JSONConfig
{}
ac
,
_
:=
jcf
.
ParseData
([]
byte
(
`{"AppName":"beego_json"}`
))
assignSingleConfig
(
_BConfig
,
ac
)
if
_BConfig
.
AppName
!=
"beego_json"
{
t
.
Log
(
_BConfig
)
t
.
FailNow
()
}
}
func
TestAssignConfig_02
(
t
*
testing
.
T
)
{
_BConfig
:=
&
Config
{}
bs
,
_
:=
json
.
Marshal
(
newBConfig
())
jsonMap
:=
map
[
string
]
interface
{}{}
json
.
Unmarshal
(
bs
,
&
jsonMap
)
configMap
:=
map
[
string
]
interface
{}{}
for
k
,
v
:=
range
jsonMap
{
if
reflect
.
TypeOf
(
v
)
.
Kind
()
==
reflect
.
Map
{
for
k1
,
v1
:=
range
v
.
(
map
[
string
]
interface
{})
{
if
reflect
.
TypeOf
(
v1
)
.
Kind
()
==
reflect
.
Map
{
for
k2
,
v2
:=
range
v1
.
(
map
[
string
]
interface
{})
{
configMap
[
k2
]
=
v2
}
}
else
{
configMap
[
k1
]
=
v1
}
}
}
else
{
configMap
[
k
]
=
v
}
}
configMap
[
"MaxMemory"
]
=
1024
configMap
[
"Graceful"
]
=
true
configMap
[
"XSRFExpire"
]
=
32
configMap
[
"SessionProviderConfig"
]
=
"file"
configMap
[
"FileLineNum"
]
=
true
jcf
:=
&
config
.
JSONConfig
{}
bs
,
_
=
json
.
Marshal
(
configMap
)
ac
,
_
:=
jcf
.
ParseData
([]
byte
(
bs
))
for
_
,
i
:=
range
[]
interface
{}{
_BConfig
,
&
_BConfig
.
Listen
,
&
_BConfig
.
WebConfig
,
&
_BConfig
.
Log
,
&
_BConfig
.
WebConfig
.
Session
}
{
assignSingleConfig
(
i
,
ac
)
}
if
_BConfig
.
MaxMemory
!=
1024
{
t
.
Log
(
_BConfig
.
MaxMemory
)
t
.
FailNow
()
}
if
!
_BConfig
.
Listen
.
Graceful
{
t
.
Log
(
_BConfig
.
Listen
.
Graceful
)
t
.
FailNow
()
}
if
_BConfig
.
WebConfig
.
XSRFExpire
!=
32
{
t
.
Log
(
_BConfig
.
WebConfig
.
XSRFExpire
)
t
.
FailNow
()
}
if
_BConfig
.
WebConfig
.
Session
.
SessionProviderConfig
!=
"file"
{
t
.
Log
(
_BConfig
.
WebConfig
.
Session
.
SessionProviderConfig
)
t
.
FailNow
()
}
if
!
_BConfig
.
Log
.
FileLineNum
{
t
.
Log
(
_BConfig
.
Log
.
FileLineNum
)
t
.
FailNow
()
}
}
func
TestAssignConfig_03
(
t
*
testing
.
T
)
{
jcf
:=
&
config
.
JSONConfig
{}
ac
,
_
:=
jcf
.
ParseData
([]
byte
(
`{"AppName":"beego"}`
))
ac
.
Set
(
"AppName"
,
"test_app"
)
ac
.
Set
(
"RunMode"
,
"online"
)
ac
.
Set
(
"StaticDir"
,
"download:down download2:down2"
)
ac
.
Set
(
"StaticExtensionsToGzip"
,
".css,.js,.html,.jpg,.png"
)
assignConfig
(
ac
)
t
.
Logf
(
"%#v"
,
BConfig
)
if
BConfig
.
AppName
!=
"test_app"
{
t
.
FailNow
()
}
if
BConfig
.
RunMode
!=
"online"
{
t
.
FailNow
()
}
if
BConfig
.
WebConfig
.
StaticDir
[
"/download"
]
!=
"down"
{
t
.
FailNow
()
}
if
BConfig
.
WebConfig
.
StaticDir
[
"/download2"
]
!=
"down2"
{
t
.
FailNow
()
}
if
len
(
BConfig
.
WebConfig
.
StaticExtensionsToGzip
)
!=
5
{
t
.
FailNow
()
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment