internal Dictionary <string, HashSet <string> > GetAllExistingClassificationIdentifiers(Func <TransportRule, bool> inclusiveFilter = null) { OrganizationId currentOrganizationId = this.CurrentOrganizationId; IConfigurationSession openedDataSession = this.dataSession; IClassificationDefinitionsDataReader dataReader = this.classificationsDataReader; IClassificationDefinitionsDiagnosticsReporter classificationDefinitionsDiagnosticsReporter = this.classificationDiagnosticsReporter; return(DlpUtils.GetAllClassificationIdentifiers(currentOrganizationId, openedDataSession, inclusiveFilter, null, dataReader, classificationDefinitionsDiagnosticsReporter)); }
internal static IEnumerable <Tuple <TransportRule, XDocument> > AggregateOobAndCustomClassificationDefinitions(OrganizationId organizationId, IConfigurationSession openedDataSession = null, Func <TransportRule, bool> inclusiveFilter = null, QueryFilter additionalFilter = null, IClassificationDefinitionsDataReader dataReader = null, IClassificationDefinitionsDiagnosticsReporter classificationDefinitionsDiagnosticsReporter = null) { IClassificationDefinitionsDataReader dataReaderToUse = dataReader ?? ClassificationDefinitionsDataReader.DefaultInstance; IClassificationDefinitionsDiagnosticsReporter classificationDefinitionsDiagnosticsReporterToUse = classificationDefinitionsDiagnosticsReporter ?? ClassificationDefinitionsDiagnosticsReporter.Instance; foreach (TransportRule transportRule in dataReaderToUse.GetAllClassificationRuleCollection(organizationId, openedDataSession, additionalFilter)) { if (inclusiveFilter != null) { if (!inclusiveFilter(transportRule)) { continue; } } XDocument rulePackXDoc; try { rulePackXDoc = ClassificationDefinitionUtils.GetRuleCollectionDocumentFromTransportRule(transportRule); } catch (InvalidOperationException) { classificationDefinitionsDiagnosticsReporterToUse.WriteInvalidObjectInformation(0, organizationId, transportRule.DistinguishedName); continue; } catch (ArgumentException underlyingException) { classificationDefinitionsDiagnosticsReporterToUse.WriteCorruptRulePackageDiagnosticsInformation(0, organizationId, transportRule.DistinguishedName, underlyingException); continue; } catch (AggregateException ex) { classificationDefinitionsDiagnosticsReporterToUse.WriteCorruptRulePackageDiagnosticsInformation(0, organizationId, transportRule.DistinguishedName, ex.Flatten()); continue; } catch (XmlException ex2) { classificationDefinitionsDiagnosticsReporterToUse.WriteCorruptRulePackageDiagnosticsInformation(0, organizationId, transportRule.DistinguishedName, new AggregateException(new Exception[] { ex2 }).Flatten()); continue; } yield return(new Tuple <TransportRule, XDocument>(transportRule, rulePackXDoc)); } yield break; }
internal static IEnumerable <DataClassificationPresentationObject> QueryDataClassification(IEnumerable <string> queriedIdentities, OrganizationId organizationId, IConfigurationSession openedDataSession = null, IClassificationDefinitionsDataReader dataReader = null, IClassificationDefinitionsDiagnosticsReporter diagnosticsReporter = null) { ArgumentValidator.ThrowIfNull("queriedIdentities", queriedIdentities); if (object.ReferenceEquals(null, organizationId)) { throw new ArgumentNullException("organizationId"); } List <string> list = new List <string>(); Dictionary <string, DataClassificationPresentationObject> queriedNameDictionary = new Dictionary <string, DataClassificationPresentationObject>(StringComparer.Ordinal); Dictionary <string, DataClassificationPresentationObject> queriedGuidDictionary = new Dictionary <string, DataClassificationPresentationObject>(ClassificationDefinitionConstants.RuleIdComparer); Dictionary <string, DataClassificationPresentationObject> allQueryResultsDictionary = new Dictionary <string, DataClassificationPresentationObject>(ClassificationDefinitionConstants.RuleIdComparer); foreach (string text in queriedIdentities) { if (!string.IsNullOrEmpty(text)) { list.Add(text); Guid guid; if (GuidHelper.TryParseGuid(text, out guid)) { queriedGuidDictionary.Add(text, null); } else { queriedNameDictionary.Add(text, null); } } } if (!list.Any <string>()) { return(Enumerable.Empty <DataClassificationPresentationObject>()); } DlpUtils.DataClassificationQueryContext dataClassificationQueryContext = new DlpUtils.DataClassificationQueryContext(organizationId, diagnosticsReporter ?? ClassificationDefinitionsDiagnosticsReporter.Instance); bool flag = queriedNameDictionary.Any <KeyValuePair <string, DataClassificationPresentationObject> >(); bool flag2 = queriedGuidDictionary.Any <KeyValuePair <string, DataClassificationPresentationObject> >(); foreach (Tuple <TransportRule, XDocument> tuple in DlpUtils.AggregateOobAndCustomClassificationDefinitions(organizationId, openedDataSession, null, null, dataReader, dataClassificationQueryContext.CurrentDiagnosticsReporter)) { dataClassificationQueryContext.CurrentRuleCollectionTransportRuleObject = tuple.Item1; dataClassificationQueryContext.CurrentRuleCollectionXDoc = tuple.Item2; IEnumerable <QueryMatchResult> nameMatchResultsFromCurrentRulePack = Enumerable.Empty <QueryMatchResult>(); if (!flag || DlpUtils.GetNameQueryMatchResult(dataClassificationQueryContext, queriedNameDictionary.Keys, out nameMatchResultsFromCurrentRulePack)) { IEnumerable <QueryMatchResult> idMatchResultsFromCurrentRulePack = Enumerable.Empty <QueryMatchResult>(); if (!flag2 || DlpUtils.GetIdQueryMatchResult(dataClassificationQueryContext, queriedGuidDictionary.Keys, out idMatchResultsFromCurrentRulePack)) { DlpUtils.PopulateMatchResults(dataClassificationQueryContext, queriedNameDictionary, nameMatchResultsFromCurrentRulePack, queriedGuidDictionary, idMatchResultsFromCurrentRulePack, allQueryResultsDictionary); } } } return((from presentationObject in list.Select(delegate(string queriedIdentity) { DataClassificationPresentationObject result; if (queriedNameDictionary.TryGetValue(queriedIdentity, out result)) { return result; } if (!queriedGuidDictionary.TryGetValue(queriedIdentity, out result)) { return null; } return result; }) where presentationObject != null select presentationObject).ToList <DataClassificationPresentationObject>()); }
internal static Dictionary <string, HashSet <string> > GetAllClassificationIdentifiers(OrganizationId organizationId, IConfigurationSession openedDataSession = null, Func <TransportRule, bool> inclusiveFilter = null, QueryFilter additionalFilter = null, IClassificationDefinitionsDataReader dataReader = null, IClassificationDefinitionsDiagnosticsReporter classificationDefinitionsDiagnosticsReporter = null) { IClassificationDefinitionsDiagnosticsReporter classificationDefinitionsDiagnosticsReporter2 = classificationDefinitionsDiagnosticsReporter ?? ClassificationDefinitionsDiagnosticsReporter.Instance; Dictionary <string, HashSet <string> > dictionary = new Dictionary <string, HashSet <string> >(ClassificationDefinitionConstants.RuleCollectionIdComparer); foreach (Tuple <TransportRule, XDocument> tuple in DlpUtils.AggregateOobAndCustomClassificationDefinitions(organizationId, openedDataSession, inclusiveFilter, additionalFilter, dataReader, classificationDefinitionsDiagnosticsReporter2)) { TransportRule item = tuple.Item1; XDocument item2 = tuple.Item2; ExAssert.RetailAssert(item2 != null, "XDocument instance returned from AggregateOobAndCustomClassificationDefinitions should never be null!"); string rulePackId; HashSet <string> value; try { rulePackId = XmlProcessingUtils.GetRulePackId(item2); value = new HashSet <string>(XmlProcessingUtils.GetAllRuleIds(item2), ClassificationDefinitionConstants.RuleIdComparer); } catch (XmlException ex) { ClassificationDefinitionsDiagnosticsReporter.Instance.WriteCorruptRulePackageDiagnosticsInformation(0, organizationId, item.DistinguishedName, new AggregateException(new Exception[] { ex }).Flatten()); continue; } ExAssert.RetailAssert(!dictionary.ContainsKey(rulePackId), "Duplicate classification rule collection ID '{0}' under tenant's organization '{1}' is a should never ever happen case", new object[] { rulePackId, organizationId.ToString() }); dictionary.Add(rulePackId, value); } return(dictionary); }
internal ValidationContext(ClassificationRuleCollectionOperationType operationType, OrganizationId currentOrganizationId, bool isPayloadOobRuleCollection, bool isPayloadFingerprintsRuleCollection, IConfigurationSession currentDataSession, IConfigurable existingDataObject = null, IClassificationDefinitionsDataReader dataReader = null, IClassificationDefinitionsDiagnosticsReporter diagnosticsReporter = null) { if (object.ReferenceEquals(null, currentOrganizationId)) { throw new ArgumentNullException("currentOrganizationId"); } TransportRule transportRule = existingDataObject as TransportRule; if (ClassificationRuleCollectionOperationType.Update == operationType && transportRule == null) { throw new ArgumentException("existingDataObject"); } this.dataSession = currentDataSession; this.classificationsDataReader = (dataReader ?? ClassificationDefinitionsDataReader.DefaultInstance); this.classificationDiagnosticsReporter = (diagnosticsReporter ?? ClassificationDefinitionsDiagnosticsReporter.Instance); this.organizationValidationConfigRead = false; this.organizationValidationConfig = null; this.OperationType = operationType; this.CurrentOrganizationId = currentOrganizationId; this.IsPayloadOobRuleCollection = isPayloadOobRuleCollection; this.IsPayloadFingerprintsRuleCollection = isPayloadFingerprintsRuleCollection; this.InitializeExistingRulePack(transportRule); this.ValidatedRuleCollectionDocument = null; }