コード例 #1
0
        public static string ToClientString(this DiscoveredDataClassification discoveredDataClassification)
        {
            if (discoveredDataClassification == null)
            {
                throw new ArgumentNullException("discoveredDataClassification");
            }
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.AppendFormat(ScanResultExtensions.ClassificationStringFormat, discoveredDataClassification.Id, discoveredDataClassification.RecommendedMinimumConfidence, discoveredDataClassification.MatchingSourceInfos.ToClientString());
            return(stringBuilder.ToString());
        }
コード例 #2
0
        // Token: 0x06001507 RID: 5383 RVA: 0x0004A82C File Offset: 0x00048A2C
        protected override void OnDataClassificationsRetrieved(FilteringResults filteringResults)
        {
            if (this.invokeFips)
            {
                TimeSpan timeSpan = DateTime.UtcNow - this.fipsScanStartTime;
                this.policyTipRequestLogger.AppendExtraData("FipsLatency", timeSpan.TotalMilliseconds.ToString());
                if (filteringResults != null)
                {
                    StringBuilder stringBuilder = new StringBuilder();
                    if (filteringResults.Streams != null)
                    {
                        foreach (StreamIdentity streamIdentity in filteringResults.Streams)
                        {
                            stringBuilder.Append(string.Format("(StreamName:{0}/StreamId:{1}/ParentId:{2})", streamIdentity.Name, streamIdentity.Id, streamIdentity.ParentId));
                        }
                    }
                    StringBuilder stringBuilder2 = new StringBuilder();
                    if (filteringResults.ScanResults != null)
                    {
                        foreach (ScanResult scanResult in filteringResults.ScanResults)
                        {
                            stringBuilder2.Append(string.Format("(StreamName:{0}/StreamId:{1}/ElapsedTime:{2})", scanResult.Stream.Name, scanResult.Stream.Id, scanResult.ElapsedTime));
                        }
                    }
                    this.policyTipRequestLogger.AppendExtraData("FipsParsedStreams", stringBuilder.ToString());
                    this.policyTipRequestLogger.AppendExtraData("FipsPerScanResultLatency", stringBuilder2.ToString());
                }
            }
            IEnumerable <DiscoveredDataClassification> enumerable = FipsResultParser.ParseDataClassifications(filteringResults, base.Tracer);

            this.policyTipRequestLogger.AppendData("NewClassifications", DiscoveredDataClassification.ToString(enumerable));
            IEnumerable <DiscoveredDataClassification> dlpDetectedClassificationObjects = this.ScanResultStorageProvider.GetDlpDetectedClassificationObjects();

            this.policyTipRequestLogger.AppendData("OldClassifications", DiscoveredDataClassification.ToString(dlpDetectedClassificationObjects));
            IEnumerable <DiscoveredDataClassification> enumerable2 = FipsResultParser.UnionDiscoveredDataClassificationsFromDistinctStreams(dlpDetectedClassificationObjects, enumerable);

            this.policyTipRequestLogger.AppendData("UnionClassifications", DiscoveredDataClassification.ToString(enumerable2));
            base.SetDataClassifications(enumerable2);
            this.ScanResultStorageProvider.SetHasDlpDetectedClassifications();
            this.ScanResultStorageProvider.SetDlpDetectedClassificationObjects(enumerable2);
            StringBuilder stringBuilder3 = new StringBuilder();

            foreach (DiscoveredDataClassification discoveredDataClassification in enumerable2)
            {
                stringBuilder3.Append(discoveredDataClassification.Id);
                stringBuilder3.Append("|");
            }
            this.ScanResultStorageProvider.SetDlpDetectedClassifications(stringBuilder3.ToString());
            if (!enumerable2.Any <DiscoveredDataClassification>())
            {
                this.NoContentMatch = true;
            }
        }
コード例 #3
0
        public override void SetDlpDetectedClassificationObjects(IEnumerable <DiscoveredDataClassification> dlpDetectedClassificationObjects)
        {
            string text = DiscoveredDataClassification.SerializeToXml(dlpDetectedClassificationObjects);

            if (string.IsNullOrEmpty(text))
            {
                base.StoreItem.SetOrDeleteProperty(ItemSchema.DlpDetectedClassificationObjects, null);
                return;
            }
            UnicodeEncoding unicodeEncoding = new UnicodeEncoding();

            base.StoreItem[ItemSchema.DlpDetectedClassificationObjects] = unicodeEncoding.GetBytes(text);
        }
