Gallatin.Core.Service.ProxyFilter.EvaluateConnectionFilters C# (CSharp) Method

EvaluateConnectionFilters() public method

public EvaluateConnectionFilters ( IHttpRequest args, string connectionId ) : byte[]
args IHttpRequest
connectionId string
return byte[]
        public byte[] EvaluateConnectionFilters( IHttpRequest args, string connectionId )
        {
            if (!_settings.FilteringEnabled.Value || IsWhitelisted(args, connectionId))
            {
                return null;
            }

            if ( ConnectionFilters !=null && ConnectionFilters.Count() > 0 )
            {
                string errorMessage = ConnectionFilters.OrderBy( s => s.FilterSpeedType )
                    .Select( filter => filter.EvaluateFilter( args, connectionId ) )
                    .FirstOrDefault( filterText => !String.IsNullOrEmpty( filterText ) );

                if ( !String.IsNullOrEmpty( errorMessage ) )
                {
                    string body = String.Format(
                        "<html><head><title>Gallatin Proxy - Connection Rejected</title></head><body>{0}</body></html>",
                        errorMessage );

                    return Encoding.UTF8.GetBytes(
                        String.Format( "HTTP/{0} 200 OK\r\nConnection: close\r\nContent length: {1}\r\nContent-Type: text/html\r\n\r\n{2}",
                                       args.Version,
                                       body.Length,
                                       body ) );
                }
            }

            return null;
        }

Usage Example

        public void VerifyConnectionFilterSort([Values(true, false)] bool filterEnabled, [Values(true, false)] bool isWhitelisted)
        {
            Mock<ICoreSettings> settings = new Mock<ICoreSettings>();
            settings.SetupGet(m => m.FilteringEnabled).Returns(filterEnabled);

            ProxyFilter filter = new ProxyFilter(settings.Object);
            List<IConnectionFilter> filters = new List<IConnectionFilter>();

            Mock<IHttpRequest> requestArgs = new Mock<IHttpRequest>();
            requestArgs.SetupAllProperties();

            Mock<IWhitelistEvaluator> whiteLister = new Mock<IWhitelistEvaluator>();
            whiteLister.Setup(m => m.IsWhitlisted(requestArgs.Object, "whatever")).Returns(isWhitelisted);
            List<IWhitelistEvaluator> whitelistEvaluators = new List<IWhitelistEvaluator>();
            whitelistEvaluators.Add(whiteLister.Object);

            Mock<IConnectionFilter> mockFilter = new Mock<IConnectionFilter>();
            mockFilter.SetupGet( s => s.FilterSpeedType ).Returns( FilterSpeedType.Remote );

            Mock<IConnectionFilter> mockFilter2 = new Mock<IConnectionFilter>();
            mockFilter2.SetupGet( s => s.FilterSpeedType ).Returns( FilterSpeedType.LocalAndFast );
            mockFilter2.Setup( s => s.EvaluateFilter( requestArgs.Object, It.IsAny<string>() ) ).Returns( "Foo" );

            filters.Add( mockFilter.Object );
            filters.Add( mockFilter2.Object );
            filter.ConnectionFilters = filters;
            filter.WhitelistEvaluators = whitelistEvaluators;

            byte[] output = filter.EvaluateConnectionFilters( requestArgs.Object, "whatever" );

            if (filterEnabled && !isWhitelisted)
            {
                Assert.That(output,
                             Is.EqualTo(
                                 Encoding.UTF8.GetBytes( "HTTP/ 200 OK\r\nConnection: close\r\nContent length: 93\r\nContent-Type: text/html\r\n\r\n<html><head><title>Gallatin Proxy - Connection Rejected</title></head><body>Foo</body></html>")));
            }
            else
            {
                Assert.That( output, Is.Null );
            }
        }
All Usage Examples Of Gallatin.Core.Service.ProxyFilter::EvaluateConnectionFilters