github.com/qri-io/qri@v0.10.1-0.20220104210721-c771715036cb/auth/token/token_test.go (about) 1 package token_test 2 3 import ( 4 "context" 5 "testing" 6 "time" 7 8 "github.com/qri-io/qfs" 9 "github.com/qri-io/qri/auth/key" 10 testkeys "github.com/qri-io/qri/auth/key/test" 11 "github.com/qri-io/qri/auth/token" 12 token_spec "github.com/qri-io/qri/auth/token/spec" 13 "github.com/qri-io/qri/profile" 14 ) 15 16 func TestPrivKeyTokens(t *testing.T) { 17 prevTs := token.Timestamp 18 token.Timestamp = func() time.Time { return time.Time{} } 19 defer func() { token.Timestamp = prevTs }() 20 21 kd := testkeys.GetKeyData(0) 22 tokens, err := token.NewPrivKeySource(kd.PrivKey) 23 if err != nil { 24 t.Fatal(err) 25 } 26 27 pro := &profile.Profile{ 28 ID: profile.IDB58MustDecode(kd.EncodedPeerID), 29 Peername: "doug", 30 } 31 32 tokenString, err := tokens.CreateToken(pro, 0) 33 if err != nil { 34 t.Fatal(err) 35 } 36 37 expect := `eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJRbWVMMm1kVmthMWVhaEtFTmplaEs2dEJ4a2twazVkTlExcU1jZ1dpN0hyYjRCIiwic3ViIjoiUW1lTDJtZFZrYTFlYWhLRU5qZWhLNnRCeGtrcGs1ZE5RMXFNY2dXaTdIcmI0QiIsImNsaWVudFR5cGUiOiJ1c2VyIn0.gHsjIzo3FAumMKt4epHYyw7AbhGRh-jTJbp661Uxobb23kaMX_CEWb5ZWnt5Bll8-bn0JhELtcDkirDM30Jc-E3qpwned1-NdwAO2jUIpeA-accrM-q2AFRTPVN3r8uBqLFbU7AXcF9m_HKvywTb99KySHqS1hx9MlmlFd3S5EC58aCdL7fYG38m1Rmzrksd9v196BG1VnYFD8Mg8tee06tE7u_8MDhDZ_CsBRXpoilYadEIg1PR1ElcVR7OQGA1yjw2cUibG1K8fAcfVjOC0aecbVFLbxs9wPbiqXdgOkJVpTKTFxdqE2CfI7fEeMLOcS9R5oJSDxftMS2vtl4HbA` 38 if expect != tokenString { 39 t.Errorf("token mismatch. expected: %q.\ngot: %q", expect, tokenString) 40 } 41 42 tokenWithExpiryString, err := tokens.CreateToken(pro, time.Hour) 43 expect = `eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOi02MjEzNTU5MzIwMCwiaXNzIjoiUW1lTDJtZFZrYTFlYWhLRU5qZWhLNnRCeGtrcGs1ZE5RMXFNY2dXaTdIcmI0QiIsInN1YiI6IlFtZUwybWRWa2ExZWFoS0VOamVoSzZ0Qnhra3BrNWROUTFxTWNnV2k3SHJiNEIiLCJjbGllbnRUeXBlIjoidXNlciJ9.IRzNQWFVUZ4VxpcUFmcwRTfMpl85AVIlmdDkGb8qixYaO7gXBSGKL4_XG5yKjqQS5VTSWI1fuYeihs9CbK8sx8luUJXTzTatDNQFAMO4L-76QG7fsZgcaLF4ATGQ0HrxHmDoYlJkRB2tg8TlQ0XlyyRyDWrLxuMtmAUeoSUA97nU7F2IcvloPZEKsV9DU-vxTSLNzV29PhI2oSHhOWHPST9g7gQ39ZH1SX05iNgE-SD55IPZDTgkGZwbeACBrINfZIrAC5_UmCJ-YaUhiPRmCwGY0NoDZTQxPhhc6fJRd8Dgu9gdC1E5-ccOcCADSbXzdcBpoELXguwPlpjRvcqZuw` 44 if expect != tokenWithExpiryString { 45 t.Errorf("token mismatch. expected: %q.\ngot: %q", expect, tokenWithExpiryString) 46 } 47 48 token_spec.AssertTokenSourceSpec(t, func(ctx context.Context) token.Source { 49 source, err := token.NewPrivKeySource(kd.PrivKey) 50 if err != nil { 51 panic(err) 52 } 53 return source 54 }) 55 } 56 57 func TestTokenStore(t *testing.T) { 58 fs := qfs.NewMemFS() 59 60 token_spec.AssertTokenStoreSpec(t, func(ctx context.Context) token.Store { 61 ts, err := token.NewStore("tokens.json", fs) 62 if err != nil { 63 panic(err) 64 } 65 return ts 66 }) 67 } 68 69 func TestNewPrivKeyAuthToken(t *testing.T) { 70 ctx := context.Background() 71 // create a token from a private key 72 kd := testkeys.GetKeyData(0) 73 str, err := token.NewPrivKeyAuthToken(kd.PrivKey, kd.KeyID.String(), 0) 74 if err != nil { 75 t.Fatal(err) 76 } 77 78 // prove we can parse a token with a store that only has a public key 79 ks, err := key.NewMemStore() 80 if err != nil { 81 t.Fatal(err) 82 } 83 if err := ks.AddPubKey(ctx, kd.KeyID, kd.PrivKey.GetPublic()); err != nil { 84 t.Fatal(err) 85 } 86 87 _, err = token.ParseAuthToken(ctx, str, ks) 88 if err != nil { 89 t.Fatal(err) 90 } 91 }