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  }