Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
二次元的罪恶王冠
beego
提交
1bf52e89
B
beego
项目概览
二次元的罪恶王冠
/
beego
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
B
beego
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
1bf52e89
编写于
1月 29, 2016
作者:
A
astaxie
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'develop' of
https://github.com/astaxie/beego
into develop
上级
5cd1ed81
bd79972d
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
144 addition
and
44 deletion
+144
-44
admin.go
admin.go
+2
-2
beego.go
beego.go
+1
-17
config.go
config.go
+65
-22
context/input.go
context/input.go
+7
-0
context/input_test.go
context/input_test.go
+54
-0
logs/console.go
logs/console.go
+4
-2
logs/console_test.go
logs/console_test.go
+7
-0
logs/log.go
logs/log.go
+1
-0
staticfile_test.go
staticfile_test.go
+3
-1
未找到文件。
admin.go
浏览文件 @
1bf52e89
...
...
@@ -90,8 +90,8 @@ func listConf(rw http.ResponseWriter, r *http.Request) {
switch
command
{
case
"conf"
:
m
:=
make
(
map
[
string
]
interface
{})
m
[
"AppConfigPath"
]
=
A
ppConfigPath
m
[
"AppConfigProvider"
]
=
A
ppConfigProvider
m
[
"AppConfigPath"
]
=
a
ppConfigPath
m
[
"AppConfigProvider"
]
=
a
ppConfigProvider
m
[
"BConfig.AppName"
]
=
BConfig
.
AppName
m
[
"BConfig.RunMode"
]
=
BConfig
.
RunMode
m
[
"BConfig.RouterCaseSensitive"
]
=
BConfig
.
RouterCaseSensitive
...
...
beego.go
浏览文件 @
1bf52e89
...
...
@@ -15,7 +15,6 @@
package
beego
import
(
"fmt"
"os"
"path/filepath"
"strconv"
...
...
@@ -68,21 +67,6 @@ func Run(params ...string) {
}
func
initBeforeHTTPRun
()
{
// if AppConfigPath is setted or conf/app.conf exist
err
:=
ParseConfig
()
if
err
!=
nil
{
panic
(
err
)
}
//init log
for
adaptor
,
config
:=
range
BConfig
.
Log
.
Outputs
{
err
=
BeeLogger
.
SetLogger
(
adaptor
,
config
)
if
err
!=
nil
{
fmt
.
Printf
(
"%s with the config `%s` got err:%s
\n
"
,
adaptor
,
config
,
err
)
}
}
SetLogFuncCall
(
BConfig
.
Log
.
FileLineNum
)
//init hooks
AddAPPStartHook
(
registerMime
)
AddAPPStartHook
(
registerDefaultErrorHandler
)
...
...
@@ -101,7 +85,7 @@ func initBeforeHTTPRun() {
// TestBeegoInit is for test package init
func
TestBeegoInit
(
ap
string
)
{
os
.
Setenv
(
"BEEGO_RUNMODE"
,
"test"
)
A
ppConfigPath
=
filepath
.
Join
(
ap
,
"conf"
,
"app.conf"
)
a
ppConfigPath
=
filepath
.
Join
(
ap
,
"conf"
,
"app.conf"
)
os
.
Chdir
(
ap
)
initBeforeHTTPRun
()
}
config.go
浏览文件 @
1bf52e89
...
...
@@ -19,6 +19,7 @@ import (
"os"
"path/filepath"
"strings"
"fmt"
"github.com/astaxie/beego/config"
"github.com/astaxie/beego/session"
...
...
@@ -105,16 +106,16 @@ var (
AppConfig
*
beegoAppConfig
// AppPath is the absolute path to the app
AppPath
string
// AppConfigPath is the path to the config files
AppConfigPath
string
// AppConfigProvider is the provider for the config, default is ini
AppConfigProvider
=
"ini"
// TemplateCache stores template caching
TemplateCache
map
[
string
]
*
template
.
Template
// GlobalSessions is the instance for the session manager
GlobalSessions
*
session
.
Manager
workPath
string
// appConfigPath is the path to the config files
appConfigPath
string
// appConfigProvider is the provider for the config, default is ini
appConfigProvider
=
"ini"
)
func
init
()
{
...
...
@@ -122,6 +123,10 @@ func init() {
workPath
,
_
=
os
.
Getwd
()
workPath
,
_
=
filepath
.
Abs
(
workPath
)
if
workPath
!=
AppPath
{
os
.
Chdir
(
AppPath
)
}
BConfig
=
&
Config
{
AppName
:
"beego"
,
RunMode
:
DEV
,
...
...
@@ -181,26 +186,19 @@ func init() {
Outputs
:
map
[
string
]
string
{
"console"
:
""
},
},
}
ParseConfig
()
}
// ParseConfig parsed default config file.
// now only support ini, next will support json.
func
ParseConfig
()
(
err
error
)
{
if
AppConfigPath
==
""
{
// initialize default configurations
AppConfigPath
=
filepath
.
Join
(
AppPath
,
"conf"
,
"app.conf"
)
if
!
utils
.
FileExists
(
AppConfigPath
)
{
AppConfig
=
&
beegoAppConfig
{
config
.
NewFakeConfig
()}
return
}
appConfigPath
=
filepath
.
Join
(
AppPath
,
"conf"
,
"app.conf"
)
if
!
utils
.
FileExists
(
appConfigPath
)
{
AppConfig
=
&
beegoAppConfig
{
config
.
NewFakeConfig
()}
return
}
if
workPath
!=
AppPath
{
os
.
Chdir
(
AppPath
)
}
parseConfig
(
appConfigPath
)
}
AppConfig
,
err
=
newAppConfig
(
AppConfigProvider
,
AppConfigPath
)
// now only support ini, next will support json.
func
parseConfig
(
appConfigPath
string
)
(
err
error
)
{
AppConfig
,
err
=
newAppConfig
(
appConfigProvider
,
appConfigPath
)
if
err
!=
nil
{
return
err
}
...
...
@@ -254,6 +252,8 @@ func ParseConfig() (err error) {
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
{
...
...
@@ -286,15 +286,58 @@ func ParseConfig() (err error) {
BConfig
.
WebConfig
.
StaticExtensionsToGzip
=
fileExts
}
}
if
lo
:=
AppConfig
.
String
(
"LogOutputs"
);
lo
!=
""
{
los
:=
strings
.
Split
(
lo
,
";"
)
for
_
,
v
:=
range
los
{
if
logType2Config
:=
strings
.
SplitN
(
v
,
","
,
2
);
len
(
logType2Config
)
==
2
{
BConfig
.
Log
.
Outputs
[
logType2Config
[
0
]]
=
logType2Config
[
1
]
}
else
{
continue
}
}
}
//init log
BeeLogger
.
Close
()
for
adaptor
,
config
:=
range
BConfig
.
Log
.
Outputs
{
err
=
BeeLogger
.
SetLogger
(
adaptor
,
config
)
if
err
!=
nil
{
fmt
.
Printf
(
"%s with the config `%s` got err:%s
\n
"
,
adaptor
,
config
,
err
)
}
}
SetLogFuncCall
(
BConfig
.
Log
.
FileLineNum
)
return
nil
}
// LoadAppConfig allow developer to apply a config file
func
LoadAppConfig
(
adapterName
,
configPath
string
)
error
{
absConfigPath
,
err
:=
filepath
.
Abs
(
configPath
)
if
err
!=
nil
{
return
err
}
if
!
utils
.
FileExists
(
absConfigPath
)
{
return
fmt
.
Errorf
(
"the target config file: %s don't exist!"
,
configPath
)
}
if
absConfigPath
==
appConfigPath
{
return
nil
}
appConfigPath
=
absConfigPath
appConfigProvider
=
adapterName
return
parseConfig
(
appConfigPath
)
}
type
beegoAppConfig
struct
{
innerConfig
config
.
Configer
}
func
newAppConfig
(
AppConfigProvider
,
A
ppConfigPath
string
)
(
*
beegoAppConfig
,
error
)
{
ac
,
err
:=
config
.
NewConfig
(
AppConfigProvider
,
A
ppConfigPath
)
func
newAppConfig
(
appConfigProvider
,
a
ppConfigPath
string
)
(
*
beegoAppConfig
,
error
)
{
ac
,
err
:=
config
.
NewConfig
(
appConfigProvider
,
a
ppConfigPath
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
context/input.go
浏览文件 @
1bf52e89
...
...
@@ -287,6 +287,13 @@ func (input *BeegoInput) Params() map[string]string {
// SetParam will set the param with key and value
func
(
input
*
BeegoInput
)
SetParam
(
key
,
val
string
)
{
// check if already exists
for
i
,
v
:=
range
input
.
pnames
{
if
v
==
key
&&
i
<=
len
(
input
.
pvalues
)
{
input
.
pvalues
[
i
]
=
val
return
}
}
input
.
pvalues
=
append
(
input
.
pvalues
,
val
)
input
.
pnames
=
append
(
input
.
pnames
,
key
)
}
...
...
context/input_test.go
浏览文件 @
1bf52e89
...
...
@@ -18,6 +18,7 @@ import (
"fmt"
"net/http"
"net/http/httptest"
"reflect"
"testing"
)
...
...
@@ -117,3 +118,56 @@ func TestSubDomain(t *testing.T) {
t
.
Fatal
(
"Subdomain parse error, got "
+
beegoInput
.
SubDomains
())
}
}
func
TestParams
(
t
*
testing
.
T
)
{
inp
:=
NewInput
()
inp
.
SetParam
(
"p1"
,
"val1_ver1"
)
inp
.
SetParam
(
"p2"
,
"val2_ver1"
)
inp
.
SetParam
(
"p3"
,
"val3_ver1"
)
if
l
:=
inp
.
ParamsLen
();
l
!=
3
{
t
.
Fatalf
(
"Input.ParamsLen wrong value: %d, expected %d"
,
l
,
3
)
}
if
val
:=
inp
.
Param
(
"p1"
);
val
!=
"val1_ver1"
{
t
.
Fatalf
(
"Input.Param wrong value: %s, expected %s"
,
val
,
"val1_ver1"
)
}
if
val
:=
inp
.
Param
(
"p3"
);
val
!=
"val3_ver1"
{
t
.
Fatalf
(
"Input.Param wrong value: %s, expected %s"
,
val
,
"val3_ver1"
)
}
vals
:=
inp
.
Params
()
expected
:=
map
[
string
]
string
{
"p1"
:
"val1_ver1"
,
"p2"
:
"val2_ver1"
,
"p3"
:
"val3_ver1"
,
}
if
!
reflect
.
DeepEqual
(
vals
,
expected
)
{
t
.
Fatalf
(
"Input.Params wrong value: %s, expected %s"
,
vals
,
expected
)
}
// overwriting existing params
inp
.
SetParam
(
"p1"
,
"val1_ver2"
)
inp
.
SetParam
(
"p2"
,
"val2_ver2"
)
expected
=
map
[
string
]
string
{
"p1"
:
"val1_ver2"
,
"p2"
:
"val2_ver2"
,
"p3"
:
"val3_ver1"
,
}
vals
=
inp
.
Params
()
if
!
reflect
.
DeepEqual
(
vals
,
expected
)
{
t
.
Fatalf
(
"Input.Params wrong value: %s, expected %s"
,
vals
,
expected
)
}
if
l
:=
inp
.
ParamsLen
();
l
!=
3
{
t
.
Fatalf
(
"Input.ParamsLen wrong value: %d, expected %d"
,
l
,
3
)
}
if
val
:=
inp
.
Param
(
"p1"
);
val
!=
"val1_ver2"
{
t
.
Fatalf
(
"Input.Param wrong value: %s, expected %s"
,
val
,
"val1_ver2"
)
}
if
val
:=
inp
.
Param
(
"p2"
);
val
!=
"val2_ver2"
{
t
.
Fatalf
(
"Input.Param wrong value: %s, expected %s"
,
val
,
"val1_ver2"
)
}
}
logs/console.go
浏览文件 @
1bf52e89
...
...
@@ -48,7 +48,8 @@ var colors = []brush{
// consoleWriter implements LoggerInterface and writes messages to terminal.
type
consoleWriter
struct
{
lg
*
log
.
Logger
Level
int
`json:"level"`
Level
int
`json:"level"`
Color
bool
`json:"color"`
}
// NewConsole create ConsoleWriter returning as LoggerInterface.
...
...
@@ -56,6 +57,7 @@ func NewConsole() Logger {
cw
:=
&
consoleWriter
{
lg
:
log
.
New
(
os
.
Stdout
,
""
,
0
),
Level
:
LevelDebug
,
Color
:
true
,
}
return
cw
}
...
...
@@ -75,7 +77,7 @@ func (c *consoleWriter) WriteMsg(when time.Time, msg string, level int) error {
return
nil
}
msg
=
formatLogTime
(
when
)
+
msg
if
runtime
.
GOOS
==
"windows"
{
if
runtime
.
GOOS
==
"windows"
||
!
c
.
Color
{
c
.
lg
.
Println
(
msg
)
return
nil
}
...
...
logs/console_test.go
浏览文件 @
1bf52e89
...
...
@@ -42,3 +42,10 @@ func TestConsole(t *testing.T) {
log2
.
SetLogger
(
"console"
,
`{"level":3}`
)
testConsoleCalls
(
log2
)
}
// Test console without color
func
TestConsoleNoColor
(
t
*
testing
.
T
)
{
log
:=
NewLogger
(
100
)
log
.
SetLogger
(
"console"
,
`{"color":false}`
)
testConsoleCalls
(
log
)
}
logs/log.go
浏览文件 @
1bf52e89
...
...
@@ -365,6 +365,7 @@ func (bl *BeeLogger) Close() {
l
.
Flush
()
l
.
Destroy
()
}
bl
.
outputs
=
nil
}
func
formatLogTime
(
when
time
.
Time
)
string
{
...
...
staticfile_test.go
浏览文件 @
1bf52e89
...
...
@@ -8,9 +8,11 @@ import (
"io/ioutil"
"os"
"testing"
"path/filepath"
)
const
licenseFile
=
"./LICENSE"
var
currentWorkDir
,
_
=
os
.
Getwd
()
var
licenseFile
=
filepath
.
Join
(
currentWorkDir
,
"LICENSE"
)
func
testOpenFile
(
encoding
string
,
content
[]
byte
,
t
*
testing
.
T
)
{
fi
,
_
:=
os
.
Stat
(
licenseFile
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录