From 01fe26f5b286199b4c46ca264e746c032a08f74c Mon Sep 17 00:00:00 2001 From: Burak Sezer Date: Mon, 16 Dec 2024 17:02:42 +0300 Subject: [PATCH 01/15] [TT-12741] Add ctxSetSelfLooping and ctxSelfLooping methods. --- ctx/ctx.go | 1 + gateway/api.go | 19 +++++++++++++++++++ gateway/api_loader.go | 1 + 3 files changed, 21 insertions(+) diff --git a/ctx/ctx.go b/ctx/ctx.go index 43a31a2d838..360f3ea3c8e 100644 --- a/ctx/ctx.go +++ b/ctx/ctx.go @@ -53,6 +53,7 @@ const ( // CacheOptions holds cache options required for cache writer middleware. CacheOptions OASDefinition + SelfLooping ) func ctxSetSession(r *http.Request, s *user.SessionState, scheduleUpdate bool, hashKey bool) { diff --git a/gateway/api.go b/gateway/api.go index 751d085bfda..34c34221fdc 100644 --- a/gateway/api.go +++ b/gateway/api.go @@ -3176,6 +3176,11 @@ func ctxSetCheckLoopLimits(r *http.Request, b bool) { // Should we check Rate limits and Quotas? func ctxCheckLimits(r *http.Request) bool { + // If this is a self loop, do not need to check the limits and quotas. + if ctxSelfLooping(r) { + return false + } + // If looping disabled, allow all if !ctxLoopingEnabled(r) { return true @@ -3262,6 +3267,20 @@ func ctxSetDefaultVersion(r *http.Request) { setCtxValue(r, ctx.VersionDefault, true) } +func ctxSetSelfLooping(r *http.Request, value bool) { + setCtxValue(r, ctx.SelfLooping, value) +} + +func ctxSelfLooping(r *http.Request) bool { + if v := r.Context().Value(ctx.SelfLooping); v != nil { + if boolVal, ok := v.(bool); ok { + return boolVal + } + } + + return false +} + func ctxLoopingEnabled(r *http.Request) bool { return ctxLoopLevel(r) > 0 } diff --git a/gateway/api_loader.go b/gateway/api_loader.go index 9adba7759b6..948b3ab9d60 100644 --- a/gateway/api_loader.go +++ b/gateway/api_loader.go @@ -599,6 +599,7 @@ func (d *DummyProxyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { var handler http.Handler if r.URL.Hostname() == "self" { + ctxSetSelfLooping(r, true) if h, found := d.Gw.apisHandlesByID.Load(d.SH.Spec.APIID); found { if chain, ok := h.(*ChainObject); ok { handler = chain.ThisHandler From 3e4acb5f8908400ab37c6df9184a7aea2b3b571d Mon Sep 17 00:00:00 2001 From: Burak Sezer Date: Tue, 17 Dec 2024 12:29:54 +0300 Subject: [PATCH 02/15] [TT-12741] Call `MakeSpec` in TestQuotaNotAppliedWithURLRewrite --- gateway/api.go | 2 +- gateway/middleware_test.go | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/gateway/api.go b/gateway/api.go index 34c34221fdc..c2c0ccccfce 100644 --- a/gateway/api.go +++ b/gateway/api.go @@ -3182,7 +3182,7 @@ func ctxCheckLimits(r *http.Request) bool { } // If looping disabled, allow all - if !ctxLoopingEnabled(r) { + if ctxLoopingEnabled(r) { return true } diff --git a/gateway/middleware_test.go b/gateway/middleware_test.go index 611c5ad4d87..fcd604bed8d 100644 --- a/gateway/middleware_test.go +++ b/gateway/middleware_test.go @@ -8,10 +8,12 @@ import ( "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/TykTechnologies/tyk/apidef" headers2 "github.com/TykTechnologies/tyk/header" "github.com/TykTechnologies/tyk/internal/cache" + "github.com/TykTechnologies/tyk/internal/model" "github.com/TykTechnologies/tyk/internal/uuid" "github.com/TykTechnologies/tyk/test" @@ -414,10 +416,11 @@ func TestQuotaNotAppliedWithURLRewrite(t *testing.T) { ts := StartTest(nil) defer ts.Close() - spec := ts.Gw.BuildAndLoadAPI(func(spec *APISpec) { + preSpec := ts.Gw.BuildAndLoadAPI(func(spec *APISpec) { spec.Proxy.ListenPath = "/quota-test" spec.UseKeylessAccess = false UpdateAPIVersion(spec, "Default", func(v *apidef.VersionInfo) { + v.UseExtendedPaths = true v.ExtendedPaths.URLRewrite = []apidef.URLRewriteMeta{{ Path: "/abc", Method: http.MethodGet, @@ -426,6 +429,9 @@ func TestQuotaNotAppliedWithURLRewrite(t *testing.T) { }} }) })[0] + loader := APIDefinitionLoader{Gw: ts.Gw} + spec, err := loader.MakeSpec(&model.MergedAPI{APIDefinition: preSpec.APIDefinition}, nil) + require.NoError(t, err) _, authKey := ts.CreateSession(func(s *user.SessionState) { s.AccessRights = map[string]user.AccessDefinition{ From e82b320936b9d6d2e12cf97261c89954bc062948 Mon Sep 17 00:00:00 2001 From: Burak Sezer Date: Tue, 17 Dec 2024 18:03:34 +0300 Subject: [PATCH 03/15] [TT-12741] Pass through AuthKey middleware if the request is a self-looping. --- gateway/api.go | 2 +- gateway/middleware_test.go | 10 ++-------- gateway/mw_auth_key.go | 2 +- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/gateway/api.go b/gateway/api.go index c2c0ccccfce..34c34221fdc 100644 --- a/gateway/api.go +++ b/gateway/api.go @@ -3182,7 +3182,7 @@ func ctxCheckLimits(r *http.Request) bool { } // If looping disabled, allow all - if ctxLoopingEnabled(r) { + if !ctxLoopingEnabled(r) { return true } diff --git a/gateway/middleware_test.go b/gateway/middleware_test.go index fcd604bed8d..630e4eea0b8 100644 --- a/gateway/middleware_test.go +++ b/gateway/middleware_test.go @@ -7,15 +7,12 @@ import ( "net/http" "testing" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "github.com/TykTechnologies/tyk/apidef" headers2 "github.com/TykTechnologies/tyk/header" "github.com/TykTechnologies/tyk/internal/cache" - "github.com/TykTechnologies/tyk/internal/model" "github.com/TykTechnologies/tyk/internal/uuid" "github.com/TykTechnologies/tyk/test" + "github.com/stretchr/testify/assert" "github.com/TykTechnologies/tyk/config" "github.com/TykTechnologies/tyk/user" @@ -416,7 +413,7 @@ func TestQuotaNotAppliedWithURLRewrite(t *testing.T) { ts := StartTest(nil) defer ts.Close() - preSpec := ts.Gw.BuildAndLoadAPI(func(spec *APISpec) { + spec := ts.Gw.BuildAndLoadAPI(func(spec *APISpec) { spec.Proxy.ListenPath = "/quota-test" spec.UseKeylessAccess = false UpdateAPIVersion(spec, "Default", func(v *apidef.VersionInfo) { @@ -429,9 +426,6 @@ func TestQuotaNotAppliedWithURLRewrite(t *testing.T) { }} }) })[0] - loader := APIDefinitionLoader{Gw: ts.Gw} - spec, err := loader.MakeSpec(&model.MergedAPI{APIDefinition: preSpec.APIDefinition}, nil) - require.NoError(t, err) _, authKey := ts.CreateSession(func(s *user.SessionState) { s.AccessRights = map[string]user.AccessDefinition{ diff --git a/gateway/mw_auth_key.go b/gateway/mw_auth_key.go index 25dd659468c..27646775d9e 100644 --- a/gateway/mw_auth_key.go +++ b/gateway/mw_auth_key.go @@ -95,7 +95,7 @@ func (k *AuthKey) ProcessRequest(_ http.ResponseWriter, r *http.Request, _ inter } // skip auth key check if the request is looped. - if ses := ctxGetSession(r); ses != nil && !ctxCheckLimits(r) { + if ses := ctxGetSession(r); ses != nil && ctxSelfLooping(r) { return nil, http.StatusOK } From 3e06686298ebb505b1829c1dea6552f7a51d7c2c Mon Sep 17 00:00:00 2001 From: Burak Sezer Date: Tue, 17 Dec 2024 19:43:17 +0300 Subject: [PATCH 04/15] [TT-12741] Improve code organization and add an integration test --- gateway/api.go | 18 ++------ gateway/api_loader.go | 4 +- gateway/looping_test.go | 91 +++++++++++++++++++++++++++++++++++++ gateway/mw_auth_key.go | 4 +- internal/httpctx/context.go | 14 ++++++ 5 files changed, 114 insertions(+), 17 deletions(-) diff --git a/gateway/api.go b/gateway/api.go index 34c34221fdc..b1aa078b38b 100644 --- a/gateway/api.go +++ b/gateway/api.go @@ -42,6 +42,8 @@ import ( "sync" "time" + "github.com/TykTechnologies/tyk/internal/httpctx" + gqlv2 "github.com/TykTechnologies/graphql-go-tools/v2/pkg/graphql" "github.com/getkin/kin-openapi/openapi3" @@ -3177,7 +3179,7 @@ func ctxSetCheckLoopLimits(r *http.Request, b bool) { // Should we check Rate limits and Quotas? func ctxCheckLimits(r *http.Request) bool { // If this is a self loop, do not need to check the limits and quotas. - if ctxSelfLooping(r) { + if httpctx.IsSelfLooping(r) { return false } @@ -3267,20 +3269,6 @@ func ctxSetDefaultVersion(r *http.Request) { setCtxValue(r, ctx.VersionDefault, true) } -func ctxSetSelfLooping(r *http.Request, value bool) { - setCtxValue(r, ctx.SelfLooping, value) -} - -func ctxSelfLooping(r *http.Request) bool { - if v := r.Context().Value(ctx.SelfLooping); v != nil { - if boolVal, ok := v.(bool); ok { - return boolVal - } - } - - return false -} - func ctxLoopingEnabled(r *http.Request) bool { return ctxLoopLevel(r) > 0 } diff --git a/gateway/api_loader.go b/gateway/api_loader.go index 948b3ab9d60..ec380566d0c 100644 --- a/gateway/api_loader.go +++ b/gateway/api_loader.go @@ -15,6 +15,8 @@ import ( "sync" texttemplate "text/template" + "github.com/TykTechnologies/tyk/internal/httpctx" + "github.com/gorilla/mux" "github.com/justinas/alice" "github.com/rs/cors" @@ -599,7 +601,7 @@ func (d *DummyProxyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { var handler http.Handler if r.URL.Hostname() == "self" { - ctxSetSelfLooping(r, true) + httpctx.SetSelfLooping(r, true) if h, found := d.Gw.apisHandlesByID.Load(d.SH.Spec.APIID); found { if chain, ok := h.(*ChainObject); ok { handler = chain.ThisHandler diff --git a/gateway/looping_test.go b/gateway/looping_test.go index ea573350d80..83e02fd5cd9 100644 --- a/gateway/looping_test.go +++ b/gateway/looping_test.go @@ -6,6 +6,7 @@ package gateway import ( "encoding/json" + "net/http" "sync" "testing" @@ -325,6 +326,96 @@ func TestLooping(t *testing.T) { }...) }) + t.Run("Looping to another api with auth tokens", func(t *testing.T) { + specs := ts.Gw.BuildAndLoadAPI(func(spec *APISpec) { + spec.APIID = "apia" + spec.Name = "ApiA" + spec.Proxy.ListenPath = "/apia" + spec.UseKeylessAccess = false + spec.AuthConfigs = map[string]apidef.AuthConfig{ + "authToken": { + AuthHeaderName: "Authorization", + }, + } + UpdateAPIVersion(spec, "Default", func(v *apidef.VersionInfo) { + v.UseExtendedPaths = true + v.ExtendedPaths.URLRewrite = []apidef.URLRewriteMeta{{ + Path: "/", + Method: http.MethodGet, + MatchPattern: ".*", + RewriteTo: "tyk://apib", + }} + }) + }, func(spec *APISpec) { + spec.APIID = "apib" + spec.Name = "ApiB" + spec.Proxy.ListenPath = "/apib" + spec.UseKeylessAccess = false + spec.AuthConfigs = map[string]apidef.AuthConfig{ + "authToken": { + AuthHeaderName: "X-Api-Key", + }, + } + }) + specApiA := specs[0] + specApiB := specs[1] + + _, authKeyForApiA := ts.CreateSession(func(s *user.SessionState) { + s.AccessRights = map[string]user.AccessDefinition{ + specApiA.APIID: { + APIName: specApiA.Name, + APIID: specApiA.APIID, + Versions: []string{"default"}, + AllowanceScope: specApiA.APIID, + }, + } + s.OrgID = specApiA.OrgID + }) + + _, authKeyForApiB := ts.CreateSession(func(s *user.SessionState) { + s.AccessRights = map[string]user.AccessDefinition{ + specApiB.APIID: { + APIName: specApiB.Name, + APIID: specApiB.APIID, + Versions: []string{"default"}, + AllowanceScope: specApiB.APIID, + }, + } + s.OrgID = specApiB.OrgID + }) + + headersWithApiBToken := map[string]string{ + "Authorization": authKeyForApiA, + "X-Api-Key": authKeyForApiB, + } + headersWithoutApiBToken := map[string]string{ + "Authorization": authKeyForApiA, + "X-Api-Key": "some-string", + } + headersWithOnlyApiAToken := map[string]string{ + "Authorization": authKeyForApiA, + } + _, _ = ts.Run(t, []test.TestCase{ + { + Headers: headersWithApiBToken, + Path: "/apia", + Code: http.StatusOK, + }, + { + Headers: headersWithoutApiBToken, + Path: "/apia", + Code: http.StatusForbidden, + BodyMatch: "Access to this API has been disallowed", + }, + { + Headers: headersWithOnlyApiAToken, + Path: "/apia", + Code: http.StatusUnauthorized, + BodyMatch: "Authorization field missing", + }, + }...) + }) + } func TestConcurrencyReloads(t *testing.T) { diff --git a/gateway/mw_auth_key.go b/gateway/mw_auth_key.go index 27646775d9e..e502cdc8df4 100644 --- a/gateway/mw_auth_key.go +++ b/gateway/mw_auth_key.go @@ -6,6 +6,8 @@ import ( "strings" "time" + "github.com/TykTechnologies/tyk/internal/httpctx" + "github.com/TykTechnologies/tyk/internal/crypto" "github.com/TykTechnologies/tyk/internal/otel" "github.com/TykTechnologies/tyk/storage" @@ -95,7 +97,7 @@ func (k *AuthKey) ProcessRequest(_ http.ResponseWriter, r *http.Request, _ inter } // skip auth key check if the request is looped. - if ses := ctxGetSession(r); ses != nil && ctxSelfLooping(r) { + if ses := ctxGetSession(r); ses != nil && httpctx.IsSelfLooping(r) { return nil, http.StatusOK } diff --git a/internal/httpctx/context.go b/internal/httpctx/context.go index a139172e9a5..844046103ac 100644 --- a/internal/httpctx/context.go +++ b/internal/httpctx/context.go @@ -3,6 +3,8 @@ package httpctx import ( "context" "net/http" + + "github.com/TykTechnologies/tyk/ctx" ) type Value[T any] struct { @@ -26,3 +28,15 @@ func (v *Value[T]) Set(r *http.Request, val T) *http.Request { *r = *h return h } + +var selfLoopingValue = NewValue[bool](ctx.SelfLooping) + +// SetSelfLooping updates the request context with a boolean value indicating whether the request is in a self-looping state. +func SetSelfLooping(r *http.Request, value bool) { + r = selfLoopingValue.Set(r, value) +} + +// IsSelfLooping returns true if the request is flagged as self-looping, indicating it originates and targets the same service. +func IsSelfLooping(r *http.Request) bool { + return selfLoopingValue.Get(r) +} From 24520260bda93e8942df9fe759f71f5ec106f712 Mon Sep 17 00:00:00 2001 From: Burak Sezer Date: Tue, 17 Dec 2024 20:01:05 +0300 Subject: [PATCH 05/15] [TT-12741] Make typechecker happy. --- gateway/looping_test.go | 40 +++++++++++++++++++------------------- gateway/middleware_test.go | 3 ++- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/gateway/looping_test.go b/gateway/looping_test.go index 83e02fd5cd9..26302bdba9d 100644 --- a/gateway/looping_test.go +++ b/gateway/looping_test.go @@ -328,11 +328,11 @@ func TestLooping(t *testing.T) { t.Run("Looping to another api with auth tokens", func(t *testing.T) { specs := ts.Gw.BuildAndLoadAPI(func(spec *APISpec) { - spec.APIID = "apia" - spec.Name = "ApiA" - spec.Proxy.ListenPath = "/apia" - spec.UseKeylessAccess = false - spec.AuthConfigs = map[string]apidef.AuthConfig{ + spec.APIDefinition.APIID = "apia" + spec.APIDefinition.Name = "ApiA" + spec.APIDefinition.Proxy.ListenPath = "/apia" + spec.APIDefinition.UseKeylessAccess = false + spec.APIDefinition.AuthConfigs = map[string]apidef.AuthConfig{ "authToken": { AuthHeaderName: "Authorization", }, @@ -347,11 +347,11 @@ func TestLooping(t *testing.T) { }} }) }, func(spec *APISpec) { - spec.APIID = "apib" - spec.Name = "ApiB" - spec.Proxy.ListenPath = "/apib" - spec.UseKeylessAccess = false - spec.AuthConfigs = map[string]apidef.AuthConfig{ + spec.APIDefinition.APIID = "apib" + spec.APIDefinition.Name = "ApiB" + spec.APIDefinition.Proxy.ListenPath = "/apib" + spec.APIDefinition.UseKeylessAccess = false + spec.APIDefinition.AuthConfigs = map[string]apidef.AuthConfig{ "authToken": { AuthHeaderName: "X-Api-Key", }, @@ -362,26 +362,26 @@ func TestLooping(t *testing.T) { _, authKeyForApiA := ts.CreateSession(func(s *user.SessionState) { s.AccessRights = map[string]user.AccessDefinition{ - specApiA.APIID: { - APIName: specApiA.Name, - APIID: specApiA.APIID, + specApiA.APIDefinition.APIID: { + APIName: specApiA.APIDefinition.Name, + APIID: specApiA.APIDefinition.APIID, Versions: []string{"default"}, - AllowanceScope: specApiA.APIID, + AllowanceScope: specApiA.APIDefinition.APIID, }, } - s.OrgID = specApiA.OrgID + s.OrgID = specApiA.APIDefinition.OrgID }) _, authKeyForApiB := ts.CreateSession(func(s *user.SessionState) { s.AccessRights = map[string]user.AccessDefinition{ - specApiB.APIID: { - APIName: specApiB.Name, - APIID: specApiB.APIID, + specApiB.APIDefinition.APIID: { + APIName: specApiB.APIDefinition.Name, + APIID: specApiB.APIDefinition.APIID, Versions: []string{"default"}, - AllowanceScope: specApiB.APIID, + AllowanceScope: specApiB.APIDefinition.APIID, }, } - s.OrgID = specApiB.OrgID + s.OrgID = specApiB.APIDefinition.OrgID }) headersWithApiBToken := map[string]string{ diff --git a/gateway/middleware_test.go b/gateway/middleware_test.go index 630e4eea0b8..d8c443f09ae 100644 --- a/gateway/middleware_test.go +++ b/gateway/middleware_test.go @@ -7,12 +7,13 @@ import ( "net/http" "testing" + "github.com/stretchr/testify/assert" + "github.com/TykTechnologies/tyk/apidef" headers2 "github.com/TykTechnologies/tyk/header" "github.com/TykTechnologies/tyk/internal/cache" "github.com/TykTechnologies/tyk/internal/uuid" "github.com/TykTechnologies/tyk/test" - "github.com/stretchr/testify/assert" "github.com/TykTechnologies/tyk/config" "github.com/TykTechnologies/tyk/user" From cd0965ab6369ab3968304b9e4f006ad7e67c7d71 Mon Sep 17 00:00:00 2001 From: Burak Sezer Date: Tue, 17 Dec 2024 20:06:30 +0300 Subject: [PATCH 06/15] [TT-12741] Drop ineffectual assignment to r --- internal/httpctx/context.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/httpctx/context.go b/internal/httpctx/context.go index 844046103ac..daa41d2b922 100644 --- a/internal/httpctx/context.go +++ b/internal/httpctx/context.go @@ -33,7 +33,7 @@ var selfLoopingValue = NewValue[bool](ctx.SelfLooping) // SetSelfLooping updates the request context with a boolean value indicating whether the request is in a self-looping state. func SetSelfLooping(r *http.Request, value bool) { - r = selfLoopingValue.Set(r, value) + selfLoopingValue.Set(r, value) } // IsSelfLooping returns true if the request is flagged as self-looping, indicating it originates and targets the same service. From 90d8ce4cbbee8c79c6bec5fe18983ece3f489c1d Mon Sep 17 00:00:00 2001 From: Burak Sezer Date: Wed, 18 Dec 2024 12:08:39 +0300 Subject: [PATCH 07/15] [TT-12741] Move integration test to its own function. --- gateway/looping_test.go | 169 ++++++++++++++++++++-------------------- 1 file changed, 86 insertions(+), 83 deletions(-) diff --git a/gateway/looping_test.go b/gateway/looping_test.go index 26302bdba9d..3f4f5d32fa8 100644 --- a/gateway/looping_test.go +++ b/gateway/looping_test.go @@ -325,97 +325,100 @@ func TestLooping(t *testing.T) { {Path: "/external/", Code: 200}, }...) }) +} - t.Run("Looping to another api with auth tokens", func(t *testing.T) { - specs := ts.Gw.BuildAndLoadAPI(func(spec *APISpec) { - spec.APIDefinition.APIID = "apia" - spec.APIDefinition.Name = "ApiA" - spec.APIDefinition.Proxy.ListenPath = "/apia" - spec.APIDefinition.UseKeylessAccess = false - spec.APIDefinition.AuthConfigs = map[string]apidef.AuthConfig{ - "authToken": { - AuthHeaderName: "Authorization", - }, - } - UpdateAPIVersion(spec, "Default", func(v *apidef.VersionInfo) { - v.UseExtendedPaths = true - v.ExtendedPaths.URLRewrite = []apidef.URLRewriteMeta{{ - Path: "/", - Method: http.MethodGet, - MatchPattern: ".*", - RewriteTo: "tyk://apib", - }} - }) - }, func(spec *APISpec) { - spec.APIDefinition.APIID = "apib" - spec.APIDefinition.Name = "ApiB" - spec.APIDefinition.Proxy.ListenPath = "/apib" - spec.APIDefinition.UseKeylessAccess = false - spec.APIDefinition.AuthConfigs = map[string]apidef.AuthConfig{ - "authToken": { - AuthHeaderName: "X-Api-Key", - }, - } - }) - specApiA := specs[0] - specApiB := specs[1] - - _, authKeyForApiA := ts.CreateSession(func(s *user.SessionState) { - s.AccessRights = map[string]user.AccessDefinition{ - specApiA.APIDefinition.APIID: { - APIName: specApiA.APIDefinition.Name, - APIID: specApiA.APIDefinition.APIID, - Versions: []string{"default"}, - AllowanceScope: specApiA.APIDefinition.APIID, - }, - } - s.OrgID = specApiA.APIDefinition.OrgID - }) - - _, authKeyForApiB := ts.CreateSession(func(s *user.SessionState) { - s.AccessRights = map[string]user.AccessDefinition{ - specApiB.APIDefinition.APIID: { - APIName: specApiB.APIDefinition.Name, - APIID: specApiB.APIDefinition.APIID, - Versions: []string{"default"}, - AllowanceScope: specApiB.APIDefinition.APIID, - }, - } - s.OrgID = specApiB.APIDefinition.OrgID - }) +func TestLooping_AnotherAPIWithAuthTokens(t *testing.T) { + ts := StartTest(nil) + defer ts.Close() - headersWithApiBToken := map[string]string{ - "Authorization": authKeyForApiA, - "X-Api-Key": authKeyForApiB, - } - headersWithoutApiBToken := map[string]string{ - "Authorization": authKeyForApiA, - "X-Api-Key": "some-string", - } - headersWithOnlyApiAToken := map[string]string{ - "Authorization": authKeyForApiA, + // Looping to another api with auth tokens + specs := ts.Gw.BuildAndLoadAPI(func(spec *APISpec) { + spec.APIDefinition.APIID = "apia" + spec.APIDefinition.Name = "ApiA" + spec.APIDefinition.Proxy.ListenPath = "/apia" + spec.APIDefinition.UseKeylessAccess = false + spec.APIDefinition.AuthConfigs = map[string]apidef.AuthConfig{ + "authToken": { + AuthHeaderName: "Authorization", + }, } - _, _ = ts.Run(t, []test.TestCase{ - { - Headers: headersWithApiBToken, - Path: "/apia", - Code: http.StatusOK, + UpdateAPIVersion(spec, "Default", func(v *apidef.VersionInfo) { + v.UseExtendedPaths = true + v.ExtendedPaths.URLRewrite = []apidef.URLRewriteMeta{{ + Path: "/", + Method: http.MethodGet, + MatchPattern: ".*", + RewriteTo: "tyk://apib", + }} + }) + }, func(spec *APISpec) { + spec.APIDefinition.APIID = "apib" + spec.APIDefinition.Name = "ApiB" + spec.APIDefinition.Proxy.ListenPath = "/apib" + spec.APIDefinition.UseKeylessAccess = false + spec.APIDefinition.AuthConfigs = map[string]apidef.AuthConfig{ + "authToken": { + AuthHeaderName: "X-Api-Key", }, - { - Headers: headersWithoutApiBToken, - Path: "/apia", - Code: http.StatusForbidden, - BodyMatch: "Access to this API has been disallowed", + } + }) + specApiA := specs[0] + specApiB := specs[1] + + _, authKeyForApiA := ts.CreateSession(func(s *user.SessionState) { + s.AccessRights = map[string]user.AccessDefinition{ + specApiA.APIDefinition.APIID: { + APIName: specApiA.APIDefinition.Name, + APIID: specApiA.APIDefinition.APIID, + Versions: []string{"default"}, + AllowanceScope: specApiA.APIDefinition.APIID, }, - { - Headers: headersWithOnlyApiAToken, - Path: "/apia", - Code: http.StatusUnauthorized, - BodyMatch: "Authorization field missing", + } + s.OrgID = specApiA.APIDefinition.OrgID + }) + + _, authKeyForApiB := ts.CreateSession(func(s *user.SessionState) { + s.AccessRights = map[string]user.AccessDefinition{ + specApiB.APIDefinition.APIID: { + APIName: specApiB.APIDefinition.Name, + APIID: specApiB.APIDefinition.APIID, + Versions: []string{"default"}, + AllowanceScope: specApiB.APIDefinition.APIID, }, - }...) + } + s.OrgID = specApiB.APIDefinition.OrgID }) + headersWithApiBToken := map[string]string{ + "Authorization": authKeyForApiA, + "X-Api-Key": authKeyForApiB, + } + headersWithoutApiBToken := map[string]string{ + "Authorization": authKeyForApiA, + "X-Api-Key": "some-string", + } + headersWithOnlyApiAToken := map[string]string{ + "Authorization": authKeyForApiA, + } + _, _ = ts.Run(t, []test.TestCase{ + { + Headers: headersWithApiBToken, + Path: "/apia", + Code: http.StatusOK, + }, + { + Headers: headersWithoutApiBToken, + Path: "/apia", + Code: http.StatusForbidden, + BodyMatch: "Access to this API has been disallowed", + }, + { + Headers: headersWithOnlyApiAToken, + Path: "/apia", + Code: http.StatusUnauthorized, + BodyMatch: "Authorization field missing", + }, + }...) } func TestConcurrencyReloads(t *testing.T) { From 487c4c48ba82a1166364af6412299acf6f127e11 Mon Sep 17 00:00:00 2001 From: Burak Sezer Date: Wed, 18 Dec 2024 12:17:51 +0300 Subject: [PATCH 08/15] [TT-12741] Add TestSetSelfLooping and TestIsSelfLooping --- internal/httpctx/context_test.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/internal/httpctx/context_test.go b/internal/httpctx/context_test.go index 758fc60b37c..6f4f4fd9f1a 100644 --- a/internal/httpctx/context_test.go +++ b/internal/httpctx/context_test.go @@ -62,3 +62,23 @@ func TestValue_SetDifferentTypes(t *testing.T) { retrievedInt := intValue.Get(req) assert.Equal(t, expectedInt, retrievedInt, "Retrieved int value does not match expected value") } + +func TestSetSelfLooping(t *testing.T) { + // Create a new HTTP request using httptest + req := httptest.NewRequest("GET", "/", nil) + httpctx.SetSelfLooping(req, true) + + // Expected value from the context is true + expectedBool := httpctx.IsSelfLooping(req) + assert.True(t, expectedBool) +} + +func TestIsSelfLooping(t *testing.T) { + // Create a new HTTP request using httptest + req := httptest.NewRequest("GET", "/", nil) + + // Expected value from the context is false because we didn't call + // SetSelfLooping before. + expectedBool := httpctx.IsSelfLooping(req) + assert.False(t, expectedBool) +} From 0a6aed6508f787fb8f14d5fe1cb15c44cbf52e25 Mon Sep 17 00:00:00 2001 From: Burak Sezer Date: Wed, 18 Dec 2024 17:11:10 +0300 Subject: [PATCH 09/15] [TT-12741] Delete the predefined version here to prevent flakiness. --- gateway/looping_test.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gateway/looping_test.go b/gateway/looping_test.go index 3f4f5d32fa8..c9dace17065 100644 --- a/gateway/looping_test.go +++ b/gateway/looping_test.go @@ -342,6 +342,10 @@ func TestLooping_AnotherAPIWithAuthTokens(t *testing.T) { AuthHeaderName: "Authorization", }, } + + // Delete the predefined version here to prevent flakiness. + delete(spec.VersionData.Versions, "v1") + UpdateAPIVersion(spec, "Default", func(v *apidef.VersionInfo) { v.UseExtendedPaths = true v.ExtendedPaths.URLRewrite = []apidef.URLRewriteMeta{{ From 43913f1b90236ac9ce5e67f3c0a0e5cbfa8416b9 Mon Sep 17 00:00:00 2001 From: Tit Petric Date: Wed, 18 Dec 2024 19:35:35 +0100 Subject: [PATCH 10/15] Update gateway/looping_test.go --- gateway/looping_test.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/gateway/looping_test.go b/gateway/looping_test.go index c9dace17065..835083b0eaa 100644 --- a/gateway/looping_test.go +++ b/gateway/looping_test.go @@ -343,10 +343,7 @@ func TestLooping_AnotherAPIWithAuthTokens(t *testing.T) { }, } - // Delete the predefined version here to prevent flakiness. - delete(spec.VersionData.Versions, "v1") - - UpdateAPIVersion(spec, "Default", func(v *apidef.VersionInfo) { + UpdateAPIVersion(spec, "v1", func(v *apidef.VersionInfo) { v.UseExtendedPaths = true v.ExtendedPaths.URLRewrite = []apidef.URLRewriteMeta{{ Path: "/", From 4f0148dfd065c3b465222b4577c433112f1f682f Mon Sep 17 00:00:00 2001 From: Tit Petric Date: Wed, 18 Dec 2024 19:36:38 +0100 Subject: [PATCH 11/15] Apply suggestions from code review httpctx test updates --- internal/httpctx/context_test.go | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/internal/httpctx/context_test.go b/internal/httpctx/context_test.go index 6f4f4fd9f1a..194fb5230ad 100644 --- a/internal/httpctx/context_test.go +++ b/internal/httpctx/context_test.go @@ -64,21 +64,10 @@ func TestValue_SetDifferentTypes(t *testing.T) { } func TestSetSelfLooping(t *testing.T) { - // Create a new HTTP request using httptest req := httptest.NewRequest("GET", "/", nil) + assert.False(t, httpctx.IsSelfLooping(req) httpctx.SetSelfLooping(req, true) - - // Expected value from the context is true - expectedBool := httpctx.IsSelfLooping(req) - assert.True(t, expectedBool) -} - -func TestIsSelfLooping(t *testing.T) { - // Create a new HTTP request using httptest - req := httptest.NewRequest("GET", "/", nil) - - // Expected value from the context is false because we didn't call - // SetSelfLooping before. - expectedBool := httpctx.IsSelfLooping(req) - assert.False(t, expectedBool) + assert.True(t, httpctx.IsSelfLooping(req) + httpctx.SetSelfLooping(req, false) + assert.False(t, httpctx.IsSelfLooping(req) } From 15f3d671a3830db1c1f6b185a8fc463a1a36273e Mon Sep 17 00:00:00 2001 From: Tit Petric Date: Wed, 18 Dec 2024 19:40:10 +0100 Subject: [PATCH 12/15] httpctx: cleanup --- internal/httpctx/context.go | 14 -------------- internal/httpctx/context_test.go | 9 --------- internal/httpctx/looping.go | 19 +++++++++++++++++++ internal/httpctx/looping_test.go | 19 +++++++++++++++++++ 4 files changed, 38 insertions(+), 23 deletions(-) create mode 100644 internal/httpctx/looping.go create mode 100644 internal/httpctx/looping_test.go diff --git a/internal/httpctx/context.go b/internal/httpctx/context.go index daa41d2b922..a139172e9a5 100644 --- a/internal/httpctx/context.go +++ b/internal/httpctx/context.go @@ -3,8 +3,6 @@ package httpctx import ( "context" "net/http" - - "github.com/TykTechnologies/tyk/ctx" ) type Value[T any] struct { @@ -28,15 +26,3 @@ func (v *Value[T]) Set(r *http.Request, val T) *http.Request { *r = *h return h } - -var selfLoopingValue = NewValue[bool](ctx.SelfLooping) - -// SetSelfLooping updates the request context with a boolean value indicating whether the request is in a self-looping state. -func SetSelfLooping(r *http.Request, value bool) { - selfLoopingValue.Set(r, value) -} - -// IsSelfLooping returns true if the request is flagged as self-looping, indicating it originates and targets the same service. -func IsSelfLooping(r *http.Request) bool { - return selfLoopingValue.Get(r) -} diff --git a/internal/httpctx/context_test.go b/internal/httpctx/context_test.go index 194fb5230ad..758fc60b37c 100644 --- a/internal/httpctx/context_test.go +++ b/internal/httpctx/context_test.go @@ -62,12 +62,3 @@ func TestValue_SetDifferentTypes(t *testing.T) { retrievedInt := intValue.Get(req) assert.Equal(t, expectedInt, retrievedInt, "Retrieved int value does not match expected value") } - -func TestSetSelfLooping(t *testing.T) { - req := httptest.NewRequest("GET", "/", nil) - assert.False(t, httpctx.IsSelfLooping(req) - httpctx.SetSelfLooping(req, true) - assert.True(t, httpctx.IsSelfLooping(req) - httpctx.SetSelfLooping(req, false) - assert.False(t, httpctx.IsSelfLooping(req) -} diff --git a/internal/httpctx/looping.go b/internal/httpctx/looping.go new file mode 100644 index 00000000000..708cd5eb3c5 --- /dev/null +++ b/internal/httpctx/looping.go @@ -0,0 +1,19 @@ +package httpctx + +import ( + "net/http" + + "github.com/TykTechnologies/tyk/ctx" +) + +var selfLoopingValue = NewValue[bool](ctx.SelfLooping) + +// SetSelfLooping updates the request context with a boolean value indicating whether the request is in a self-looping state. +func SetSelfLooping(r *http.Request, value bool) { + selfLoopingValue.Set(r, value) +} + +// IsSelfLooping returns true if the request is flagged as self-looping, indicating it originates and targets the same service. +func IsSelfLooping(r *http.Request) bool { + return selfLoopingValue.Get(r) +} diff --git a/internal/httpctx/looping_test.go b/internal/httpctx/looping_test.go new file mode 100644 index 00000000000..878984fee54 --- /dev/null +++ b/internal/httpctx/looping_test.go @@ -0,0 +1,19 @@ +package httpctx_test + +import ( + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/TykTechnologies/tyk/internal/httpctx" +) + +func TestSetSelfLooping(t *testing.T) { + req := httptest.NewRequest("GET", "/", nil) + assert.False(t, httpctx.IsSelfLooping(req)) + httpctx.SetSelfLooping(req, true) + assert.True(t, httpctx.IsSelfLooping(req)) + httpctx.SetSelfLooping(req, false) + assert.False(t, httpctx.IsSelfLooping(req)) +} From 80f5e1d9fc4e978400805cd193ba871e35bec05f Mon Sep 17 00:00:00 2001 From: Tit Petric Date: Wed, 18 Dec 2024 20:06:13 +0100 Subject: [PATCH 13/15] Fix quota test version --- gateway/middleware_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gateway/middleware_test.go b/gateway/middleware_test.go index d8c443f09ae..51a905d2855 100644 --- a/gateway/middleware_test.go +++ b/gateway/middleware_test.go @@ -417,7 +417,7 @@ func TestQuotaNotAppliedWithURLRewrite(t *testing.T) { spec := ts.Gw.BuildAndLoadAPI(func(spec *APISpec) { spec.Proxy.ListenPath = "/quota-test" spec.UseKeylessAccess = false - UpdateAPIVersion(spec, "Default", func(v *apidef.VersionInfo) { + UpdateAPIVersion(spec, "v1", func(v *apidef.VersionInfo) { v.UseExtendedPaths = true v.ExtendedPaths.URLRewrite = []apidef.URLRewriteMeta{{ Path: "/abc", From 4613b56dc3d9f9f407c29d3168d0fce56d21e361 Mon Sep 17 00:00:00 2001 From: Tit Petric Date: Wed, 18 Dec 2024 21:19:44 +0100 Subject: [PATCH 14/15] Fix import groups --- gateway/api_loader.go | 3 +-- gateway/mw_auth_key.go | 13 +++++-------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/gateway/api_loader.go b/gateway/api_loader.go index ec380566d0c..3a2b9c01984 100644 --- a/gateway/api_loader.go +++ b/gateway/api_loader.go @@ -15,8 +15,6 @@ import ( "sync" texttemplate "text/template" - "github.com/TykTechnologies/tyk/internal/httpctx" - "github.com/gorilla/mux" "github.com/justinas/alice" "github.com/rs/cors" @@ -28,6 +26,7 @@ import ( "github.com/TykTechnologies/tyk/storage" "github.com/TykTechnologies/tyk/trace" + "github.com/TykTechnologies/tyk/internal/httpctx" "github.com/TykTechnologies/tyk/internal/httputil" "github.com/TykTechnologies/tyk/internal/otel" ) diff --git a/gateway/mw_auth_key.go b/gateway/mw_auth_key.go index e502cdc8df4..aa2cf767c03 100644 --- a/gateway/mw_auth_key.go +++ b/gateway/mw_auth_key.go @@ -6,18 +6,15 @@ import ( "strings" "time" - "github.com/TykTechnologies/tyk/internal/httpctx" - - "github.com/TykTechnologies/tyk/internal/crypto" - "github.com/TykTechnologies/tyk/internal/otel" - "github.com/TykTechnologies/tyk/storage" - - "github.com/TykTechnologies/tyk/user" - "github.com/TykTechnologies/tyk/apidef" "github.com/TykTechnologies/tyk/config" + "github.com/TykTechnologies/tyk/internal/crypto" + "github.com/TykTechnologies/tyk/internal/httpctx" + "github.com/TykTechnologies/tyk/internal/otel" "github.com/TykTechnologies/tyk/request" signaturevalidator "github.com/TykTechnologies/tyk/signature_validator" + "github.com/TykTechnologies/tyk/storage" + "github.com/TykTechnologies/tyk/user" ) const ( From 66604c347fc5d3f0023c31b5cf6338ff12ee7b20 Mon Sep 17 00:00:00 2001 From: Tit Petric Date: Thu, 19 Dec 2024 13:08:21 +0100 Subject: [PATCH 15/15] Add middleware looping diagram --- docs/diagrams/middleware-looping.png | Bin 0 -> 87306 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/diagrams/middleware-looping.png diff --git a/docs/diagrams/middleware-looping.png b/docs/diagrams/middleware-looping.png new file mode 100644 index 0000000000000000000000000000000000000000..93895b052cc43bf7281fb7394bd0f80b78a10d0e GIT binary patch literal 87306 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 literal 0 HcmV?d00001