예제 #1
0
 private static void GetNodeFromComparisonFilter(ComparisonFilter comparisonFilter, Hashtable allowedProperties, List <FilterNode> filterNodes, bool isNotFilter)
 {
     if (allowedProperties.ContainsKey(comparisonFilter.Property.Name))
     {
         FilterNode filterNode = new FilterNode();
         filterNode.FilterablePropertyDescription = (FilterablePropertyDescription)allowedProperties[comparisonFilter.Property.Name];
         filterNode.Operator = (PropertyFilterOperator)comparisonFilter.ComparisonOperator;
         if (typeof(Enum).IsAssignableFrom(comparisonFilter.Property.Type))
         {
             filterNode.Value = Enum.Parse(comparisonFilter.Property.Type, comparisonFilter.PropertyValue.ToString(), true);
         }
         else if (typeof(bool).IsAssignableFrom(comparisonFilter.Property.Type))
         {
             filterNode.Value = !isNotFilter;
         }
         else if (comparisonFilter.Property.Type == typeof(MultiValuedProperty <string>))
         {
             filterNode.Value = comparisonFilter.PropertyValue.ToUserFriendText(CultureInfo.CurrentUICulture.TextInfo.ListSeparator, (object input) => false);
         }
         else
         {
             filterNode.Value = MonadFilter.ConvertValueFromString(comparisonFilter.PropertyValue, comparisonFilter.Property.Type);
         }
         filterNodes.Add(filterNode);
         return;
     }
     throw new InvalidOperationException(Strings.UnknownFilterableProperty(comparisonFilter.Property.Name).ToString());
 }
 private void Initialize(IEnumerable <ValidationRuleDefinition> rules)
 {
     if (rules == null)
     {
         throw new ArgumentNullException("rules");
     }
     if (this.featuresToRules != null && this.cmdletToRules != null)
     {
         return;
     }
     lock (this.listLock)
     {
         if (this.featuresToRules == null || this.cmdletToRules == null)
         {
             this.cmdletToRules   = new Dictionary <string, List <ValidationRuleDefinition> >();
             this.featuresToRules = new Dictionary <string, List <ValidationRuleDefinition> >();
             foreach (ValidationRuleDefinition validationRuleDefinition in rules)
             {
                 if (validationRuleDefinition.Expressions != null && validationRuleDefinition.Expressions.Count > 0)
                 {
                     foreach (ValidationRuleExpression validationRuleExpression in validationRuleDefinition.Expressions)
                     {
                         MonadFilter monadFilter = new MonadFilter(validationRuleExpression.QueryString, null, validationRuleExpression.Schema);
                         validationRuleExpression.QueryFilter = monadFilter.InnerFilter;
                     }
                 }
                 OrganizationValidationRuleDefinition organizationValidationRuleDefinition = validationRuleDefinition as OrganizationValidationRuleDefinition;
                 if (organizationValidationRuleDefinition != null)
                 {
                     if (organizationValidationRuleDefinition.OverridingAllowExpressions != null && organizationValidationRuleDefinition.OverridingAllowExpressions.Count > 0)
                     {
                         foreach (ValidationRuleExpression validationRuleExpression2 in organizationValidationRuleDefinition.OverridingAllowExpressions)
                         {
                             MonadFilter monadFilter2 = new MonadFilter(validationRuleExpression2.QueryString, null, validationRuleExpression2.Schema);
                             validationRuleExpression2.QueryFilter = monadFilter2.InnerFilter;
                         }
                     }
                     if (organizationValidationRuleDefinition.RestrictionExpressions != null && organizationValidationRuleDefinition.RestrictionExpressions.Count > 0)
                     {
                         foreach (ValidationRuleExpression validationRuleExpression3 in organizationValidationRuleDefinition.RestrictionExpressions)
                         {
                             MonadFilter monadFilter3 = new MonadFilter(validationRuleExpression3.QueryString, null, validationRuleExpression3.Schema);
                             validationRuleExpression3.QueryFilter = monadFilter3.InnerFilter;
                         }
                     }
                 }
                 foreach (RoleEntry roleEntry in validationRuleDefinition.ApplicableRoleEntries)
                 {
                     string key = roleEntry.Name;
                     if (roleEntry is CmdletRoleEntry)
                     {
                         key = ((CmdletRoleEntry)roleEntry).FullName;
                     }
                     RBACHelper.AddValueToDictionaryList <ValidationRuleDefinition>(this.cmdletToRules, key, validationRuleDefinition);
                 }
                 RBACHelper.AddValueToDictionaryList <ValidationRuleDefinition>(this.featuresToRules, validationRuleDefinition.Feature, validationRuleDefinition);
             }
         }
     }
 }
예제 #3
0
        private QueryFilter GetOPathFilter(string filterStr)
        {
            MonadFilter monadFilter = null;
            QueryFilter result      = null;

            try
            {
                base.WriteVerbose(Strings.VerboseTryingToParseOPathFilter(filterStr));
                monadFilter = new MonadFilter(filterStr, this, ObjectSchema.GetInstance <ADRecipientProperties>());
                base.WriteVerbose(Strings.VerboseParsingOPathFilterSucceed(filterStr));
            }
            catch (InvalidCastException exception)
            {
                base.ThrowTerminatingError(exception, ErrorCategory.InvalidArgument, null);
            }
            catch (ParsingException ex)
            {
                base.WriteVerbose(Strings.VerboseParsingOPathFilterFailed(filterStr, ex.Message));
            }
            if (monadFilter != null && monadFilter.InnerFilter != null)
            {
                result = monadFilter.InnerFilter;
            }
            return(result);
        }
        private static object ConvertValueFromString(object valueToConvert, Type resultType)
        {
            string value = valueToConvert as string;
            bool   flag;

            if (!string.IsNullOrEmpty(value) && resultType.Equals(typeof(bool)) && bool.TryParse(value, out flag))
            {
                return(flag);
            }
            return(MonadFilter.ConvertValueFromString(valueToConvert, resultType));
        }
