private static LDAPAttributeFilter Build(SearchRequestFilter filter)
        {
            var result = new LDAPAttributeFilter
            {
                Type = (SearchFilterTypes)filter.Type
            };

            switch (filter.Type)
            {
            case SearchRequestFilterTypes.Present:
                result.AttributeName = filter.Value;
                break;

            case SearchRequestFilterTypes.EqualityMatch:
            case SearchRequestFilterTypes.GreaterOrEqual:
            case SearchRequestFilterTypes.LessOrEqual:
            case SearchRequestFilterTypes.ApproxMatch:
                result.AttributeName  = filter.Attribute.AttributeDescription.Value;
                result.AttributeValue = filter.Attribute.AssertionValue.Value;
                break;

            case SearchRequestFilterTypes.Or:
            case SearchRequestFilterTypes.And:
                foreach (var f in filter.Filters)
                {
                    var child = Build(f);
                    result.Filters.Add(child);
                }

                break;
            }
            return(result);
        }
Example #2
0
        public SearchRequestFilter BuildPresentFilter(string name)
        {
            var filter = new SearchRequestFilter
            {
                Type  = SearchRequestFilterTypes.Present,
                Value = name
            };

            return(filter);
        }
Example #3
0
        public MappedSearchRequestFilter Map(SearchRequestFilter filter)
        {
            var result = new MappedSearchRequestFilter
            {
                Exclude = filter.Exclude,
                Mode    = filter.Mode,
                ProcessBeforeAggregation = filter.ProcessBeforeAggregation,
                Values = filter.Values,
                Column = ColumnProvider.GetColumnMapping(_constants.DataSourceId, filter.ColumnId.Value)
            };

            return(result);
        }
Example #4
0
        public SearchRequestFilter BuildLessOrEqualFilter(string name, string value)
        {
            var filter = new SearchRequestFilter
            {
                Type      = SearchRequestFilterTypes.LessOrEqual,
                Attribute = new AttributeValueAssertion
                {
                    AttributeDescription = new DEROctetString(name),
                    AssertionValue       = new DEROctetString(value)
                }
            };

            return(filter);
        }
Example #5
0
        public SearchRequestFilter BuildOrFilter(IEnumerable <Func <FilterBuilder, SearchRequestFilter> > callbacks)
        {
            var filters = new List <SearchRequestFilter>();

            foreach (var cb in callbacks)
            {
                filters.Add(cb(this));
            }

            var filter = new SearchRequestFilter
            {
                Type    = SearchRequestFilterTypes.Or,
                Filters = filters
            };

            return(filter);
        }
Example #6
0
        public static SearchRequest Extract(ICollection <byte> buffer)
        {
            var searchRequest = new SearchRequest();

            searchRequest.BaseObject = DEROctetString.Extract(buffer);
            searchRequest.Scope      = DEREnumerated <SearchRequestScopes> .Extract(buffer);

            searchRequest.DeferAlias = DEREnumerated <SearchRequestDeferAliases> .Extract(buffer);

            searchRequest.SizeLimit  = DERInteger.Extract(buffer);
            searchRequest.TimeLimit  = DERInteger.Extract(buffer);
            searchRequest.TypesOnly  = DERBoolean.Extract(buffer);
            searchRequest.Filter     = SearchRequestFilter.Extract(buffer);
            searchRequest.Attributes = DERSequence <DEROctetString> .Extract(buffer);

            return(searchRequest);
        }
        private Func <RegisteredEntity, bool> SearchRequestFilterToMatcherFunc(SearchRequestFilter filter)
        {
            return(registeredEntity =>
            {
                foreach (var entity in registeredEntity.Entities)
                {
                    var property = EntityProperties.SingleOrDefault(p => p.Name.Equals(filter.Field, StringComparison.InvariantCultureIgnoreCase));
                    if (property == null)
                    {
                        throw new Exception($"Cannot find Entity property with name {filter.Field}");
                    }

                    var value = property.GetValue(entity)?.ToString();
                    var isMatch = false;
                    switch (filter.Operator)
                    {
                    case DataOperator.Equals:
                        isMatch = filter.Value.Equals(value, StringComparison.InvariantCultureIgnoreCase);
                        break;

                    case DataOperator.IsNull:
                        isMatch = value == null;
                        break;

                    default:
                        throw new Exception($"Operator {filter.Operator} is not supported (Used matching {filter.Field})");
                    }

                    if (isMatch)
                    {
                        return true;
                    }
                }

                return false;
            });
        }
        public void SetPresentFilter(string name)
        {
            var builder = new FilterBuilder();

            _filter = builder.BuildPresentFilter(name);
        }
        public void SetOrFilter(IEnumerable <Func <FilterBuilder, SearchRequestFilter> > callbacks)
        {
            var builder = new FilterBuilder();

            _filter = builder.BuildOrFilter(callbacks);
        }
        public void SetApproxMatchFilter(string name, string value)
        {
            var builder = new FilterBuilder();

            _filter = builder.BuildApproxMatchFilter(name, value);
        }
        public void SetLessOrEqualFilter(string name, string value)
        {
            var builder = new FilterBuilder();

            _filter = builder.BuildLessOrEqualFilter(name, value);
        }