Exemple #1
0
        private Expression BuildEqualityFilter(EqualityMatchFilter filter, Expression itemExpression)
        {
            if (filter.AttributeDesc == "cn")
            {
                Expression left    = Expression.Property(itemExpression, "Dn");
                string     baseObj = (_searchEvent.SearchRequest.BaseObject == "") ? "" : "," + _searchEvent.SearchRequest.BaseObject;
                Expression right   = Expression.Constant("cn=" + filter.AssertionValue + baseObj);
                return(Expression.Equal(left, right));
            }
            else
            {
                Expression attributeExpr = Expression.Property(itemExpression, "Attributes");

                // Pair to search for
                ParameterExpression keyValuePair = Expression.Parameter(typeof(KeyValuePair <string, List <string> >), "a");

                // (a.Key == attributeName)
                Expression subExprLeftAttributeName  = Expression.Property(keyValuePair, "Key");
                Expression subExprRightAttributeName = Expression.Constant(filter.AttributeDesc.ToLower());
                Expression subExprAttributeName      = Expression.Equal(subExprLeftAttributeName, subExprRightAttributeName);

                // a.Value.Contains(attributeValue)
                Expression subExprValue    = Expression.Property(keyValuePair, "Value");
                Expression subExprContains = Expression.Call(subExprValue, typeof(List <string>).GetMethod("Contains", new Type[] { typeof(string) }), Expression.Constant(filter.AssertionValue));

                // ((a.Key == attributeName) && a.Value.Contains(attributeValue))
                Expression attributeExprMatch = Expression.And(subExprAttributeName, subExprContains);

                // {a => ((a.Key == attributeName) And a.Value.Contains(attributeValue))}
                var lambda = Expression.Lambda <Func <KeyValuePair <string, List <string> >, bool> >(attributeExprMatch, keyValuePair);

                MethodInfo anyMethod = typeof(Enumerable).GetMethods(System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public).First(m => m.Name == "Any" && m.GetParameters().Count() == 2).MakeGenericMethod(typeof(KeyValuePair <string, List <string> >));
                return(Expression.Call(anyMethod, attributeExpr, lambda));
            }
        }
Exemple #2
0
        private Expression BuildEqualityFilter(EqualityMatchFilter filter, Expression itemExpression)
        {
            if (filter.AttributeDesc == "cn")
            {
                Expression left  = GetMemberExpressionForAttribute(itemExpression, MemberExpressionAttributes.CN);
                Expression right = Expression.Constant(filter.AssertionValue.ToUpper());
                return(Expression.Equal(left, right));
            }
            else if (filter.AttributeDesc == "email")
            {
                Expression left  = GetMemberExpressionForAttribute(itemExpression, MemberExpressionAttributes.Email);
                Expression right = Expression.Constant(filter.AssertionValue.ToUpper());
                return(Expression.Equal(left, right));
            }
            else if (filter.AttributeDesc == "displayname")
            {
                Expression left  = GetMemberExpressionForAttribute(itemExpression, MemberExpressionAttributes.DisplayName);
                Expression right = Expression.Constant(filter.AssertionValue.ToUpper());
                return(Expression.Equal(left, right));
            }
            else if (filter.AttributeDesc == "entryuuid")
            {
                Expression left  = GetMemberExpressionForAttribute(itemExpression, MemberExpressionAttributes.EntryUUID);
                Expression right = Expression.Constant(new Guid(filter.AssertionValue));
                return(Expression.Equal(left, right));
            }
            else if (filter.AttributeDesc == "objectclass")
            {
                if (filter.AssertionValue == "inetOrgPerson")
                {
                    return(GetAlwaysTrueExpression());
                }
                else
                {
                    return(GetAlwaysFalseExpression());
                }
            }
            else if (filter.AttributeDesc == "dn")
            {
                return(GetAlwaysFalseExpression());
            }

            return(GetAlwaysFalseExpression());
        }