예제 #5
0
        internal static bool TryConvertPowershellFilterIntoQueryFilter(string filter, ScopeRestrictionType scopeRestrictionType, Task task, out QueryFilter queryFilter, out string errorString)
        {
            queryFilter = null;
            errorString = null;
            ObjectSchema schema;

            switch (scopeRestrictionType)
            {
            case ScopeRestrictionType.RecipientScope:
                schema = RBACHelper.aDRecipientObjectsSchema;
                break;

            case ScopeRestrictionType.ServerScope:
                schema = RBACHelper.serverSchema;
                break;

            case ScopeRestrictionType.PartnerDelegatedTenantScope:
                schema = RBACHelper.tenantOrganizationPresentationObjectSchema;
                break;

            case ScopeRestrictionType.DatabaseScope:
                schema = RBACHelper.databaseSchema;
                break;

            default:
                throw new ArgumentException("scopeRestrictionType");
            }
            Exception ex = null;

            try
            {
                MonadFilter monadFilter = new MonadFilter(filter, task, schema);
                queryFilter = monadFilter.InnerFilter;
                return(true);
            }
            catch (InvalidCastException ex2)
            {
                ex = ex2;
            }
            catch (ParsingException ex3)
            {
                ex = ex3;
            }
            errorString = ex.Message;
            return(false);
        }
예제 #6
0
        public string Validate()
        {
            if (this.ValueParsingError != null)
            {
                return(string.Format("{0}: '{1}'", this.DisplayName, this.ValueParsingError));
            }
            string text = null;

            if (this.op == PropertyFilterOperator.Equal || this.op == PropertyFilterOperator.NotEqual || this.op == PropertyFilterOperator.GreaterThan || this.op == PropertyFilterOperator.LessThan || this.op == PropertyFilterOperator.LessThanOrEqual || this.op == PropertyFilterOperator.GreaterThanOrEqual)
            {
                Type type = this.Value.GetType();
                if (type != this.PropertyDefinition.Type)
                {
                    try
                    {
                        string valueToConvert;
                        if (this.Value is DateTime)
                        {
                            valueToConvert = ((DateTime)this.Value).ToString("s");
                        }
                        else
                        {
                            valueToConvert = this.Value.ToString();
                        }
                        MonadFilter.ConvertValueFromString(valueToConvert, this.PropertyDefinition.Type);
                    }
                    catch (PSInvalidCastException ex)
                    {
                        Exception ex2 = ex;
                        while (ex2.InnerException != null && !(ex2.InnerException is FormatException))
                        {
                            ex2 = ex2.InnerException;
                        }
                        text = string.Format("{0}: '{1}'", this.DisplayName, (ex2.InnerException != null) ? ex2.InnerException.Message : ex.Message);
                        if (this.PropertyDefinition.Type == typeof(Version))
                        {
                            text = string.Format("{0}. {1}", text, Strings.ValidVersionExample);
                        }
                    }
                }
            }
            return(text);
        }
 protected override void UpdateFilterProperty()
 {
     base.UpdateFilterProperty();
     if (this.MinVersion != null)
     {
         QueryFilter queryFilter = new ComparisonFilter(ComparisonOperator.GreaterThanOrEqual, ADObjectSchema.ExchangeVersion, this.MinVersion);
         if (!this.RecipientTypeDetailsWithoutVersionRestriction.IsNullOrEmpty())
         {
             QueryFilter recipientTypeDetailsFilter = RecipientIdParameter.GetRecipientTypeDetailsFilter(base.RecipientTypeDetailsList);
             if (recipientTypeDetailsFilter != null)
             {
                 queryFilter = new AndFilter(new QueryFilter[]
                 {
                     recipientTypeDetailsFilter,
                     queryFilter
                 });
             }
             recipientTypeDetailsFilter = RecipientIdParameter.GetRecipientTypeDetailsFilter(this.RecipientTypeDetailsWithoutVersionRestriction);
             queryFilter = new OrFilter(new QueryFilter[]
             {
                 recipientTypeDetailsFilter,
                 queryFilter
             });
             base.RecipientTypeDetailsList = null;
         }
         string text = (string)base["Filter"];
         if (!text.IsNullOrBlank())
         {
             base["Filter"] = string.Empty;
             MonadFilter monadFilter = new MonadFilter(text, null, ObjectSchema.GetInstance <ReducedRecipientSchema>());
             queryFilter = new AndFilter(new QueryFilter[]
             {
                 monadFilter.InnerFilter,
                 queryFilter
             });
         }
         base["RecipientPreviewFilter"] = LdapFilterBuilder.LdapFilterFromQueryFilter(queryFilter);
     }
 }
예제 #8
0
        private QueryFilter ConvertToQueryFilter(string filter)
        {
            MonadFilter monadFilter = new MonadFilter(filter ?? string.Empty, this, ObjectSchema.GetInstance <ADRecipientProperties>());

            return(monadFilter.InnerFilter);
        }
예제 #9
0
        internal void InitializeInnerFilter <Schema>(string filterString, Schema queueInfoSchema) where Schema : PagedObjectSchema
        {
            QueryFilter filter = new MonadFilter(filterString, this, queueInfoSchema).InnerFilter;

            this.innerFilter = DateTimeConverter.ConvertQueryFilter(filter);
        }