Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
张磊
/
FileStorageBeego
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
7f5fb871
authored
2014-02-22 11:58:53 +0800
by
slene
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
move SetSecureCookie / GetSecureCookie to *context.Context and alias in Controller
1 parent
03037170
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
48 additions
and
36 deletions
context/context.go
controller.go
context/context.go
View file @
7f5fb87
package
context
import
(
"crypto/hmac"
"crypto/sha1"
"encoding/base64"
"fmt"
"net/http"
"strconv"
"strings"
"time"
"github.com/astaxie/beego/middleware"
)
...
...
@@ -59,3 +66,41 @@ func (ctx *Context) GetCookie(key string) string {
func
(
ctx
*
Context
)
SetCookie
(
name
string
,
value
string
,
others
...
interface
{})
{
ctx
.
Output
.
Cookie
(
name
,
value
,
others
...
)
}
// Get secure cookie from request by a given key.
func
(
ctx
*
Context
)
GetSecureCookie
(
Secret
,
key
string
)
(
string
,
bool
)
{
val
:=
ctx
.
Input
.
Cookie
(
key
)
if
val
==
""
{
return
""
,
false
}
parts
:=
strings
.
SplitN
(
val
,
"|"
,
3
)
if
len
(
parts
)
!=
3
{
return
""
,
false
}
vs
:=
parts
[
0
]
timestamp
:=
parts
[
1
]
sig
:=
parts
[
2
]
h
:=
hmac
.
New
(
sha1
.
New
,
[]
byte
(
Secret
))
fmt
.
Fprintf
(
h
,
"%s%s"
,
vs
,
timestamp
)
if
fmt
.
Sprintf
(
"%02x"
,
h
.
Sum
(
nil
))
!=
sig
{
return
""
,
false
}
res
,
_
:=
base64
.
URLEncoding
.
DecodeString
(
vs
)
return
string
(
res
),
true
}
// Set Secure cookie for response.
func
(
ctx
*
Context
)
SetSecureCookie
(
Secret
,
name
,
value
string
,
others
...
interface
{})
{
vs
:=
base64
.
URLEncoding
.
EncodeToString
([]
byte
(
value
))
timestamp
:=
strconv
.
FormatInt
(
time
.
Now
()
.
UnixNano
(),
10
)
h
:=
hmac
.
New
(
sha1
.
New
,
[]
byte
(
Secret
))
fmt
.
Fprintf
(
h
,
"%s%s"
,
vs
,
timestamp
)
sig
:=
fmt
.
Sprintf
(
"%02x"
,
h
.
Sum
(
nil
))
cookie
:=
strings
.
Join
([]
string
{
vs
,
timestamp
,
sig
},
"|"
)
ctx
.
Output
.
Cookie
(
name
,
cookie
,
others
...
)
}
...
...
controller.go
View file @
7f5fb87
...
...
@@ -2,11 +2,7 @@ package beego
import
(
"bytes"
"crypto/hmac"
"crypto/sha1"
"encoding/base64"
"errors"
"fmt"
"html/template"
"io"
"io/ioutil"
...
...
@@ -17,7 +13,6 @@ import (
"reflect"
"strconv"
"strings"
"time"
"github.com/astaxie/beego/context"
"github.com/astaxie/beego/session"
...
...
@@ -415,40 +410,12 @@ func (c *Controller) IsAjax() bool {
// GetSecureCookie returns decoded cookie value from encoded browser cookie values.
func
(
c
*
Controller
)
GetSecureCookie
(
Secret
,
key
string
)
(
string
,
bool
)
{
val
:=
c
.
Ctx
.
GetCookie
(
key
)
if
val
==
""
{
return
""
,
false
}
parts
:=
strings
.
SplitN
(
val
,
"|"
,
3
)
if
len
(
parts
)
!=
3
{
return
""
,
false
}
vs
:=
parts
[
0
]
timestamp
:=
parts
[
1
]
sig
:=
parts
[
2
]
h
:=
hmac
.
New
(
sha1
.
New
,
[]
byte
(
Secret
))
fmt
.
Fprintf
(
h
,
"%s%s"
,
vs
,
timestamp
)
if
fmt
.
Sprintf
(
"%02x"
,
h
.
Sum
(
nil
))
!=
sig
{
return
""
,
false
}
res
,
_
:=
base64
.
URLEncoding
.
DecodeString
(
vs
)
return
string
(
res
),
true
return
c
.
Ctx
.
GetSecureCookie
(
Secret
,
key
)
}
// SetSecureCookie puts value into cookie after encoded the value.
func
(
c
*
Controller
)
SetSecureCookie
(
Secret
,
name
,
val
string
,
age
int64
)
{
vs
:=
base64
.
URLEncoding
.
EncodeToString
([]
byte
(
val
))
timestamp
:=
strconv
.
FormatInt
(
time
.
Now
()
.
UnixNano
(),
10
)
h
:=
hmac
.
New
(
sha1
.
New
,
[]
byte
(
Secret
))
fmt
.
Fprintf
(
h
,
"%s%s"
,
vs
,
timestamp
)
sig
:=
fmt
.
Sprintf
(
"%02x"
,
h
.
Sum
(
nil
))
cookie
:=
strings
.
Join
([]
string
{
vs
,
timestamp
,
sig
},
"|"
)
c
.
Ctx
.
SetCookie
(
name
,
cookie
,
age
,
"/"
)
func
(
c
*
Controller
)
SetSecureCookie
(
Secret
,
name
,
value
string
,
others
...
interface
{})
{
c
.
Ctx
.
SetSecureCookie
(
Secret
,
name
,
value
,
others
...
)
}
// XsrfToken creates a xsrf token string and returns.
...
...
Write
Preview
Styling with
Markdown
is supported
Attach a file
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 post a comment