Ejemplo n.º 1
0
 public QueryFilterBuilder(LocalizedKeywordMapping keywordMapping, KqlParser.ParseOption parseOptions, RescopedAll rescopedAll, IRecipientResolver recipientResolver, IPolicyTagProvider policyTagProvider, CultureInfo culture)
 {
     this.culture           = culture;
     this.parseOptions      = parseOptions;
     this.AllowedKeywords   = PropertyKeywordHelper.AllPropertyKeywords;
     this.keywordMapping    = keywordMapping;
     this.recipientResolver = recipientResolver;
     this.policyTagProvider = policyTagProvider;
     this.rescopedAll       = rescopedAll;
 }
Ejemplo n.º 2
0
 private static HashSet <PropertyKeyword> GetSupportedProperties(KqlParser.ParseOption parseOption)
 {
     if ((parseOption & KqlParser.ParseOption.UseCiKeywordOnly) != KqlParser.ParseOption.None)
     {
         return(PropertyKeywordHelper.CiPropertyKeywords);
     }
     if ((parseOption & KqlParser.ParseOption.UseBasicKeywordsOnly) != KqlParser.ParseOption.None)
     {
         return(PropertyKeywordHelper.BasicPropertyKeywords);
     }
     return(PropertyKeywordHelper.AllPropertyKeywords);
 }
Ejemplo n.º 3
0
        private QueryFilter GetQueryFilter(string queryString, IRecipientSession recipientSession, IConfigurationSession configurationSession, out QueryFilter nonDiscoveryQueryFilter)
        {
            SearchCriteria.RecipientIdentityResolver recipientResolver = null;
            if (recipientSession != null)
            {
                recipientResolver = new SearchCriteria.RecipientIdentityResolver(recipientSession);
            }
            PolicyTagAdProvider policyTagProvider = null;

            if (configurationSession != null)
            {
                policyTagProvider = new PolicyTagAdProvider(configurationSession);
            }
            KqlParser.ParseOption parseOption = KqlParser.ParseOption.ImplicitOr | KqlParser.ParseOption.UseCiKeywordOnly | KqlParser.ParseOption.DisablePrefixMatch | KqlParser.ParseOption.AllowShortWildcards;
            nonDiscoveryQueryFilter = KqlParser.ParseAndBuildQuery(queryString, parseOption, this.queryCulture, RescopedAll.Default, recipientResolver, policyTagProvider);
            parseOption            |= KqlParser.ParseOption.EDiscoveryMode;
            return(KqlParser.ParseAndBuildQuery(queryString, parseOption, this.queryCulture, RescopedAll.Default, recipientResolver, policyTagProvider));
        }
Ejemplo n.º 4
0
        public static QueryFilter ParseAndBuildQuery(string query, KqlParser.ParseOption parseOption, CultureInfo cultureInfo, RescopedAll rescopedAll, IRecipientResolver recipientResolver, IPolicyTagProvider policyTagProvider)
        {
            KqlParser kqlParser                   = new KqlParser();
            LocalizedKeywordMapping mapping       = LocalizedKeywordMapping.GetMapping(cultureInfo);
            TreeNode           treeNode           = kqlParser.Parse(query, parseOption, cultureInfo, mapping);
            QueryFilterBuilder queryFilterBuilder = new QueryFilterBuilder(mapping, parseOption, rescopedAll, recipientResolver, policyTagProvider, cultureInfo);

            queryFilterBuilder.AllowedKeywords = KqlParser.GetSupportedProperties(parseOption);
            QueryFilter queryFilter = queryFilterBuilder.Build(treeNode);

            if (queryFilter == null)
            {
                if ((parseOption & KqlParser.ParseOption.SuppressError) == KqlParser.ParseOption.None)
                {
                    throw new ParserException(new ParserErrorInfo(ParserErrorCode.ParserError));
                }
                queryFilter = queryFilterBuilder.BuildAllFilter(query);
            }
            return(queryFilter);
        }
