github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/itokens-payloads/impl_test.go (about) 1 /* 2 * Copyright (c) 2021-present unTill Pro, Ltd. 3 */ 4 5 package payloads 6 7 import ( 8 "log" 9 "testing" 10 "time" 11 12 "github.com/stretchr/testify/require" 13 14 "github.com/voedger/voedger/pkg/appdef" 15 "github.com/voedger/voedger/pkg/istructs" 16 "github.com/voedger/voedger/pkg/itokens" 17 "github.com/voedger/voedger/pkg/itokensjwt" 18 ) 19 20 var ( 21 testTime = time.Now() 22 testTimeFunc = func() time.Time { return testTime } 23 testApp = istructs.AppQName_test1_app1 24 testDuration = time.Minute 25 ) 26 27 func TestBasicUsage_PrincipalPayload(t *testing.T) { 28 29 require := require.New(t) 30 31 signer := itokensjwt.ProvideITokens(itokensjwt.SecretKeyExample, testTimeFunc) 32 33 srcPayload := PrincipalPayload{ 34 Login: "login", 35 SubjectKind: istructs.SubjectKind_User, 36 ProfileWSID: istructs.WSID(10), 37 } 38 39 var token string 40 var err error 41 42 t.Run("Prepare token", func(t *testing.T) { 43 token, err = signer.IssueToken(testApp, testDuration, &srcPayload) 44 log.Printf("%+v", srcPayload) 45 require.NoError(err) 46 }) 47 48 t.Run("Verify token", func(t *testing.T) { 49 payload := PrincipalPayload{} 50 gp, err := signer.ValidateToken(token, &payload) 51 require.NoError(err) 52 require.Equal(srcPayload, payload) 53 require.Greater(gp.IssuedAt.Unix(), int64(0)) 54 require.Equal(testApp, gp.AppQName) 55 require.Equal(testDuration, gp.Duration) 56 }) 57 58 } 59 60 func TestBasicUsage_BLOBUploadingPayload(t *testing.T) { 61 62 require := require.New(t) 63 signer := itokensjwt.ProvideITokens(itokensjwt.SecretKeyExample, testTimeFunc) 64 65 srcPayload := BLOBUploadingPayload{ 66 Workspace: istructs.WSID(1), 67 BLOB: istructs.RecordID(1), 68 MaxSize: 20000, 69 } 70 71 var token string 72 var err error 73 74 t.Run("Prepare token", func(t *testing.T) { 75 token, err = signer.IssueToken(testApp, testDuration, &srcPayload) 76 log.Printf("%+v", srcPayload) 77 require.NoError(err) 78 }) 79 80 t.Run("Verify token", func(t *testing.T) { 81 payload := BLOBUploadingPayload{} 82 gp, err := signer.ValidateToken(token, &payload) 83 require.NoError(err) 84 require.Equal(srcPayload, payload) 85 require.Greater(gp.IssuedAt.Unix(), int64(0)) 86 require.Equal(testApp, gp.AppQName) 87 require.Equal(testDuration, gp.Duration) 88 }) 89 } 90 91 func TestBasicUsage_VerifiedValue(t *testing.T) { 92 93 require := require.New(t) 94 signer := itokensjwt.ProvideITokens(itokensjwt.SecretKeyExample, testTimeFunc) 95 testQName := appdef.NewQName("test", "entity") 96 97 token := "" 98 var err error 99 100 t.Run("Issue token", func(t *testing.T) { 101 payload := VerifiedValuePayload{ 102 VerificationKind: appdef.VerificationKind_EMail, 103 WSID: 43, 104 Entity: testQName, 105 Field: "testName", 106 Value: 42, 107 } 108 token, err = signer.IssueToken(testApp, testDuration, &payload) 109 require.NoError(err) 110 }) 111 112 t.Run("Verify token", func(t *testing.T) { 113 payload := VerifiedValuePayload{} 114 gp, err := signer.ValidateToken(token, &payload) 115 require.NoError(err) 116 require.Equal(appdef.VerificationKind_EMail, payload.VerificationKind) 117 require.Equal(testQName, payload.Entity) 118 require.Equal("testName", payload.Field) 119 require.Equal(float64(42), payload.Value) 120 require.Greater(gp.IssuedAt.Unix(), int64(0)) 121 require.Equal(testApp, gp.AppQName) 122 require.Equal(testDuration, gp.Duration) 123 require.Equal(istructs.WSID(43), payload.WSID) 124 }) 125 } 126 127 func TestBasicUsage_IAppTokens(t *testing.T) { 128 require := require.New(t) 129 tokens := itokensjwt.ProvideITokens(itokensjwt.SecretKeyExample, testTimeFunc) 130 atf := ProvideIAppTokensFactory(tokens) 131 at := atf.New(testApp) 132 133 token := "" 134 var err error 135 136 t.Run("Issue token", func(t *testing.T) { 137 srcPayload := PrincipalPayload{ 138 Login: "login", 139 SubjectKind: istructs.SubjectKind_User, 140 ProfileWSID: istructs.WSID(10), 141 } 142 token, err = at.IssueToken(testDuration, &srcPayload) 143 require.NoError(err) 144 }) 145 146 t.Run("Validate token", func(t *testing.T) { 147 payload := PrincipalPayload{} 148 gp, err := at.ValidateToken(token, &payload) 149 require.NoError(err) 150 require.Greater(gp.IssuedAt.Unix(), int64(0)) 151 require.Equal(testApp, gp.AppQName) 152 require.Equal(testDuration, gp.Duration) 153 }) 154 155 t.Run("Basic validation error", func(t *testing.T) { 156 testTime = testTime.Add(testDuration * 2) 157 defer func() { testTime = testTime.Add(-testDuration * 2) }() 158 payload := PrincipalPayload{} 159 _, err := at.ValidateToken(token, &payload) 160 require.ErrorIs(err, itokens.ErrTokenExpired) 161 }) 162 163 t.Run("Error on validate a token issued for an another app", func(t *testing.T) { 164 tokens := itokensjwt.ProvideITokens(itokensjwt.SecretKeyExample, testTimeFunc) 165 atf := ProvideIAppTokensFactory(tokens) 166 at := atf.New(istructs.AppQName_test2_app1) 167 payload := PrincipalPayload{} 168 _, err := at.ValidateToken(token, &payload) 169 require.Equal(ErrTokenIssuedForAnotherApp, err) 170 }) 171 }