github.com/craicoverflow/tyk@v2.9.6-rc3+incompatible/gateway/mw_modify_headers.go (about) 1 package gateway 2 3 import ( 4 "net/http" 5 6 "github.com/TykTechnologies/tyk/apidef" 7 ) 8 9 // TransformMiddleware is a middleware that will apply a template to a request body to transform it's contents ready for an upstream API 10 type TransformHeaders struct { 11 BaseMiddleware 12 } 13 14 func (t *TransformHeaders) Name() string { 15 return "TransformHeaders" 16 } 17 18 func (t *TransformHeaders) EnabledForSpec() bool { 19 for _, version := range t.Spec.VersionData.Versions { 20 if len(version.ExtendedPaths.TransformHeader) > 0 || 21 len(version.GlobalHeaders) > 0 || 22 len(version.GlobalHeadersRemove) > 0 { 23 return true 24 } 25 } 26 return false 27 } 28 29 // ProcessRequest will run any checks on the request on the way through the system, return an error to have the chain fail 30 func (t *TransformHeaders) ProcessRequest(w http.ResponseWriter, r *http.Request, _ interface{}) (error, int) { 31 vInfo, versionPaths, _, _ := t.Spec.Version(r) 32 33 // Manage global headers first - remove 34 for _, gdKey := range vInfo.GlobalHeadersRemove { 35 t.Logger().Debug("Removing: ", gdKey) 36 r.Header.Del(gdKey) 37 } 38 39 // Add 40 for nKey, nVal := range vInfo.GlobalHeaders { 41 t.Logger().Debug("Adding: ", nKey) 42 r.Header.Set(nKey, replaceTykVariables(r, nVal, false)) 43 } 44 45 found, meta := t.Spec.CheckSpecMatchesStatus(r, versionPaths, HeaderInjected) 46 if found { 47 hmeta := meta.(*apidef.HeaderInjectionMeta) 48 for _, dKey := range hmeta.DeleteHeaders { 49 r.Header.Del(dKey) 50 } 51 for nKey, nVal := range hmeta.AddHeaders { 52 r.Header.Set(nKey, replaceTykVariables(r, nVal, false)) 53 } 54 } 55 56 return nil, http.StatusOK 57 }