github.com/chenbh/concourse/v6@v6.4.2/skymarshal/token/token_suite_test.go (about) 1 package token_test 2 3 import ( 4 "bytes" 5 "crypto/rsa" 6 "encoding/base64" 7 "encoding/binary" 8 "strings" 9 "testing" 10 "time" 11 12 . "github.com/onsi/ginkgo" 13 . "github.com/onsi/gomega" 14 15 "gopkg.in/square/go-jose.v2/jwt" 16 ) 17 18 func TestToken(t *testing.T) { 19 RegisterFailHandler(Fail) 20 RunSpecs(t, "Token Suite") 21 } 22 23 func n(pub *rsa.PublicKey) string { 24 return encode(pub.N.Bytes()) 25 } 26 27 func e(pub *rsa.PublicKey) string { 28 data := make([]byte, 8) 29 binary.BigEndian.PutUint64(data, uint64(pub.E)) 30 return encode(bytes.TrimLeft(data, "\x00")) 31 } 32 33 func encode(payload []byte) string { 34 result := base64.URLEncoding.EncodeToString(payload) 35 return strings.TrimRight(result, "=") 36 } 37 38 func parse(token string, key *rsa.PrivateKey, result interface{}) error { 39 40 parsed, err := jwt.ParseSigned(token) 41 if err != nil { 42 return err 43 } 44 45 var claims jwt.Claims 46 47 if err = parsed.Claims(&key.PublicKey, &claims, &result); err != nil { 48 return err 49 } 50 51 return claims.Validate(jwt.Expected{Time: time.Now()}) 52 }