Merge branch 'eliquious-fix-multiple-audience-bug'
diff --git a/README.md b/README.md
index 8443db9..52e31d7 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,7 @@
JOSE
============
[](https://travis-ci.org/SermoDigital/jose)
+[](https://godoc.org/github.com/SermoDigital/jose)
JOSE is a comprehensive set of JWT, JWS, and JWE libraries.
diff --git a/jwt/claims.go b/jwt/claims.go
index 2f4f2e1..cc135d8 100644
--- a/jwt/claims.go
+++ b/jwt/claims.go
@@ -118,7 +118,9 @@
return []string{t}, true
case []string:
return t, true
- case interface{}, []interface{}:
+ case []interface{}:
+ return stringify(t...)
+ case interface{}:
return stringify(t)
}
return nil, false
diff --git a/jwt/claims_test.go b/jwt/claims_test.go
index e22cb07..c5edd70 100644
--- a/jwt/claims_test.go
+++ b/jwt/claims_test.go
@@ -1 +1,85 @@
-package jwt
+package jwt_test
+
+import (
+ "testing"
+
+ "github.com/SermoDigital/jose/crypto"
+ "github.com/SermoDigital/jose/jws"
+)
+
+func TestMultipleAudienceBug_AfterMarshal(t *testing.T) {
+
+ // Create JWS claims
+ claims := jws.Claims{}
+ claims.SetAudience("example.com", "api.example.com")
+
+ token := jws.NewJWT(claims, crypto.SigningMethodHS256)
+ serializedToken, _ := token.Serialize([]byte("abcdef"))
+
+ // Unmarshal JSON
+ newToken, _ := jws.ParseJWT(serializedToken)
+
+ c := newToken.Claims()
+
+ // Get Audience
+ aud, ok := c.Audience()
+ if !ok {
+
+ // Fails
+ t.Fail()
+ }
+
+ t.Logf("aud Value: %s", aud)
+ t.Logf("aud Type : %T", aud)
+}
+
+func TestMultipleAudienceFix_AfterMarshal(t *testing.T) {
+ // Create JWS claims
+ claims := jws.Claims{}
+ claims.SetAudience("example.com", "api.example.com")
+
+ token := jws.NewJWT(claims, crypto.SigningMethodHS256)
+ serializedToken, _ := token.Serialize([]byte("abcdef"))
+
+ // Unmarshal JSON
+ newToken, _ := jws.ParseJWT(serializedToken)
+
+ c := newToken.Claims()
+
+ // Get Audience
+ aud, ok := c.Audience()
+ if !ok {
+
+ // Fails
+ t.Fail()
+ }
+
+ t.Logf("aud len(): %d", len(aud))
+ t.Logf("aud Value: %s", aud)
+ t.Logf("aud Type : %T", aud)
+}
+
+func TestSingleAudienceFix_AfterMarshal(t *testing.T) {
+ // Create JWS claims
+ claims := jws.Claims{}
+ claims.SetAudience("example.com")
+
+ token := jws.NewJWT(claims, crypto.SigningMethodHS256)
+ serializedToken, _ := token.Serialize([]byte("abcdef"))
+
+ // Unmarshal JSON
+ newToken, _ := jws.ParseJWT(serializedToken)
+ c := newToken.Claims()
+
+ // Get Audience
+ aud, ok := c.Audience()
+ if !ok {
+
+ // Fails
+ t.Fail()
+ }
+
+ t.Logf("aud len(): %d", len(aud))
+ t.Logf("aud Value: %s", aud)
+ t.Logf("aud Type : %T", aud)
+}