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
19119e99
Commit
19119e99
authored
Dec 12, 2013
by
astaxie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
move utils to utils libs & func move to templatefunc
parent
d603a671
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
46 additions
and
182 deletions
+46
-182
controller.go
controller.go
+13
-1
router.go
router.go
+5
-4
template.go
template.go
+3
-155
templatefunc.go
templatefunc.go
+0
-0
templatefunc_test.go
templatefunc_test.go
+0
-22
slice.go
utils/slice.go
+10
-0
slice_test.go
utils/slice_test.go
+15
-0
No files found.
controller.go
View file @
19119e99
...
...
@@ -3,6 +3,7 @@ package beego
import
(
"bytes"
"crypto/hmac"
"crypto/rand"
"crypto/sha1"
"encoding/base64"
"errors"
...
...
@@ -370,7 +371,7 @@ func (c *Controller) XsrfToken() string {
}
else
{
expire
=
int64
(
XSRFExpire
)
}
token
=
G
etRandomString
(
15
)
token
=
g
etRandomString
(
15
)
c
.
SetSecureCookie
(
XSRFKEY
,
"_xsrf"
,
token
,
expire
)
}
c
.
_xsrf_token
=
token
...
...
@@ -405,3 +406,14 @@ func (c *Controller) GoToFunc(funcname string) {
}
c
.
gotofunc
=
funcname
}
//utils func for controller internal
func
getRandomString
(
n
int
)
string
{
const
alphanum
=
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
var
bytes
=
make
([]
byte
,
n
)
rand
.
Read
(
bytes
)
for
i
,
b
:=
range
bytes
{
bytes
[
i
]
=
alphanum
[
b
%
byte
(
len
(
alphanum
))]
}
return
string
(
bytes
)
}
router.go
View file @
19119e99
...
...
@@ -15,6 +15,7 @@ import (
beecontext
"github.com/astaxie/beego/context"
"github.com/astaxie/beego/middleware"
"github.com/astaxie/beego/toolbox"
"github.com/astaxie/beego/utils"
)
const
(
...
...
@@ -159,7 +160,7 @@ func (p *ControllerRegistor) Add(pattern string, c ControllerInterface, mappingM
}
comma
:=
strings
.
Split
(
colon
[
0
],
","
)
for
_
,
m
:=
range
comma
{
if
m
==
"*"
||
i
nSlice
(
strings
.
ToLower
(
m
),
HTTPMETHOD
)
{
if
m
==
"*"
||
utils
.
I
nSlice
(
strings
.
ToLower
(
m
),
HTTPMETHOD
)
{
if
val
:=
reflectVal
.
MethodByName
(
colon
[
1
]);
val
.
IsValid
()
{
methods
[
strings
.
ToLower
(
m
)]
=
colon
[
1
]
}
else
{
...
...
@@ -272,7 +273,7 @@ func (p *ControllerRegistor) UrlFor(endpoint string, values ...string) string {
for
_
,
route
:=
range
p
.
fixrouters
{
if
route
.
controllerType
.
Name
()
==
controllName
{
var
finded
bool
if
i
nSlice
(
strings
.
ToLower
(
methodName
),
HTTPMETHOD
)
{
if
utils
.
I
nSlice
(
strings
.
ToLower
(
methodName
),
HTTPMETHOD
)
{
if
route
.
hasMethod
{
if
m
,
ok
:=
route
.
methods
[
strings
.
ToLower
(
methodName
)];
ok
&&
m
!=
methodName
{
finded
=
false
...
...
@@ -303,7 +304,7 @@ func (p *ControllerRegistor) UrlFor(endpoint string, values ...string) string {
for
_
,
route
:=
range
p
.
routers
{
if
route
.
controllerType
.
Name
()
==
controllName
{
var
finded
bool
if
i
nSlice
(
strings
.
ToLower
(
methodName
),
HTTPMETHOD
)
{
if
utils
.
I
nSlice
(
strings
.
ToLower
(
methodName
),
HTTPMETHOD
)
{
if
route
.
hasMethod
{
if
m
,
ok
:=
route
.
methods
[
strings
.
ToLower
(
methodName
)];
ok
&&
m
!=
methodName
{
finded
=
false
...
...
@@ -419,7 +420,7 @@ func (p *ControllerRegistor) ServeHTTP(rw http.ResponseWriter, r *http.Request)
context
.
Output
=
beecontext
.
NewOutput
(
rw
)
}
if
!
i
nSlice
(
strings
.
ToLower
(
r
.
Method
),
HTTPMETHOD
)
{
if
!
utils
.
I
nSlice
(
strings
.
ToLower
(
r
.
Method
),
HTTPMETHOD
)
{
http
.
Error
(
w
,
"Method Not Allowed"
,
405
)
goto
Admin
}
...
...
template.go
View file @
19119e99
...
...
@@ -9,9 +9,10 @@ import (
"io/ioutil"
"os"
"path/filepath"
"reflect"
"regexp"
"strings"
"github.com/astaxie/beego/utils"
)
var
(
...
...
@@ -144,7 +145,7 @@ func getTplDeep(root, file, parent string, t *template.Template) (*template.Temp
}
else
{
fileabspath
=
filepath
.
Join
(
root
,
file
)
}
if
e
,
_
:=
FileExists
(
fileabspath
);
!
e
{
if
e
:=
utils
.
FileExists
(
fileabspath
);
!
e
{
panic
(
"can't find template file"
+
file
)
}
data
,
err
:=
ioutil
.
ReadFile
(
fileabspath
)
...
...
@@ -238,156 +239,3 @@ func _getTemplate(t0 *template.Template, root string, submods [][]string, others
}
return
}
// go1.2 added template funcs. begin
var
(
errBadComparisonType
=
errors
.
New
(
"invalid type for comparison"
)
errBadComparison
=
errors
.
New
(
"incompatible types for comparison"
)
errNoComparison
=
errors
.
New
(
"missing argument for comparison"
)
)
type
kind
int
const
(
invalidKind
kind
=
iota
boolKind
complexKind
intKind
floatKind
integerKind
stringKind
uintKind
)
func
basicKind
(
v
reflect
.
Value
)
(
kind
,
error
)
{
switch
v
.
Kind
()
{
case
reflect
.
Bool
:
return
boolKind
,
nil
case
reflect
.
Int
,
reflect
.
Int8
,
reflect
.
Int16
,
reflect
.
Int32
,
reflect
.
Int64
:
return
intKind
,
nil
case
reflect
.
Uint
,
reflect
.
Uint8
,
reflect
.
Uint16
,
reflect
.
Uint32
,
reflect
.
Uint64
,
reflect
.
Uintptr
:
return
uintKind
,
nil
case
reflect
.
Float32
,
reflect
.
Float64
:
return
floatKind
,
nil
case
reflect
.
Complex64
,
reflect
.
Complex128
:
return
complexKind
,
nil
case
reflect
.
String
:
return
stringKind
,
nil
}
return
invalidKind
,
errBadComparisonType
}
// eq evaluates the comparison a == b || a == c || ...
func
eq
(
arg1
interface
{},
arg2
...
interface
{})
(
bool
,
error
)
{
v1
:=
reflect
.
ValueOf
(
arg1
)
k1
,
err
:=
basicKind
(
v1
)
if
err
!=
nil
{
return
false
,
err
}
if
len
(
arg2
)
==
0
{
return
false
,
errNoComparison
}
for
_
,
arg
:=
range
arg2
{
v2
:=
reflect
.
ValueOf
(
arg
)
k2
,
err
:=
basicKind
(
v2
)
if
err
!=
nil
{
return
false
,
err
}
if
k1
!=
k2
{
return
false
,
errBadComparison
}
truth
:=
false
switch
k1
{
case
boolKind
:
truth
=
v1
.
Bool
()
==
v2
.
Bool
()
case
complexKind
:
truth
=
v1
.
Complex
()
==
v2
.
Complex
()
case
floatKind
:
truth
=
v1
.
Float
()
==
v2
.
Float
()
case
intKind
:
truth
=
v1
.
Int
()
==
v2
.
Int
()
case
stringKind
:
truth
=
v1
.
String
()
==
v2
.
String
()
case
uintKind
:
truth
=
v1
.
Uint
()
==
v2
.
Uint
()
default
:
panic
(
"invalid kind"
)
}
if
truth
{
return
true
,
nil
}
}
return
false
,
nil
}
// ne evaluates the comparison a != b.
func
ne
(
arg1
,
arg2
interface
{})
(
bool
,
error
)
{
// != is the inverse of ==.
equal
,
err
:=
eq
(
arg1
,
arg2
)
return
!
equal
,
err
}
// lt evaluates the comparison a < b.
func
lt
(
arg1
,
arg2
interface
{})
(
bool
,
error
)
{
v1
:=
reflect
.
ValueOf
(
arg1
)
k1
,
err
:=
basicKind
(
v1
)
if
err
!=
nil
{
return
false
,
err
}
v2
:=
reflect
.
ValueOf
(
arg2
)
k2
,
err
:=
basicKind
(
v2
)
if
err
!=
nil
{
return
false
,
err
}
if
k1
!=
k2
{
return
false
,
errBadComparison
}
truth
:=
false
switch
k1
{
case
boolKind
,
complexKind
:
return
false
,
errBadComparisonType
case
floatKind
:
truth
=
v1
.
Float
()
<
v2
.
Float
()
case
intKind
:
truth
=
v1
.
Int
()
<
v2
.
Int
()
case
stringKind
:
truth
=
v1
.
String
()
<
v2
.
String
()
case
uintKind
:
truth
=
v1
.
Uint
()
<
v2
.
Uint
()
default
:
panic
(
"invalid kind"
)
}
return
truth
,
nil
}
// le evaluates the comparison <= b.
func
le
(
arg1
,
arg2
interface
{})
(
bool
,
error
)
{
// <= is < or ==.
lessThan
,
err
:=
lt
(
arg1
,
arg2
)
if
lessThan
||
err
!=
nil
{
return
lessThan
,
err
}
return
eq
(
arg1
,
arg2
)
}
// gt evaluates the comparison a > b.
func
gt
(
arg1
,
arg2
interface
{})
(
bool
,
error
)
{
// > is the inverse of <=.
lessOrEqual
,
err
:=
le
(
arg1
,
arg2
)
if
err
!=
nil
{
return
false
,
err
}
return
!
lessOrEqual
,
nil
}
// ge evaluates the comparison a >= b.
func
ge
(
arg1
,
arg2
interface
{})
(
bool
,
error
)
{
// >= is the inverse of <.
lessThan
,
err
:=
lt
(
arg1
,
arg2
)
if
err
!=
nil
{
return
false
,
err
}
return
!
lessThan
,
nil
}
// go1.2 added template funcs. end
utils
.go
→
templatefunc
.go
View file @
19119e99
This diff is collapsed.
Click to expand it.
utils
_test.go
→
templatefunc
_test.go
View file @
19119e99
...
...
@@ -7,18 +7,6 @@ import (
"time"
)
func
TestWebTime
(
t
*
testing
.
T
)
{
ts
:=
"Fri, 26 Jul 2013 12:27:42 CST"
l
,
_
:=
time
.
LoadLocation
(
"GST"
)
tt
,
_
:=
time
.
ParseInLocation
(
time
.
RFC1123
,
ts
,
l
)
if
ts
!=
webTime
(
tt
)
{
t
.
Error
(
"should be equal"
)
}
if
"Fri, 26 Jul 2013 12:27:42 GMT"
!=
webTime
(
tt
.
UTC
())
{
t
.
Error
(
"should be equal"
)
}
}
func
TestSubstr
(
t
*
testing
.
T
)
{
s
:=
`012345`
if
Substr
(
s
,
0
,
2
)
!=
"01"
{
...
...
@@ -92,16 +80,6 @@ func TestHtmlunquote(t *testing.T) {
}
}
func
TestInSlice
(
t
*
testing
.
T
)
{
sl
:=
[]
string
{
"A"
,
"b"
}
if
!
inSlice
(
"A"
,
sl
)
{
t
.
Error
(
"should be true"
)
}
if
inSlice
(
"B"
,
sl
)
{
t
.
Error
(
"should be false"
)
}
}
func
TestParseForm
(
t
*
testing
.
T
)
{
type
user
struct
{
Id
int
`form:"-"`
...
...
utils/slice.go
0 → 100644
View file @
19119e99
package
utils
func
InSlice
(
v
string
,
sl
[]
string
)
bool
{
for
_
,
vv
:=
range
sl
{
if
vv
==
v
{
return
true
}
}
return
false
}
utils/slice_test.go
0 → 100644
View file @
19119e99
package
utils
import
(
"testing"
)
func
TestInSlice
(
t
*
testing
.
T
)
{
sl
:=
[]
string
{
"A"
,
"b"
}
if
!
InSlice
(
"A"
,
sl
)
{
t
.
Error
(
"should be true"
)
}
if
InSlice
(
"B"
,
sl
)
{
t
.
Error
(
"should be false"
)
}
}
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