public void ChangeFilter(Action <IRequestFilter> f)
        {
            IRequestFilter o = Filter;

            f(o);
            Filter = (RequestFilter)o;
        }
Ejemplo n.º 2
0
        private void InitializeRequestFilter(IRequestFilter requestFilter)
        {
            var factory = new RuleFactory();

            foreach (var item in appSettings.AllowedUrlRegexps)
            {
                var rule = factory.CreateRule(FilterRuleType.Regex);
                rule.Initialize(new FilterRuleSettings {
                    Expression = item, Result = FilterResult.Allow
                });
                requestFilter.Load(rule);
            }
            foreach (var item in appSettings.AllowedUrls)
            {
                var rule = factory.CreateRule(FilterRuleType.Simplified);
                rule.Initialize(new FilterRuleSettings {
                    Expression = item, Result = FilterResult.Allow
                });
                requestFilter.Load(rule);
            }

            if (requestFilter.Process(new Request {
                Url = startUrl
            }) != FilterResult.Allow)
            {
                var rule = factory.CreateRule(FilterRuleType.Simplified);
                rule.Initialize(new FilterRuleSettings {
                    Expression = startUrl, Result = FilterResult.Allow
                });
                requestFilter.Load(rule);
                logger.Debug($"Automatically created filter rule to allow start URL '{startUrl}'.");
            }
        }
