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
3ca68f9e
Commit
3ca68f9e
authored
Aug 02, 2016
by
astaxie
Committed by
GitHub
Aug 02, 2016
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1976 from ysqi/develop
Fxied bug and Optimized code
parents
1a52a345
2c1cea08
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
125 additions
and
114 deletions
+125
-114
admin_test.go
admin_test.go
+3
-3
app.go
app.go
+2
-2
ini.go
config/ini.go
+1
-2
config_test.go
config_test.go
+1
-2
error.go
error.go
+5
-0
router.go
router.go
+113
-105
No files found.
admin_test.go
View file @
3ca68f9e
package
beego
import
(
"testing"
"fmt"
"testing"
)
func
TestList_01
(
t
*
testing
.
T
)
{
...
...
@@ -11,8 +11,8 @@ func TestList_01(t *testing.T) {
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
])
if
fmt
.
Sprint
(
m
[
k
])
!=
fmt
.
Sprint
(
v
)
{
t
.
Log
(
k
,
"old-key"
,
v
,
"new-key"
,
m
[
k
])
t
.
FailNow
()
}
}
...
...
app.go
View file @
3ca68f9e
...
...
@@ -148,7 +148,7 @@ func (app *App) Run() {
BeeLogger
.
Info
(
"Start https server error, confict with http.Please reset https port"
)
return
}
logs
.
Info
(
"https server Running on %s"
,
app
.
Server
.
Addr
)
logs
.
Info
(
"https server Running on
https://
%s"
,
app
.
Server
.
Addr
)
if
err
:=
app
.
Server
.
ListenAndServeTLS
(
BConfig
.
Listen
.
HTTPSCertFile
,
BConfig
.
Listen
.
HTTPSKeyFile
);
err
!=
nil
{
logs
.
Critical
(
"ListenAndServeTLS: "
,
err
)
time
.
Sleep
(
100
*
time
.
Microsecond
)
...
...
@@ -159,7 +159,7 @@ func (app *App) Run() {
if
BConfig
.
Listen
.
EnableHTTP
{
go
func
()
{
app
.
Server
.
Addr
=
addr
logs
.
Info
(
"http server Running on %s"
,
app
.
Server
.
Addr
)
logs
.
Info
(
"http server Running on
http://
%s"
,
app
.
Server
.
Addr
)
if
BConfig
.
Listen
.
ListenTCP4
{
ln
,
err
:=
net
.
Listen
(
"tcp4"
,
app
.
Server
.
Addr
)
if
err
!=
nil
{
...
...
config/ini.go
View file @
3ca68f9e
...
...
@@ -86,11 +86,10 @@ func (ini *IniConfig) parseFile(name string) (*IniConfigContainer, error) {
if
_
,
ok
:=
err
.
(
*
os
.
PathError
);
ok
{
return
nil
,
err
}
line
=
bytes
.
TrimSpace
(
line
)
if
bytes
.
Equal
(
line
,
bEmpty
)
{
continue
}
line
=
bytes
.
TrimSpace
(
line
)
var
bComment
[]
byte
switch
{
case
bytes
.
HasPrefix
(
line
,
bNumComment
)
:
...
...
config_test.go
View file @
3ca68f9e
...
...
@@ -117,8 +117,7 @@ func TestAssignConfig_03(t *testing.T) {
ac
.
Set
(
"StaticExtensionsToGzip"
,
".css,.js,.html,.jpg,.png"
)
assignConfig
(
ac
)
t
.
Logf
(
"%#v"
,
BConfig
)
t
.
Logf
(
"%#v"
,
BConfig
)
if
BConfig
.
AppName
!=
"test_app"
{
t
.
FailNow
()
...
...
error.go
View file @
3ca68f9e
...
...
@@ -380,6 +380,11 @@ func ErrorController(c ControllerInterface) *App {
return
BeeApp
}
// Exception Write HttpStatus with errCode and Exec error handler if exist.
func
Exception
(
errCode
uint64
,
ctx
*
context
.
Context
)
{
exception
(
strconv
.
FormatUint
(
errCode
,
10
),
ctx
)
}
// show error string as simple text message.
// if error string is empty, show 503 or 500 error as default.
func
exception
(
errCode
string
,
ctx
*
context
.
Context
)
{
...
...
router.go
View file @
3ca68f9e
...
...
@@ -603,6 +603,7 @@ func (p *ControllerRegister) ServeHTTP(rw http.ResponseWriter, r *http.Request)
findRouter
bool
runMethod
string
routerInfo
*
controllerInfo
isRunnable
bool
)
context
:=
p
.
pool
.
Get
()
.
(
*
beecontext
.
Context
)
context
.
Reset
(
rw
,
r
)
...
...
@@ -666,136 +667,127 @@ func (p *ControllerRegister) ServeHTTP(rw http.ResponseWriter, r *http.Request)
goto
Admin
}
routerInfo
,
findRouter
=
p
.
FindRouter
(
context
)
//if no matches to url, throw a not found exception
if
!
findRouter
{
httpMethod
:=
r
.
Method
if
t
,
ok
:=
p
.
routers
[
httpMethod
];
ok
{
runObject
:=
t
.
Match
(
urlPath
,
context
)
if
r
,
ok
:=
runObject
.
(
*
controllerInfo
);
ok
{
routerInfo
=
r
findRouter
=
true
if
splat
:=
context
.
Input
.
Param
(
":splat"
);
splat
!=
""
{
for
k
,
v
:=
range
strings
.
Split
(
splat
,
"/"
)
{
context
.
Input
.
SetParam
(
strconv
.
Itoa
(
k
),
v
)
}
}
}
exception
(
"404"
,
context
)
goto
Admin
}
if
splat
:=
context
.
Input
.
Param
(
":splat"
);
splat
!=
""
{
for
k
,
v
:=
range
strings
.
Split
(
splat
,
"/"
)
{
context
.
Input
.
SetParam
(
strconv
.
Itoa
(
k
),
v
)
}
}
//if no matches to url, throw a not found exception
if
!
findRouter
{
exception
(
"404"
,
context
)
//store router pattern into context
context
.
Input
.
SetData
(
"RouterPattern"
,
routerInfo
.
pattern
)
//execute middleware filters
if
len
(
p
.
filters
[
BeforeExec
])
>
0
&&
p
.
execFilter
(
context
,
urlPath
,
BeforeExec
)
{
goto
Admin
}
if
findRouter
{
//execute middleware filters
if
len
(
p
.
filters
[
BeforeExec
])
>
0
&&
p
.
execFilter
(
context
,
urlPath
,
BeforeExec
)
{
goto
Admin
}
isRunnable
:=
false
if
routerInfo
!=
nil
{
if
routerInfo
.
routerType
==
routerTypeRESTFul
{
if
_
,
ok
:=
routerInfo
.
methods
[
r
.
Method
];
ok
{
isRunnable
=
true
routerInfo
.
runFunction
(
context
)
}
else
{
exception
(
"405"
,
context
)
goto
Admin
}
}
else
if
routerInfo
.
routerType
==
routerTypeHandler
{
if
routerInfo
!=
nil
{
if
routerInfo
.
routerType
==
routerTypeRESTFul
{
if
_
,
ok
:=
routerInfo
.
methods
[
r
.
Method
];
ok
{
isRunnable
=
true
routerInfo
.
handler
.
ServeHTTP
(
rw
,
r
)
routerInfo
.
runFunction
(
context
)
}
else
{
runRouter
=
routerInfo
.
controllerType
method
:=
r
.
Method
if
r
.
Method
==
"POST"
&&
context
.
Input
.
Query
(
"_method"
)
==
"PUT"
{
method
=
"PUT"
}
if
r
.
Method
==
"POST"
&&
context
.
Input
.
Query
(
"_method"
)
==
"DELETE"
{
method
=
"DELETE"
}
if
m
,
ok
:=
routerInfo
.
methods
[
method
];
ok
{
runMethod
=
m
}
else
if
m
,
ok
=
routerInfo
.
methods
[
"*"
];
ok
{
runMethod
=
m
}
else
{
runMethod
=
method
}
exception
(
"405"
,
context
)
goto
Admin
}
}
else
if
routerInfo
.
routerType
==
routerTypeHandler
{
isRunnable
=
true
routerInfo
.
handler
.
ServeHTTP
(
rw
,
r
)
}
else
{
runRouter
=
routerInfo
.
controllerType
method
:=
r
.
Method
if
r
.
Method
==
"POST"
&&
context
.
Input
.
Query
(
"_method"
)
==
"PUT"
{
method
=
"PUT"
}
if
r
.
Method
==
"POST"
&&
context
.
Input
.
Query
(
"_method"
)
==
"DELETE"
{
method
=
"DELETE"
}
if
m
,
ok
:=
routerInfo
.
methods
[
method
];
ok
{
runMethod
=
m
}
else
if
m
,
ok
=
routerInfo
.
methods
[
"*"
];
ok
{
runMethod
=
m
}
else
{
runMethod
=
method
}
}
}
// also defined runRouter & runMethod from filter
if
!
isRunnable
{
//Invoke the request handler
vc
:=
reflect
.
New
(
runRouter
)
execController
,
ok
:=
vc
.
Interface
()
.
(
ControllerInterface
)
if
!
ok
{
panic
(
"controller is not ControllerInterface"
)
}
// also defined runRouter & runMethod from filter
if
!
isRunnable
{
//Invoke the request handler
vc
:=
reflect
.
New
(
runRouter
)
execController
,
ok
:=
vc
.
Interface
()
.
(
ControllerInterface
)
if
!
ok
{
panic
(
"controller is not ControllerInterface"
)
}
//call the controller init function
execController
.
Init
(
context
,
runRouter
.
Name
(),
runMethod
,
vc
.
Interface
())
//call the controller init function
execController
.
Init
(
context
,
runRouter
.
Name
(),
runMethod
,
vc
.
Interface
())
//call prepare function
execController
.
Prepare
()
//call prepare function
execController
.
Prepare
()
//if XSRF is Enable then check cookie where there has any cookie in the request's cookie _csrf
if
BConfig
.
WebConfig
.
EnableXSRF
{
execController
.
XSRFToken
()
if
r
.
Method
==
"POST"
||
r
.
Method
==
"DELETE"
||
r
.
Method
==
"PUT"
||
(
r
.
Method
==
"POST"
&&
(
context
.
Input
.
Query
(
"_method"
)
==
"DELETE"
||
context
.
Input
.
Query
(
"_method"
)
==
"PUT"
))
{
execController
.
CheckXSRFCookie
()
}
//if XSRF is Enable then check cookie where there has any cookie in the request's cookie _csrf
if
BConfig
.
WebConfig
.
EnableXSRF
{
execController
.
XSRFToken
()
if
r
.
Method
==
"POST"
||
r
.
Method
==
"DELETE"
||
r
.
Method
==
"PUT"
||
(
r
.
Method
==
"POST"
&&
(
context
.
Input
.
Query
(
"_method"
)
==
"DELETE"
||
context
.
Input
.
Query
(
"_method"
)
==
"PUT"
))
{
execController
.
CheckXSRFCookie
()
}
}
execController
.
URLMapping
()
if
!
context
.
ResponseWriter
.
Started
{
//exec main logic
switch
runMethod
{
case
"GET"
:
execController
.
Get
()
case
"POST"
:
execController
.
Post
()
case
"DELETE"
:
execController
.
Delete
()
case
"PUT"
:
execController
.
Put
()
case
"HEAD"
:
execController
.
Head
()
case
"PATCH"
:
execController
.
Patch
()
case
"OPTIONS"
:
execController
.
Options
()
default
:
if
!
execController
.
HandlerFunc
(
runMethod
)
{
var
in
[]
reflect
.
Value
method
:=
vc
.
MethodByName
(
runMethod
)
method
.
Call
(
in
)
}
execController
.
URLMapping
()
if
!
context
.
ResponseWriter
.
Started
{
//exec main logic
switch
runMethod
{
case
"GET"
:
execController
.
Get
()
case
"POST"
:
execController
.
Post
()
case
"DELETE"
:
execController
.
Delete
()
case
"PUT"
:
execController
.
Put
()
case
"HEAD"
:
execController
.
Head
()
case
"PATCH"
:
execController
.
Patch
()
case
"OPTIONS"
:
execController
.
Options
()
default
:
if
!
execController
.
HandlerFunc
(
runMethod
)
{
var
in
[]
reflect
.
Value
method
:=
vc
.
MethodByName
(
runMethod
)
method
.
Call
(
in
)
}
}
//render template
if
!
context
.
ResponseWriter
.
Started
&&
context
.
Output
.
Status
==
0
{
if
BConfig
.
WebConfig
.
AutoRender
{
if
err
:=
execController
.
Render
();
err
!=
nil
{
logs
.
Error
(
err
)
}
//render template
if
!
context
.
ResponseWriter
.
Started
&&
context
.
Output
.
Status
==
0
{
if
BConfig
.
WebConfig
.
AutoRender
{
if
err
:=
execController
.
Render
();
err
!=
nil
{
logs
.
Error
(
err
)
}
}
}
// finish all runRouter. release resource
execController
.
Finish
()
}
//execute middleware filters
if
len
(
p
.
filters
[
AfterExec
])
>
0
&&
p
.
execFilter
(
context
,
urlPath
,
AfterExec
)
{
goto
Admin
}
// finish all runRouter. release resource
execController
.
Finish
()
}
//execute middleware filters
if
len
(
p
.
filters
[
AfterExec
])
>
0
&&
p
.
execFilter
(
context
,
urlPath
,
AfterExec
)
{
goto
Admin
}
if
len
(
p
.
filters
[
FinishRouter
])
>
0
&&
p
.
execFilter
(
context
,
urlPath
,
FinishRouter
)
{
goto
Admin
}
...
...
@@ -851,6 +843,22 @@ Admin:
}
}
// FindRouter Find Router info for URL
func
(
p
*
ControllerRegister
)
FindRouter
(
context
*
beecontext
.
Context
)
(
routerInfo
*
controllerInfo
,
isFind
bool
)
{
var
urlPath
=
context
.
Input
.
URL
()
if
!
BConfig
.
RouterCaseSensitive
{
urlPath
=
strings
.
ToLower
(
urlPath
)
}
httpMethod
:=
context
.
Input
.
Method
()
if
t
,
ok
:=
p
.
routers
[
httpMethod
];
ok
{
runObject
:=
t
.
Match
(
urlPath
,
context
)
if
r
,
ok
:=
runObject
.
(
*
controllerInfo
);
ok
{
return
r
,
true
}
}
return
}
func
(
p
*
ControllerRegister
)
recoverPanic
(
context
*
beecontext
.
Context
)
{
if
err
:=
recover
();
err
!=
nil
{
if
err
==
ErrAbort
{
...
...
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