Ejemplo n.º 5
0
        internal TreeNode Parse(string query, KqlParser.ParseOption parseOption, CultureInfo cultureInfo, LocalizedKeywordMapping keywordMapping)
        {
            if (string.IsNullOrEmpty(query))
            {
                throw new ArgumentNullException("query");
            }
            if (cultureInfo == null)
            {
                throw new ArgumentNullException("cultureInfo");
            }
            if ((parseOption & KqlParser.ParseOption.UseBasicKeywordsOnly) != KqlParser.ParseOption.None && (parseOption & KqlParser.ParseOption.UseCiKeywordOnly) != KqlParser.ParseOption.None)
            {
                throw new ArgumentException("GetBasicKeywordOnly can not be combined with UseCIKeywordOnly");
            }
            List <ParserErrorInfo> list   = ((parseOption & KqlParser.ParseOption.SuppressError) != KqlParser.ParseOption.None) ? null : new List <ParserErrorInfo>();
            KqlParser      kqlParser      = new KqlParser();
            ParsingContext parsingContext = new ParsingContext
            {
                CultureInfo            = cultureInfo,
                ImplicitAndBehavior    = ((parseOption & KqlParser.ParseOption.ImplicitOr) == KqlParser.ParseOption.None),
                PropertyLookup         = new PropertyLookup(keywordMapping, KqlParser.GetSupportedProperties(parseOption), list),
                SpecialPropertyHandler = new SpecialPropertyHandler(keywordMapping, list)
            };
            TreeNode treeNode = null;

            try
            {
                KqlParser.VerifyQuery(query);
                query    = KqlParser.NormalizeQuery(query);
                treeNode = kqlParser.Parse(query, parsingContext);
            }
            catch (FormatException innerException)
            {
                if ((parseOption & KqlParser.ParseOption.SuppressError) == KqlParser.ParseOption.None)
                {
                    throw new ParserException(new ParserErrorInfo(ParserErrorCode.KqlParseException), innerException);
                }
            }
            catch (ParseException innerException2)
            {
                if ((parseOption & KqlParser.ParseOption.SuppressError) == KqlParser.ParseOption.None)
                {
                    throw new ParserException(new ParserErrorInfo(ParserErrorCode.KqlParseException), innerException2);
                }
            }
            catch (ParserException ex)
            {
                if ((parseOption & KqlParser.ParseOption.SuppressError) == KqlParser.ParseOption.None)
                {
                    throw ex;
                }
            }
            if (list != null && list.Count > 0)
            {
                throw new ParserException(list);
            }
            if ((parseOption & KqlParser.ParseOption.SuppressError) == KqlParser.ParseOption.None && treeNode == null)
            {
                throw new ParserException(new ParserErrorInfo(ParserErrorCode.ParserError));
            }
            return(treeNode);
        }
Ejemplo n.º 6
0
 public static QueryFilter ParseAndBuildQuery(string query, KqlParser.ParseOption parseOption, CultureInfo cultureInfo, IRecipientResolver recipientResolver, IPolicyTagProvider policyTagProvider)
 {
     return(KqlParser.ParseAndBuildQuery(query, parseOption, cultureInfo, RescopedAll.Default, recipientResolver, policyTagProvider));
 }
Ejemplo n.º 7
0
        private static IEnumerable <PropertyDefinition> GetModifiedRecipientPropertiesForEDiscovery(KqlParser.ParseOption parseOption, IEnumerable <PropertyDefinition> properties)
        {
            if ((parseOption & KqlParser.ParseOption.EDiscoveryMode) == KqlParser.ParseOption.None)
            {
                return(properties);
            }
            List <PropertyDefinition> list  = new List <PropertyDefinition>();
            List <PropertyDefinition> list2 = new List <PropertyDefinition>();

            foreach (PropertyDefinition propertyDefinition in properties)
            {
                list.Add(propertyDefinition);
                if (propertyDefinition == ItemSchema.SearchRecipientsTo)
                {
                    list2.Add(MessageItemSchema.ToGroupExpansionRecipients);
                }
                else if (propertyDefinition == ItemSchema.SearchRecipientsCc)
                {
                    list2.Add(MessageItemSchema.CcGroupExpansionRecipients);
                }
                else if (propertyDefinition == ItemSchema.SearchRecipientsBcc)
                {
                    list2.Add(MessageItemSchema.BccGroupExpansionRecipients);
                }
                else if (propertyDefinition == ItemSchema.SearchRecipients)
                {
                    list2.Add(MessageItemSchema.ToGroupExpansionRecipients);
                    list2.Add(MessageItemSchema.CcGroupExpansionRecipients);
                    list2.Add(MessageItemSchema.BccGroupExpansionRecipients);
                }
            }
            if (list2.Count > 0)
            {
                list.AddRange(list2);
            }
            return(list);
        }