Ejemplo n.º 3
0
        public FilterCondition[] GetFilterConditions(IRequestFilter cmd)
        {
            List <FilterCondition> conditions = new List <FilterCondition>();

            if (cmd != null && cmd.Fields != null)
            {
                for (int i = 0; i < cmd.Fields.Length; i++)
                {
                    conditions.Add(
                        new FilterCondition
                    {
                        FilterType         = cmd.FiltersType[i],
                        Property           = cmd.Fields[i],
                        DisplayName        = this.GetDisplayName(cmd.Fields[i]),
                        DefaultOperator    = int.Parse(cmd.Operators[i]),
                        DisplayOperator    = this.GetDisplayOperator(cmd.Fields[i], cmd.Operators[i]),
                        DefaultValue       = cmd.Values[i],
                        DisplayValue       = this.GetDisplayValue(cmd.FiltersType[i], cmd.Fields[i], cmd.Values[i]),
                        FilterExistsColumn = (cmd.ExistsColumns != null) ? cmd.ExistsColumns[i] : string.Empty
                    });
                }

                conditions.AddRange(GetInternalFilterConditions(cmd));
            }
            else if (cmd == null || cmd.HasDefaultConditions || (cmd.FilterInternalDictionary != null && cmd.FilterInternalDictionary.Count > 0))
            {
                conditions = this.GetDefaultFilterConditions(cmd);
            }

            return((conditions != null) ? conditions.ToArray() : new FilterCondition[0]);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Filters the request.
        /// </summary>
        /// <param name="readBuffer">The read buffer.</param>
        /// <param name="offset">The offset.</param>
        /// <param name="length">The length.</param>
        /// <param name="toBeCopied">if set to <c>true</c> [to be copied].</param>
        /// <param name="left">The left, the size of the data which has not been processed</param>
        /// <returns></returns>
        TRequestInfo FilterRequest(byte[] readBuffer, int offset, int length, bool toBeCopied, out int left)
        {
            if (!AppServer.OnRawDataReceived(this, readBuffer, offset, length))
            {
                left = 0;
                return(null);
            }

            var requestInfo = m_RequestFilter.Filter(this, readBuffer, offset, length, toBeCopied, out left);

            if (requestInfo == null)
            {
                int leftBufferCount = m_RequestFilter.LeftBufferSize;
                if (leftBufferCount >= AppServer.Config.MaxRequestLength)
                {
                    if (Logger.IsErrorEnabled)
                    {
                        Logger.ErrorFormat("Max command length: {0}, current processed length: {1}", AppServer.Config.MaxRequestLength, leftBufferCount);
                    }
                    Close(CloseReason.ServerClosing);
                    return(null);
                }
            }

            //If next request filter wasn't set, still use current request filter in next round received data processing
            if (m_RequestFilter.NextRequestFilter != null)
            {
                m_RequestFilter = m_RequestFilter.NextRequestFilter;
            }

            return(requestInfo);
        }
Ejemplo n.º 5
0
        IRequestRouter IRequestRouter.Add(IRequestFilter filter, int priority, string scenarioName)
        {
            var router = new RequestRouter();

            ((IRequestRouter)this).Register(router, filter, priority, scenarioName);
            return(router);
        }
 internal RequestHandler(AppConfig appConfig, IRequestFilter filter, ILogger logger, BrowserSettings settings, IText text)
 {
     this.filter          = filter;
     this.logger          = logger;
     this.settings        = settings;
     this.resourceHandler = new ResourceHandler(appConfig, settings, filter, logger, text);
 }
        private void InitializeRequestFilter(IRequestFilter requestFilter)
        {
            if (settings.Filter.ProcessContentRequests || settings.Filter.ProcessMainRequests)
            {
                var factory = new RuleFactory();

                foreach (var settings in settings.Filter.Rules)
                {
                    var rule = factory.CreateRule(settings.Type);

                    rule.Initialize(settings);
                    requestFilter.Load(rule);
                }

                logger.Debug($"Initialized request filter with {settings.Filter.Rules.Count} rule(s).");

                if (requestFilter.Process(new Request {
                    Url = settings.StartUrl
                }) != FilterResult.Allow)
                {
                    var rule = factory.CreateRule(FilterRuleType.Simplified);

                    rule.Initialize(new FilterRuleSettings {
                        Expression = settings.StartUrl, Result = FilterResult.Allow
                    });
                    requestFilter.Load(rule);

                    logger.Debug($"Automatically created filter rule to allow start URL{(WindowSettings.UrlPolicy.CanLog() ? $" '{settings.StartUrl}'" : "")}.");
                }
            }
        }
Ejemplo n.º 8
0
        public PaginatedList <TEntity> GetEntities(IComponentContext container, IRequestFilter cmd, Type modelType, string[] ordersBy, string[] directions, string[] includeProperties)
        {
            Filter filter = FilterFactory.GenerateFilter(container, cmd, modelType, new KeyValue {
                Key = (!string.IsNullOrEmpty(cmd.ParentKey)) ? int.Parse(cmd.ParentKey) : 0, Value = cmd.ParentValue
            });

            return(context.Paginate(container, filter, cmd, modelType, cmd.Page, cmd.Take, ordersBy, directions, includeProperties));
        }
Ejemplo n.º 9
0
 public IDisposable Register(IRunable runable, IRequestFilter filter, int priority, Type declaringType)
 {
     Runable       = runable;
     Filter        = filter;
     Priority      = priority;
     DeclaringType = declaringType;
     return(this);
 }
Ejemplo n.º 10
0
 internal ResourceHandler(AppConfig appConfig, BrowserFilterSettings settings, IRequestFilter filter, ILogger logger, IText text)
 {
     this.appConfig = appConfig;
     this.filter    = filter;
     this.logger    = logger;
     this.settings  = settings;
     this.text      = text;
 }
Ejemplo n.º 11
0
 public UdpSocketServer(IAppServer appServer, IPEndPoint localEndPoint, IRequestFilterFactory <TRequestInfo> requestFilterFactory)
     : base(appServer, localEndPoint)
 {
     if (typeof(TRequestInfo).IsSubclassOf(typeof(UdpRequestInfo)))
     {
         m_SessionIDFromRequestInfo = true;
         m_UdpRequestFilter         = requestFilterFactory.CreateFilter(this.AppServer);
     }
 }
Ejemplo n.º 12
0
 internal ResourceHandler(BrowserSettings settings, IRequestFilter filter, ILogger logger, IText text)
 {
     this.algorithm  = new SHA256Managed();
     this.htmlLoader = new HtmlLoader(text);
     this.filter     = filter;
     this.logger     = logger;
     this.text       = text;
     this.settings   = settings;
 }
Ejemplo n.º 13
0
 internal TestableResourceHandler(
     AppConfig appConfig,
     IRequestFilter filter,
     ILogger logger,
     BrowserSettings settings,
     WindowSettings windowSettings,
     IText text) : base(appConfig, filter, logger, settings, windowSettings, text)
 {
 }
Ejemplo n.º 14
0
 /// <summary>
 /// Initializes the specified app session by AppServer and SocketSession.
 /// </summary>
 /// <param name="appServer">The app server.</param>
 /// <param name="socketSession">The socket session.</param>
 /// <param name="requestFilter">The request filter.</param>
 public virtual void Initialize(IAppServer <TAppSession, TRequestInfo> appServer, ISocketSession socketSession, IRequestFilter <TRequestInfo> requestFilter)
 {
     AppServer       = (AppServerBase <TAppSession, TRequestInfo>)appServer;
     SocketSession   = socketSession;
     SessionID       = socketSession.SessionID;
     m_Connected     = true;
     m_RequestFilter = requestFilter;
     OnInit();
 }
 public IDisposable Register(IRunable runable, IRequestFilter filter, int priority, Type declaringType, string scenarioName)
 {
     Runable        = runable;
     Filter         = filter;
     Priority       = priority;
     DeclaringType  = declaringType;
     UserSegmentKey = scenarioName;
     return(this);
 }
 public IDisposable Register(IRunable runable, IRequestFilter filter, int priority, MethodInfo methodInfo, string scenarioName)
 {
     Runable        = runable;
     Filter         = filter;
     Priority       = priority;
     MethodInfo     = methodInfo;
     UserSegmentKey = scenarioName;
     return(this);
 }
Ejemplo n.º 17
0
 private static FilterCondition GetFilterCondition(IRequestFilter request, int index)
 {
     return(new FilterCondition
     {
         FilterType = request.FiltersType[index],
         Property = request.Fields[index],
         DefaultOperator = int.Parse(request.Operators[index]),
         DefaultValue = request.Values[index],
         FilterExistsColumn = (request.ExistsColumns != null) ? request.ExistsColumns[index] : null
     });
 }
Ejemplo n.º 18
0
        public void AddFilter(string name)
        {
            IRequestFilter filter = Gateway.Filters.GetFilter(name);

            if (filter == null)
            {
                Gateway.HttpServer.Log(BeetleX.EventArgs.LogType.Warring, $"{Url} route add filter error {name} filter not found!");
                return;
            }
            AddFilter(filter);
        }
Ejemplo n.º 19
0
        /// <summary>
        /// Initializes a new instance of the <see cref="UdpSocketServer&lt;TRequestInfo&gt;"/> class.
        /// </summary>
        /// <param name="appServer">The app server.</param>
        /// <param name="listeners">The listeners.</param>
        public UdpSocketServer(IAppServer appServer, ListenerInfo[] listeners)
            : base(appServer, listeners)
        {
            m_RequestHandler = appServer as IRequestHandler <TRequestInfo>;

            m_EndPointIPv4 = new IPEndPoint(IPAddress.Any, 0);
            m_EndPointIPv6 = new IPEndPoint(IPAddress.IPv6Any, 0);

            m_IsUdpRequestInfo = typeof(TRequestInfo).IsSubclassOf(typeof(UdpRequestInfo));

            m_UdpRequestFilter = ((IRequestFilterFactory <TRequestInfo>)appServer.RequestFilterFactory).CreateFilter(appServer, null, null);
        }
Ejemplo n.º 20
0
 internal RequestHandler(
     ILogger logger,
     BrowserSettings settings,
     IRequestFilter filter,
     ResourceHandler resourceHandler,
     IText text)
 {
     this.logger          = logger;
     this.settings        = settings;
     this.filter          = filter;
     this.resourceHandler = resourceHandler;
 }
Ejemplo n.º 21
0
 IDisposable IRequestRouter.Register(
     IRequestRouter router,
     IRequestFilter filter,
     int priority,
     string scenarioName)
 {
     return(Add(new Registration
     {
         Priority = priority,
         Filter = filter,
         TestScenarioName = string.IsNullOrWhiteSpace(scenarioName) ? null : scenarioName,
         Router = router
     }));
 }
Ejemplo n.º 22
0
 private void LoadFilter(IRequestFilter filter)
 {
     for (int i = 0; i < Filters.Count; i++)
     {
         if (Filters[i].Name == filter.Name)
         {
             Filters[i] = filter;
             return;
         }
     }
     Filters.Add(filter);
     Gateway.HttpServer.Log(BeetleX.EventArgs.LogType.Info, $"{Url} route load {filter.Name} filter");
     mRequestFilters = Filters.ToArray();
 }
Ejemplo n.º 23
0
        public override bool Handshake(IWebSocketSession session, WebSocketRequestFilterBase previousFilter, out IRequestFilter<IWebSocketFragment> dataFrameReader)
        {
            if (!VersionTag.Equals(session.SecWebSocketVersion) && NextProcessor != null)
            {
                return NextProcessor.Handshake(session, previousFilter, out dataFrameReader);
            }

            dataFrameReader = null;

            session.ProtocolProcessor = this;

            var secWebSocketKey = session.Items.GetValue<string>(WebSocketConstant.SecWebSocketKey, string.Empty);

            if (string.IsNullOrEmpty(secWebSocketKey))
            {
                return false;
            }

            var responseBuilder = new StringBuilder();

            string secKeyAccept = string.Empty;

            try
            {
                secKeyAccept = Convert.ToBase64String(SHA1.Create().ComputeHash(Encoding.ASCII.GetBytes(secWebSocketKey + m_Magic)));
            }
            catch (Exception)
            {
                return false;
            }

            responseBuilder.AppendWithCrCf(WebSocketConstant.ResponseHeadLine10);
            responseBuilder.AppendWithCrCf(WebSocketConstant.ResponseUpgradeLine);
            responseBuilder.AppendWithCrCf(WebSocketConstant.ResponseConnectionLine);
            responseBuilder.AppendFormatWithCrCf(WebSocketConstant.ResponseAcceptLine, secKeyAccept);

            var subProtocol = session.GetAvailableSubProtocol(session.Items.GetValue<string>(WebSocketConstant.SecWebSocketProtocol, string.Empty));

            if (!string.IsNullOrEmpty(subProtocol))
                responseBuilder.AppendFormatWithCrCf(WebSocketConstant.ResponseProtocolLine, subProtocol);

            responseBuilder.AppendWithCrCf();
            byte[] data = Encoding.UTF8.GetBytes(responseBuilder.ToString());
            session.SendRawData(data, 0, data.Length);

            dataFrameReader = new WebSocketDataFrameRequestFilter();

            return true;
        }
Ejemplo n.º 24
0
 internal RequestHandler(
     AppConfig appConfig,
     IRequestFilter filter,
     ILogger logger,
     ResourceHandler resourceHandler,
     BrowserSettings settings,
     WindowSettings windowSettings,
     IText text)
 {
     this.filter          = filter;
     this.logger          = logger;
     this.resourceHandler = resourceHandler;
     this.settings        = settings;
     this.windowSettings  = windowSettings;
 }
Ejemplo n.º 25
0
 IDisposable IRequestRouter.Register(
     IRunable runable,
     IRequestFilter filter,
     int priority,
     Type declaringType,
     string scenarioName)
 {
     return(Add(new Registration
     {
         Priority = priority,
         Filter = filter,
         TestScenarioName = string.IsNullOrWhiteSpace(scenarioName) ? null : scenarioName,
         Runable = runable,
         DeclaringType = declaringType ?? runable.GetType()
     }));
 }
Ejemplo n.º 26
0
        /// <summary>
        /// 注册筛选器
        /// </summary>
        /// <param name="filter"></param>
        public static void RegisterFilter(IRequestFilter filter)
        {
            var type = filter.GetType();
            if (!filters.ContainsKey(type))
            {
                lock (filtersLock)
                {
                    if (!filters.ContainsKey(type))
                    {
                        var newFilters = new Dictionary<Type, IRequestFilter>(filters);
                        newFilters.Add(type, filter);

                        filters = newFilters;
                    }
                }
            }
        }
Ejemplo n.º 27
0
 internal ResourceHandler(
     AppConfig appConfig,
     IRequestFilter filter,
     ILogger logger,
     BrowserSettings settings,
     WindowSettings windowSettings,
     IText text)
 {
     this.appConfig      = appConfig;
     this.algorithm      = new SHA256Managed();
     this.filter         = filter;
     this.htmlLoader     = new HtmlLoader(text);
     this.logger         = logger;
     this.settings       = settings;
     this.windowSettings = windowSettings;
     this.text           = text;
 }
Ejemplo n.º 28
0
        IDisposable IRequestRouter.Register(IRequestRouter router, IRequestFilter filter, int priority)
        {
            var registration = new Registration
            {
                Priority = priority,
                Filter   = filter,
                Router   = router
            };

            lock (_registrations)
            {
                _registrations.Add(registration);
                _registrations.Sort();
            }

            return(registration);
        }
Ejemplo n.º 29
0
        private List <FilterCondition> GetInternalFilterConditions(IRequestFilter cmd)
        {
            var filters    = this.Filters.Where(p => p.Internal == true).ToList();
            var conditions = new List <FilterCondition>();

            if (filters.Count == 0 || cmd == null || cmd.FilterInternalDictionary == null || cmd.FilterInternalDictionary.Count == 0)
            {
                return(conditions);
            }

            foreach (PropertyValue value in filters)
            {
                string key = Convert.ToString(value.DefaultValue);
                conditions.Add(this.GetFilterCondition(value, cmd.FilterInternalDictionary[key]));
            }

            return(conditions);
        }
Ejemplo n.º 30
0
        public IProductsList Get(IRequestFilter productsFilter)
        {
            //var url = new BackendUrl(productsFilter);
            //IJObject products = _backend.Request(url.ToString());
            var product1 = new Product {
                UPC = "123"
            };
            var product2 = new Product {
                UPC = "321"
            };
            IEnumerable <Product> products =
                new List <Product> {
                product1, product2
            }.Where(
                p => GetValue <string>(p, productsFilter.FindBy).Contains(productsFilter.FindByValue));

            return(new ProductsList(products));
        }
Ejemplo n.º 31
0
        IDisposable IRequestRouter.Register(IRunable runable, IRequestFilter filter, int priority, Type declaringType)
        {
            var registration = new Registration
            {
                Priority      = priority,
                Filter        = filter,
                Runable       = runable,
                DeclaringType = declaringType ?? runable.GetType()
            };

            lock (_registrations)
            {
                _registrations.Add(registration);
                _registrations.Sort();
            }

            return(registration);
        }
Ejemplo n.º 32
0
        public override bool Handshake(IWebSocketSession session, WebSocketRequestFilterBase previousFilter, out IRequestFilter<IWebSocketFragment> dataFrameReader)
        {
            var secKey1 = session.Items.GetValue<string>(WebSocketConstant.SecWebSocketKey1, string.Empty);
            var secKey2 = session.Items.GetValue<string>(WebSocketConstant.SecWebSocketKey2, string.Empty);

            if (string.IsNullOrEmpty(secKey1) && string.IsNullOrEmpty(secKey2) && NextProcessor != null)
            {
                return NextProcessor.Handshake(session, previousFilter, out dataFrameReader);
            }

            session.ProtocolProcessor = this;

            var secKey3 = session.Items.GetValue<byte[]>(WebSocketConstant.SecWebSocketKey3, m_ZeroKeyBytes);

            var responseBuilder = new StringBuilder();

            responseBuilder.AppendWithCrCf(WebSocketConstant.ResponseHeadLine00);
            responseBuilder.AppendWithCrCf(WebSocketConstant.ResponseUpgradeLine);
            responseBuilder.AppendWithCrCf(WebSocketConstant.ResponseConnectionLine);

            if (!string.IsNullOrEmpty(session.Origin))
                responseBuilder.AppendFormatWithCrCf(WebSocketConstant.ResponseOriginLine, session.Origin);

            responseBuilder.AppendFormatWithCrCf(WebSocketConstant.ResponseLocationLine, session.UriScheme, session.Host, session.Path);

            var subProtocol = session.GetAvailableSubProtocol(session.Items.GetValue<string>(WebSocketConstant.SecWebSocketProtocol, string.Empty));

            if (!string.IsNullOrEmpty(subProtocol))
                responseBuilder.AppendFormatWithCrCf(WebSocketConstant.ResponseProtocolLine, subProtocol);

            responseBuilder.AppendWithCrCf();
            byte[] data = Encoding.UTF8.GetBytes(responseBuilder.ToString());
            session.SendRawData(data, 0, data.Length);
            //Encrypt message
            byte[] secret = GetResponseSecurityKey(secKey1, secKey2, secKey3);
            session.SendRawData(secret, 0, secret.Length);

            dataFrameReader = new WebSocketDataRequestFilter(previousFilter);

            return true;
        }
Ejemplo n.º 33
0
        private List <FilterCondition> GetDefaultFilterConditions(IRequestFilter cmd)
        {
            var filters    = this.Filters.Where(p => p.PreLoaded == true || p.Internal == true).ToList();
            var conditions = new List <FilterCondition>();

            if (filters.Count == 0)
            {
                return(conditions);
            }

            foreach (PropertyValue value in filters)
            {
                if (value.Internal == false)
                {
                    conditions.Add(this.GetFilterCondition(value, null));
                }
            }

            conditions.AddRange(GetInternalFilterConditions(cmd));

            return(conditions);
        }
 public bool Handshake(IWebSocketSession session, WebSocketRequestFilterBase previousReader, out IRequestFilter<IWebSocketFragment> dataFrameReader)
 {
     dataFrameReader = null;
     session.SendRawData(m_SwitchResponse, 0, m_SwitchResponse.Length);
     return true;
 }
Ejemplo n.º 35
0
 public static void InitSessionFactory(ISessionFactory sessionFactory, IRequestFilter requestFilter)
 {
     _sessionFactory = sessionFactory;
     _requestFilter = requestFilter;
 }
 public abstract bool Handshake(IWebSocketSession session, WebSocketRequestFilterBase previousFilter, out IRequestFilter<IWebSocketFragment> dataFrameReader);
Ejemplo n.º 37
0
 public void AddRequestFilter(IRequestFilter requestFilter)
 {
     _serverContext.RequestFilter = requestFilter;
 }