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");
        }
Пример #12
0
        /// <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");
        }