github.com/glide-im/glide@v1.6.0/pkg/auth/jwt_auth/auth.go (about) 1 package jwt_auth 2 3 import ( 4 "errors" 5 "github.com/glide-im/glide/pkg/auth" 6 "time" 7 ) 8 9 type JwtAuthorize struct { 10 } 11 12 type JwtAuthInfo struct { 13 UID string 14 Device string 15 ExpiredHour int64 16 } 17 18 type Response struct { 19 Token string 20 Uid string 21 Device string 22 Server []string 23 } 24 25 func NewAuthorizeImpl(secret string) *JwtAuthorize { 26 jwtSecret = []byte(secret) 27 return &JwtAuthorize{} 28 } 29 30 func (a JwtAuthorize) Auth(c auth.Info, t *auth.Token) (*auth.Result, error) { 31 32 token, err := parseJwt(t.Token) 33 if err != nil { 34 35 result := auth.Result{ 36 Success: false, 37 Msg: "invalid token", 38 } 39 return &result, nil 40 } 41 42 return &auth.Result{ 43 Success: true, 44 Response: &Response{ 45 Token: t.Token, 46 Uid: token.Uid, 47 Server: nil, 48 }, 49 }, nil 50 } 51 52 func (a JwtAuthorize) RemoveToken(t *auth.Token) error { 53 return nil 54 } 55 56 func (a JwtAuthorize) GetToken(c auth.Info) (*auth.Token, error) { 57 58 info, ok := c.(*JwtAuthInfo) 59 if !ok { 60 return nil, errors.New("invalid auth info") 61 } 62 63 jt := Claims{ 64 Uid: info.UID, 65 Device: info.Device, 66 Ver: genJwtVersion(), 67 } 68 if info.ExpiredHour == 0 { 69 info.ExpiredHour = 7 * 24 70 } 71 expire := time.Now().Add(time.Hour * time.Duration(info.ExpiredHour)) 72 token, err := genJwtExp(jt, expire) 73 if err != nil { 74 return nil, errors.New("generate token failed") 75 } 76 return &auth.Token{Token: token}, nil 77 }