private static StructuredTransformer CreateTransformer(TransformBuilderContext context) { // RequestHeaderOriginalHostKey defaults to false, and CopyRequestHeaders defaults to true. // If RequestHeaderOriginalHostKey was not specified then we need to make sure the transform gets // added anyways to remove the original host. If CopyRequestHeaders is false then we can omit the // transform. if (context.CopyRequestHeaders.GetValueOrDefault(true) && !context.RequestTransforms.Any(item => item is RequestHeaderOriginalHostTransform)) { context.AddOriginalHost(false); } // Add default forwarders only if they haven't already been added or disabled. if (context.UseDefaultForwarders.GetValueOrDefault(true)) { context.AddXForwarded(); } return(new StructuredTransformer( context.CopyRequestHeaders, context.CopyResponseHeaders, context.CopyResponseTrailers, context.RequestTransforms, context.ResponseTransforms, context.ResponseTrailersTransforms)); }
internal static void RemoveAllXForwardedHeaders(TransformBuilderContext context, string prefix) { context.AddXForwardedFor(prefix + ForwardedTransformFactory.ForKey, ForwardedTransformActions.Remove); context.AddXForwardedPrefix(prefix + ForwardedTransformFactory.PrefixKey, ForwardedTransformActions.Remove); context.AddXForwardedHost(prefix + ForwardedTransformFactory.HostKey, ForwardedTransformActions.Remove); context.AddXForwardedProto(prefix + ForwardedTransformFactory.ProtoKey, ForwardedTransformActions.Remove); }
internal StructuredTransformer CreateInternal(Action <TransformBuilderContext> action) { var context = new TransformBuilderContext { Services = _services, }; action(context); return(CreateTransformer(context)); }
// This is separate from Build for testing purposes. internal StructuredTransformer BuildInternal(RouteConfig route, ClusterConfig?cluster) { var rawTransforms = route.Transforms; var context = new TransformBuilderContext { Services = _services, Route = route, Cluster = cluster, }; if (rawTransforms?.Count > 0) { foreach (var rawTransform in rawTransforms) { var handled = false; foreach (var factory in _factories) { if (factory.Build(context, rawTransform)) { handled = true; break; } } if (!handled) { throw new ArgumentException($"Unknown transform: {string.Join(';', rawTransform.Keys)}"); } } } // Let the app add any more transforms it wants. foreach (var transformProvider in _providers) { transformProvider.Apply(context); } return(CreateTransformer(context)); }
public void Apply(TransformBuilderContext transformBuildContext) { _action(transformBuildContext); }
internal static void RemoveForwardedHeader(TransformBuilderContext context) { context.RequestTransforms.Add(RequestHeaderForwardedTransform.RemoveTransform); }