github.com/nats-io/jwt/v2@v2.5.6/test/genericclaims_test.go (about) 1 /* 2 * Copyright 2018-2020 The NATS Authors 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 package jwt 17 18 import ( 19 "testing" 20 "time" 21 22 . "github.com/nats-io/jwt/v2" 23 jwtv1 "github.com/nats-io/jwt/v2/v1compat" 24 ) 25 26 func TestNewGenericClaims(t *testing.T) { 27 akp := createAccountNKey(t) 28 apk := publicKey(akp, t) 29 30 gc := NewGenericClaims(apk) 31 gc.Expires = time.Now().Add(time.Hour).UTC().Unix() 32 gc.Name = "alberto" 33 gc.Audience = "everyone" 34 gc.NotBefore = time.Now().UTC().Unix() 35 gc.Data["test"] = true 36 37 gcJwt := encode(gc, akp, t) 38 39 uc2, err := DecodeGeneric(gcJwt) 40 if err != nil { 41 t.Fatal("failed to decode", err) 42 } 43 44 AssertEquals(gc.String(), uc2.String(), t) 45 AssertEquals(gc.Name, uc2.Name, t) 46 AssertEquals(gc.Audience, uc2.Audience, t) 47 AssertEquals(gc.Expires, uc2.Expires, t) 48 AssertEquals(gc.NotBefore, uc2.NotBefore, t) 49 AssertEquals(gc.Subject, uc2.Subject, t) 50 51 AssertEquals(gc.Data["test"], true, t) 52 AssertEquals(gc.Claims() != nil, true, t) 53 AssertEquals(gc.Payload() != nil, true, t) 54 } 55 56 func TestNewGenericOperatorClaims(t *testing.T) { 57 okp := createOperatorNKey(t) 58 opk := publicKey(okp, t) 59 60 op := NewOperatorClaims(opk) 61 62 oJwt := encode(op, okp, t) 63 64 oc2, err := DecodeGeneric(oJwt) 65 if err != nil { 66 t.Fatal("failed to decode", err) 67 } 68 if OperatorClaim != oc2.ClaimType() { 69 t.Fatalf("Bad Claim type") 70 } 71 } 72 73 func TestGenericClaimsCanHaveCustomType(t *testing.T) { 74 akp := createAccountNKey(t) 75 apk := publicKey(akp, t) 76 77 gc := NewGenericClaims(apk) 78 gc.Expires = time.Now().Add(time.Hour).UTC().Unix() 79 gc.Name = "alberto" 80 gc.Data["hello"] = "world" 81 gc.Data["count"] = 5 82 gc.Data["type"] = "my_type" 83 gcJwt := encode(gc, akp, t) 84 85 gc2, err := DecodeGeneric(gcJwt) 86 if err != nil { 87 t.Fatal("failed to decode", err) 88 } 89 if gc2.ClaimType() != GenericClaim { 90 t.Fatalf("expected claimtype to be generic got: %v", gc2.ClaimType()) 91 } 92 if gc2.Data["type"] != "my_type" { 93 t.Fatalf("expected internal type to be 'my_type': %v", gc2.Data["type"]) 94 } 95 } 96 97 func TestGenericClaimsCanHaveCustomTypeFromV1(t *testing.T) { 98 akp := createAccountNKey(t) 99 apk := publicKey(akp, t) 100 101 gc := jwtv1.NewGenericClaims(apk) 102 gc.Expires = time.Now().Add(time.Hour).UTC().Unix() 103 gc.Name = "alberto" 104 gc.Data["hello"] = "world" 105 gc.Data["count"] = 5 106 gc.Type = "my_type" 107 token, err := gc.Encode(akp) 108 if err != nil { 109 t.Fatalf("failed to encode v1 JWT: %v", err) 110 } 111 112 gc2, err := DecodeGeneric(token) 113 if err != nil { 114 t.Fatal("failed to decode", err) 115 } 116 if gc2.ClaimType() != GenericClaim { 117 t.Fatalf("expected claimtype to be generic got: %v", gc2.ClaimType()) 118 } 119 if gc2.Data["type"] != "my_type" { 120 t.Fatalf("expected internal type to be 'my_type': %v", gc2.Data["type"]) 121 } 122 }