コード例 #4
0
        public static List <DiscoveredDataClassification> ToDlpDetectedClassificationObjects(this string clientDetectionData)
        {
            if (string.IsNullOrEmpty(clientDetectionData))
            {
                return(new List <DiscoveredDataClassification>());
            }
            string[] array = clientDetectionData.Split(new char[]
            {
                '|'
            });
            if (array == null)
            {
                throw new ClientScanResultParseException("classifications are invalid or doesn't contain atleast 1 element");
            }
            List <DiscoveredDataClassification> list = new List <DiscoveredDataClassification>(array.Length);

            for (int i = 0; i < array.Length; i++)
            {
                DiscoveredDataClassification item = array[i].ToDiscoveredDataClassification();
                list.Add(item);
            }
            return(list);
        }
コード例 #5
0
        // Token: 0x06001A1C RID: 6684 RVA: 0x0005E458 File Offset: 0x0005C658
        protected override GetDlpPolicyTipsResponse InternalExecute()
        {
            PolicyTipRequestLogger policyTipRequestLogger = PolicyTipRequestLogger.CreateInstance(this.CorrelationId);

            policyTipRequestLogger.StartStage(LogStage.ReceiveRequest);
            Item item = null;
            GetDlpPolicyTipsResponse result;

            try
            {
                GetDlpPolicyTipsCommand.SetReceiveRequestLogData(policyTipRequestLogger, this.ItemId, this.NeedToReclassify, this.BodyOrSubjectChanged, this.Recipients, this.EventTrigger, this.CustomizedStringsNeeded, this.ClientSupportsScanResultData, this.ScanResultData);
                if (base.CallContext != null && base.CallContext.AccessingADUser != null && base.CallContext.AccessingADUser.OrganizationId != null)
                {
                    this.OrganizationId = base.CallContext.AccessingADUser.OrganizationId;
                    if (this.ItemId == null || string.IsNullOrEmpty(this.ItemId.GetId()))
                    {
                        GetDlpPolicyTipsResponse invalidStoreItemIdResponse = GetDlpPolicyTipsResponse.InvalidStoreItemIdResponse;
                        this.TransitionToSendResponse(false, true, invalidStoreItemIdResponse, policyTipRequestLogger, true);
                        result = invalidStoreItemIdResponse;
                    }
                    else if (this.ItemId.GetId().Equals(GetDlpPolicyTipsCommand.pingRequestItemId, StringComparison.OrdinalIgnoreCase))
                    {
                        policyTipRequestLogger.AppendData("Ping", "1");
                        GetDlpPolicyTipsResponse responseToPingRequest = GetDlpPolicyTipsResponse.GetResponseToPingRequest();
                        this.TransitionToSendResponse(true, false, responseToPingRequest, policyTipRequestLogger, false);
                        result = responseToPingRequest;
                    }
                    else if (!GetDlpPolicyTipsCommand.AddItemToCurrentPending(this.ItemId.GetId()))
                    {
                        policyTipRequestLogger.AppendData("ItemAlreadyBeingProcessed", "1");
                        GetDlpPolicyTipsResponse itemAlreadyBeingProcessedResponse = GetDlpPolicyTipsResponse.ItemAlreadyBeingProcessedResponse;
                        this.TransitionToSendResponse(true, true, itemAlreadyBeingProcessedResponse, policyTipRequestLogger, false);
                        result = itemAlreadyBeingProcessedResponse;
                    }
                    else
                    {
                        ShortList <string> recipients   = GetDlpPolicyTipsCommand.ValidateAndGetEmailAddressStrings(this.Recipients, policyTipRequestLogger);
                        IdAndSession       idAndSession = null;
                        try
                        {
                            idAndSession = base.IdConverter.ConvertItemIdToIdAndSessionReadOnly(this.ItemId);
                        }
                        catch (InvalidStoreIdException exception)
                        {
                            policyTipRequestLogger.SetException(exception);
                            GetDlpPolicyTipsResponse invalidStoreItemIdResponse2 = GetDlpPolicyTipsResponse.InvalidStoreItemIdResponse;
                            this.TransitionToSendResponse(false, true, invalidStoreItemIdResponse2, policyTipRequestLogger, true);
                            return(invalidStoreItemIdResponse2);
                        }
                        catch (ObjectNotFoundException exception2)
                        {
                            policyTipRequestLogger.SetException(exception2);
                            GetDlpPolicyTipsResponse invalidStoreItemIdResponse3 = GetDlpPolicyTipsResponse.InvalidStoreItemIdResponse;
                            this.TransitionToSendResponse(false, true, invalidStoreItemIdResponse3, policyTipRequestLogger, true);
                            return(invalidStoreItemIdResponse3);
                        }
                        catch (AccessDeniedException exception3)
                        {
                            policyTipRequestLogger.SetException(exception3);
                            GetDlpPolicyTipsResponse accessDeniedStoreItemIdResponse = GetDlpPolicyTipsResponse.AccessDeniedStoreItemIdResponse;
                            this.TransitionToSendResponse(false, true, accessDeniedStoreItemIdResponse, policyTipRequestLogger, true);
                            return(accessDeniedStoreItemIdResponse);
                        }
                        policyTipRequestLogger.EndStageAndTransitionToStage(LogStage.LoadItem);
                        List <DlpPolicyMatchDetail> list = null;
                        bool   flag   = false;
                        string empty  = string.Empty;
                        string empty2 = string.Empty;
                        item = Item.Bind(idAndSession.Session, idAndSession.Id);
                        ScanResultStorageProvider scanResultStorageProvider = null;
                        if (this.ClientSupportsScanResultData)
                        {
                            try
                            {
                                scanResultStorageProvider = new ClientScanResultStorageProvider(this.ScanResultData, item);
                                goto IL_274;
                            }
                            catch (ClientScanResultParseException exception4)
                            {
                                policyTipRequestLogger.SetException(exception4);
                                GetDlpPolicyTipsResponse invalidClientScanResultResponse = GetDlpPolicyTipsResponse.InvalidClientScanResultResponse;
                                this.TransitionToSendResponse(false, true, invalidClientScanResultResponse, policyTipRequestLogger, true);
                                return(invalidClientScanResultResponse);
                            }
                        }
                        item.OpenAsReadWrite();
                        scanResultStorageProvider = new StoreItemScanResultStorageProvider(item);
IL_274:
                        string empty3 = string.Empty;
                        if (!GetDlpPolicyTipsCommand.IsSupportedStoreItemType(item, policyTipRequestLogger, out empty3))
                        {
                            GetDlpPolicyTipsResponse getDlpPolicyTipsResponse = new GetDlpPolicyTipsResponse(EvaluationResult.PermanentError);
                            getDlpPolicyTipsResponse.DiagnosticData = string.Format("{0}:{1}", "UnSupportedStoreItemType", empty3);
                            this.TransitionToSendResponse(false, true, getDlpPolicyTipsResponse, policyTipRequestLogger, true);
                            result = getDlpPolicyTipsResponse;
                        }
                        else
                        {
                            if (item != null)
                            {
                                policyTipRequestLogger.AppendData("Subject", PolicyTipRequestLogger.MarkAsPII(item.GetValueOrDefault <string>(InternalSchema.Subject, string.Empty)));
                            }
                            string fromAddress = GetDlpPolicyTipsCommand.GetFromAddress(idAndSession, item, policyTipRequestLogger);
                            if (string.IsNullOrEmpty(fromAddress))
                            {
                                policyTipRequestLogger.AppendData("NullFrom", "1");
                                GetDlpPolicyTipsResponse getDlpPolicyTipsResponse2 = new GetDlpPolicyTipsResponse(EvaluationResult.PermanentError);
                                getDlpPolicyTipsResponse2.DiagnosticData = "NullFrom";
                                this.TransitionToSendResponse(false, true, getDlpPolicyTipsResponse2, policyTipRequestLogger, true);
                                result = getDlpPolicyTipsResponse2;
                            }
                            else if (!GetDlpPolicyTipsCommand.HasContent(item, scanResultStorageProvider, policyTipRequestLogger))
                            {
                                policyTipRequestLogger.AppendData("NoContent", "1");
                                GetDlpPolicyTipsResponse noContentResponse = GetDlpPolicyTipsResponse.NoContentResponse;
                                this.TransitionToSendResponse(true, true, noContentResponse, policyTipRequestLogger, true);
                                result = noContentResponse;
                            }
                            else
                            {
                                policyTipRequestLogger.EndStageAndTransitionToStage(LogStage.RefreshClassifications);
                                policyTipRequestLogger.AppendData("BeforeRefreshClassifications", DiscoveredDataClassification.ToString(scanResultStorageProvider.GetDlpDetectedClassificationObjects()));
                                if (this.NeedToReclassify)
                                {
                                    scanResultStorageProvider.ResetAllClassifications();
                                }
                                else
                                {
                                    if (this.BodyOrSubjectChanged)
                                    {
                                        scanResultStorageProvider.RefreshBodyClassifications();
                                    }
                                    scanResultStorageProvider.RefreshAttachmentClassifications();
                                }
                                policyTipRequestLogger.AppendData("AfterRefreshClassifications", DiscoveredDataClassification.ToString(scanResultStorageProvider.GetDlpDetectedClassificationObjects()));
                                policyTipRequestLogger.EndStageAndTransitionToStage(LogStage.LoadRules);
                                policyTipRequestLogger.AppendData("OrganizationId", this.OrganizationId.ToString());
                                RuleCollection ruleCollection = GetDlpPolicyTipsCommand.LoadRules(this.OrganizationId);
                                if (ruleCollection == null || ruleCollection.Count == 0)
                                {
                                    policyTipRequestLogger.AppendData("RuleCount", "0");
                                    GetDlpPolicyTipsResponse noRulesResponse = GetDlpPolicyTipsResponse.NoRulesResponse;
                                    this.TransitionToSendResponse(true, true, noRulesResponse, policyTipRequestLogger, true);
                                    result = noRulesResponse;
                                }
                                else
                                {
                                    policyTipRequestLogger.AppendData("RuleCount", ruleCollection.Count.ToString());
                                    policyTipRequestLogger.AppendData("RuleNames", GetDlpPolicyTipsCommand.GetRuleNamesForTracking(ruleCollection));
                                    policyTipRequestLogger.EndStageAndTransitionToStage(LogStage.EvaluateRules);
                                    ExecutionStatus executionStatus = GetDlpPolicyTipsCommand.RunRules(ruleCollection, scanResultStorageProvider, item, fromAddress, recipients, out list, out flag, out empty, out empty2, policyTipRequestLogger);
                                    policyTipRequestLogger.AppendData("ExecutionStatus", executionStatus.ToString());
                                    policyTipRequestLogger.AppendData("MatchResults", (list == null) ? string.Empty : DlpPolicyMatchDetail.ToString(list));
                                    policyTipRequestLogger.AppendData("RuleEvalLatency", empty);
                                    policyTipRequestLogger.AppendData("RuleEvalResult", empty2);
                                    PolicyTipCustomizedStrings policyTipCustomizedStrings = null;
                                    if (this.CustomizedStringsNeeded)
                                    {
                                        policyTipRequestLogger.EndStageAndTransitionToStage(LogStage.LoadCustomStrings);
                                        UserContext userContext = UserContextManager.GetUserContext(base.CallContext.HttpContext, base.CallContext.EffectiveCaller, true);
                                        CultureInfo userCulture = userContext.UserCulture;
                                        policyTipRequestLogger.AppendData("CallersCulture", userCulture.Name);
                                        policyTipCustomizedStrings = ADUtils.GetPolicyTipStrings(this.OrganizationId, userCulture.Name);
                                        policyTipRequestLogger.AppendData("PolicyTipStrings", (policyTipCustomizedStrings == null) ? string.Empty : string.Format("Url:{0}/Notify:{1}/Override:{2}/Block:{3}", new object[]
                                        {
                                            policyTipCustomizedStrings.ComplianceURL ?? string.Empty,
                                            policyTipCustomizedStrings.PolicyTipMessageNotifyString ?? string.Empty,
                                            policyTipCustomizedStrings.PolicyTipMessageOverrideString ?? string.Empty,
                                            policyTipCustomizedStrings.PolicyTipMessageBlockString ?? string.Empty
                                        }));
                                    }
                                    GetDlpPolicyTipsResponse getDlpPolicyTipsResponse3 = new GetDlpPolicyTipsResponse(EvaluationResult.Success);
                                    if (this.ClientSupportsScanResultData)
                                    {
                                        getDlpPolicyTipsResponse3.ScanResultData            = ((ClientScanResultStorageProvider)scanResultStorageProvider).GetScanResultData();
                                        getDlpPolicyTipsResponse3.DetectedClassificationIds = ((ClientScanResultStorageProvider)scanResultStorageProvider).GetDetectedClassificationIds();
                                    }
                                    else
                                    {
                                        item.Save(SaveMode.ResolveConflicts);
                                    }
                                    if (list != null)
                                    {
                                        getDlpPolicyTipsResponse3.Matches = list.ToArray();
                                    }
                                    if (flag)
                                    {
                                        getDlpPolicyTipsResponse3.OptimizationResult = OptimizationResult.NoContentMatch;
                                    }
                                    if (this.CustomizedStringsNeeded)
                                    {
                                        getDlpPolicyTipsResponse3.CustomizedStrings = policyTipCustomizedStrings;
                                    }
                                    this.TransitionToSendResponse(true, false, getDlpPolicyTipsResponse3, policyTipRequestLogger, true);
                                    result = getDlpPolicyTipsResponse3;
                                }
                            }
                        }
                    }
                }
                else
                {
                    GetDlpPolicyTipsResponse nullOrganizationResponse = GetDlpPolicyTipsResponse.NullOrganizationResponse;
                    this.TransitionToSendResponse(false, true, nullOrganizationResponse, policyTipRequestLogger, true);
                    result = nullOrganizationResponse;
                }
            }
            catch (Exception ex)
            {
                policyTipRequestLogger.SetException(ex);
                GetDlpPolicyTipsResponse getDlpPolicyTipsResponse4;
                if (!GetDlpPolicyTipsCommand.CheckIfKnownExceptionAndUpdatePerfCounters(ex))
                {
                    getDlpPolicyTipsResponse4 = new GetDlpPolicyTipsResponse(EvaluationResult.UnexpectedPermanentError);
                    this.TransitionToSendResponse(false, false, getDlpPolicyTipsResponse4, policyTipRequestLogger, true);
                    throw;
                }
                getDlpPolicyTipsResponse4 = new GetDlpPolicyTipsResponse(EvaluationResult.PermanentError);
                this.TransitionToSendResponse(false, false, getDlpPolicyTipsResponse4, policyTipRequestLogger, true);
                List <string> list2 = null;
                List <string> list3 = null;
                string        text  = null;
                PolicyTipProtocolLog.GetExceptionTypeAndDetails(ex, out list2, out list3, out text, false);
                getDlpPolicyTipsResponse4.DiagnosticData = string.Format("OuterExceptionType:{0}/OuterExceptionMessage:{1}/InnerExceptionType:{2}/InnerExceptionMessage:{3}/ExceptionChain:{4}.", new object[]
                {
                    list2[0],
                    list3[0],
                    (list2.Count > 1) ? list2[list2.Count - 1] : string.Empty,
                    (list2.Count > 1) ? list3[list3.Count - 1] : string.Empty,
                    text
                });
                result = getDlpPolicyTipsResponse4;
            }
            finally
            {
                if (item != null)
                {
                    item.Dispose();
                    item = null;
                }
            }
            return(result);
        }
コード例 #6
0
        public override IEnumerable <DiscoveredDataClassification> GetDlpDetectedClassificationObjects()
        {
            string dlpDetectedClassificationObjectsAsString = this.GetDlpDetectedClassificationObjectsAsString();

            return(DiscoveredDataClassification.DeserializeFromXml(dlpDetectedClassificationObjectsAsString));
        }