public void multiple_key_value() { var header = ForwardedHeader.Parse("key=one,key=two"); header.ElementAt(0)["key"].ShouldBe("one"); header.ElementAt(1)["key"].ShouldBe("two"); }
public void key_with_quoted_string_value() { var header = ForwardedHeader.Parse("key=\"value with space\"") .ShouldHaveSingleItem(); header["key"].ShouldBe("value with space"); }
public void key_with_empty_quoted_string() { var header = ForwardedHeader.Parse("key=\"\"") .ShouldHaveSingleItem(); header["key"].ShouldBe(""); }
public void one_key_with_token_value_is_parsed() { var header = ForwardedHeader.Parse("key=value") .ShouldHaveSingleItem(); header["key"].ShouldBe("value"); }
public void multiple_pairs_with_token_value() { var header = ForwardedHeader.Parse("key=value;another=anothervalue") .ShouldHaveSingleItem(); header["key"].ShouldBe("value"); header["another"].ShouldBe("anothervalue"); }
public void ParseReturnsNull() { var context = new DefaultHttpContext(); var header = ForwardedHeader.FromHttpContext(context); Assert.Null(header); }
public void XForwardedProtocolRead(string key, string value) { var context = new DefaultHttpContext(); context.Request.Headers[key] = value; var header = ForwardedHeader.FromHttpContext(context); Assert.Equal(header.Protocol, ProtocolType.Https); }
public void XForwardedPortRead() { var port = 8081; var context = new DefaultHttpContext(); context.Request.Headers["X-Forwarded-Port"] = port.ToString(); var header = ForwardedHeader.FromHttpContext(context); Assert.Equal(header.Port, port); }
public void XForwardedHostRead() { var host = "myhost"; var context = new DefaultHttpContext(); context.Request.Headers["X-Forwarded-Host"] = host; var header = ForwardedHeader.FromHttpContext(context); Assert.Equal(header.Host, host); }
public void XProxyUserIpRead() { var context = new DefaultHttpContext(); context.Request.Headers["X-ProxyUser-Ip"] = "172.217.20.195"; var header = ForwardedHeader.FromHttpContext(context); Assert.Equal(header.For.Count, 1); Assert.Contains(header.For, f => f == "172.217.20.195"); }
public void XForwardedForParsed() { var context = new DefaultHttpContext(); context.Request.Headers["X-Forwarded-for"] = "172.217.20.195, fd00::211:32ff:fe0c:9319, clientA"; var header = ForwardedHeader.FromHttpContext(context); Assert.Equal(header.For.Count, 3); Assert.Contains(header.For, f => f == "172.217.20.195"); Assert.Contains(header.For, f => f == "fd00::211:32ff:fe0c:9319"); Assert.Contains(header.For, f => f == "clientA"); }
/// <summary> /// Applies X-Forwarded-* headers to the outgoing header collection. /// </summary> /// <remarks> /// Not a pure function because <see cref="HttpRequestHeaders"/> /// ctor is internal. /// </remarks> /// <param name="outgoingHeaders">The outgoing HTTP request headers.</param> /// <param name="for">The client IP address.</param> /// <param name="host">The host of the request.</param> /// <param name="proto">The protocol of the incoming request.</param> /// <param name="pathBase">The base path of the incoming request.</param> public static void ApplyForwardedHeaders( this HttpRequestHeaders outgoingHeaders, IPAddress @for, HostString host, string proto, PathString pathBase) { var forwardedHeader = new ForwardedHeader(@for, host, proto, pathBase); var headerValue = forwardedHeader.ToString(); if (!string.IsNullOrWhiteSpace(headerValue)) { outgoingHeaders.Add(Forwarded, forwardedHeader.ToString()); } }
public void XForwardedParsed() { var context = new DefaultHttpContext(); context.Request.Headers["Forwarded"] = " for=192.0.2.43 , for =198.51.100.17; " + "by = 203.0.113.60 ; proto=https;host= example.com "; var header = ForwardedHeader.FromHttpContext(context); Assert.Equal(header.For.Count, 2); Assert.Contains(header.For, f => f == "192.0.2.43"); Assert.Contains(header.For, f => f == "198.51.100.17"); Assert.Equal(header.By, "203.0.113.60"); Assert.Equal(header.Protocol, ProtocolType.Https); Assert.Equal(header.Host, "example.com"); }