-
Notifications
You must be signed in to change notification settings - Fork 0
/
coder.go
58 lines (53 loc) · 1.22 KB
/
coder.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package coder
import (
"github.com/dgrijalva/jwt-go"
"time"
"fmt"
"github.com/BluePecker/JwtAuth/engine/server/parameter/coder/request"
)
const (
LoginNum = 3
TokenTTL = 2 * 3600
)
type (
CustomClaim struct {
Device string `json:"device"`
Unique string `json:"unique"`
Timestamp int64 `json:"timestamp"`
Addr string `json:"addr"`
jwt.StandardClaims
}
)
func Decode(req request.Decode, secret string) (*jwt.Token, error) {
Token, err := jwt.ParseWithClaims(
req.JsonWebToken,
&CustomClaim{},
func(token *jwt.Token) (interface{}, error) {
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
return nil, fmt.Errorf("%v", token.Header["alg"])
}
return []byte(secret), nil
})
if err != nil || !Token.Valid {
return nil, err
}
return Token, err
}
func Encode(req request.Encode, secret string) (string, error) {
Claims := CustomClaim{
req.Device,
req.Unique,
time.Now().Unix(),
req.Addr,
jwt.StandardClaims{
ExpiresAt: time.Now().Add(time.Second * TokenTTL).Unix(),
Issuer: "shuc324@gmail.com",
},
}
Token := jwt.NewWithClaims(jwt.SigningMethodHS256, Claims)
Signed, err := Token.SignedString([]byte(secret))
if err != nil {
return "", err
}
return Signed, err
}