Skip to content

Commit 09c6043

Browse files
committed
add token filter
1 parent 61cb00f commit 09c6043

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

filter/token.go

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package filter
2+
3+
import (
4+
"crypto/md5"
5+
"encoding/base64"
6+
"fmt"
7+
8+
"github.com/labstack/echo"
9+
"github.com/silentred/toolkit/util"
10+
)
11+
12+
var (
13+
ErrToken = util.NewError(400403, "invalid token")
14+
)
15+
16+
type (
17+
// TokenConfig defines the config for Auth middleware.
18+
TokenConfig struct {
19+
Logger util.Logger
20+
Secret string
21+
}
22+
)
23+
24+
// AuthToken middleware
25+
func AuthToken(logger util.Logger, secret string) echo.MiddlewareFunc {
26+
config := TokenConfig{
27+
Logger: logger,
28+
Secret: secret,
29+
}
30+
return newTokenFilter(config)
31+
}
32+
33+
func newTokenFilter(config TokenConfig) echo.MiddlewareFunc {
34+
return func(next echo.HandlerFunc) echo.HandlerFunc {
35+
return func(c echo.Context) (err error) {
36+
// verify the token
37+
var token = c.QueryParam("token")
38+
var nonce = c.QueryParam("nonce")
39+
var method = c.Request().Method
40+
var ts = c.QueryParam("ts")
41+
var hashStr = fmt.Sprintf("%s,%s,%s", method, nonce, ts)
42+
43+
bytes := md5.Sum(util.Slice(hashStr))
44+
md5Str := fmt.Sprintf("%x", util.String(bytes[:]))
45+
rightSign := base64.StdEncoding.EncodeToString(util.Slice(md5Str))
46+
47+
if rightSign != token {
48+
config.Logger.Errorf("str:%s ; token:%s ; rightSign:%s", hashStr, token, rightSign)
49+
return c.JSON(200, ErrToken)
50+
}
51+
52+
if err = next(c); err != nil {
53+
c.Error(err)
54+
}
55+
return
56+
}
57+
}
58+
}

0 commit comments

Comments
 (0)