Пример #1
0
        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));
        }
Пример #2
0
        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;
        }
Пример #3
0
        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>());
        }
Пример #4
0
        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);
        }
Пример #5
0
        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;
        }