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  }