/
refresh_token.go
53 lines (41 loc) 路 1.19 KB
/
refresh_token.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
package token
import (
"time"
"github.com/HotPotatoC/twitter-clone/internal/common/config"
"github.com/HotPotatoC/twitter-clone/internal/common/jwt"
jwtgo "github.com/dgrijalva/jwt-go"
)
type RefreshToken struct {
token string
expAt time.Time
}
func NewRefreshToken(claims jwtgo.MapClaims) (*RefreshToken, error) {
exp := config.GetDuration("REFRESH_TOKEN_DURATION",
time.Duration(time.Now().Add(time.Hour*24*7).Unix()))
secret := config.GetString("REFRESH_TOKEN_SECRET", "")
token, err := generateJWT(claims, exp, secret)
if err != nil {
return nil, err
}
rt := new(RefreshToken)
rt.token = token
rt.expAt = time.Now().Add(config.GetDuration("REFRESH_TOKEN_DURATION",
time.Duration(time.Now().Add(time.Hour*24*7).Unix())))
return rt, nil
}
func VerifyRefreshToken(tokenStr string) (jwtgo.MapClaims, error) {
token, claims, err := jwt.Verify(tokenStr, config.GetString("REFRESH_TOKEN_SECRET", ""))
if err != nil {
return nil, err
}
if _, ok := token.Claims.(jwtgo.Claims); !ok && !token.Valid {
return nil, jwtgo.ErrInvalidKey
}
return claims, nil
}
func (t *RefreshToken) String() string {
return t.token
}
func (t *RefreshToken) ExpiresAt() time.Time {
return t.expAt
}