Пример #1
0
        public DatePathFilter(FileStoreFilterV1 filter)
        {
            if (filter == null)
            {
                throw new ArgumentNullException(nameof(filter));
            }

            _start = filter.TimestampRangeStart ?? throw new ArgumentException("Start was null", nameof(filter));
            _end   = filter.TimestampRangeEnd ?? throw new ArgumentException("End was null", nameof(filter));
        }
        public void Setup()
        {
            _input = new FileStoreFilterV1
            {
                TimestampRangeStart = new DateTimeOffset(2020, 1, 1, 0, 0, 0, 0, TimeSpan.Zero),
                TimestampRangeEnd   = new DateTimeOffset(2020, 12, 1, 0, 0, 0, 0, TimeSpan.Zero)
            };

            ClassInTest = new DatePathFilter(_input);
        }
        public bool TryParseEventDateWithFilter(FileStoreFilterV1 filter, out DateTimeOffset timestamp)
        {
            TryGetEvent(EventId.NewDocument, out var newDocumentEvent);

            if (!DateTimeOffset.TryParse(newDocumentEvent.PropertyOrDefault("Timestamp"), out timestamp))
            {
                return(false);
            }

            return(timestamp >= filter.TimestampRangeStart && timestamp <= filter.TimestampRangeEnd);
        }
        public bool TryParseFileTypeWithFilter(FileStoreFilterV1 filter, out FileType fileType)
        {
            TryGetEvent(EventId.FileTypeDetected, out var fileTypeDetectedEvent);

            fileType = fileTypeDetectedEvent.PropertyOrDefault <FileType>("FileType") ?? FileType.Unknown;

            if (filter.SearchFileType)
            {
                return(filter.FileTypes.Contains(fileType));
            }
            return(true);
        }
        public bool TryParsePolicyIdWithFilter(FileStoreFilterV1 filter, out Guid policyId)
        {
            TryGetEvent(EventId.NewDocument, out var newDocumentEvent);

            Guid.TryParse(newDocumentEvent.PropertyOrDefault("PolicyId"), out policyId);

            if (filter.SearchPolicyIds)
            {
                return(filter.PolicyIds.Contains(policyId));
            }

            return(true);
        }
        public bool TryParseRiskWithFilter(FileStoreFilterV1 filter, out Risk risk)
        {
            TryGetEvent(EventId.RebuildCompleted, out var rebuildEvent);
            TryGetEvent(EventId.NCFSCompletedEvent, out var ncfsEvent);

            var gwOutcome   = rebuildEvent.PropertyOrDefault <GwOutcome>("GwOutcome") ?? GwOutcome.Unknown;
            var ncfsOutcome = ncfsEvent.PropertyOrDefault <NcfsOutcome>("NCFSOutcome") ?? NcfsOutcome.Unknown;

            risk = RiskAssessment.DetermineRisk(ncfsOutcome, gwOutcome);

            if (filter.SearchRisk)
            {
                return(filter.Risks.Contains(risk));
            }

            return(true);
        }
        private async IAsyncEnumerable <GetTransactionsResponseV1File> HandleShare(
            IFileShare share,
            FileStoreFilterV1 filter,
            [EnumeratorCancellation] CancellationToken cancellationToken)
        {
            await foreach (var fileDirectory in share.ListAsync(new DatePathFilter(filter), cancellationToken))
            {
                if (filter.AllFileIdsFound)
                {
                    yield break;
                }

                var eventFile = await DownloadFile(share, fileDirectory, cancellationToken);

                if (!eventFile.TryParseEventDateWithFilter(filter, out var timestamp))
                {
                    continue;
                }
                if (!eventFile.TryParseFileIdWithFilter(filter, out var fileId))
                {
                    continue;
                }
                if (!eventFile.TryParseFileTypeWithFilter(filter, out var fileType))
                {
                    continue;
                }
                if (!eventFile.TryParseRiskWithFilter(filter, out var risk))
                {
                    continue;
                }
                if (!eventFile.TryParsePolicyIdWithFilter(filter, out var policyId))
                {
                    continue;
                }

                yield return(new GetTransactionsResponseV1File
                {
                    ActivePolicyId = policyId,
                    DetectionFileType = fileType,
                    FileId = fileId,
                    Risk = risk,
                    Timestamp = timestamp,
                    Directory = fileDirectory
                });
            }
        }
        public bool TryParseFileIdWithFilter(FileStoreFilterV1 filter, out Guid fileId)
        {
            TryGetEvent(EventId.NewDocument, out var newDocumentEvent);

            if (!Guid.TryParse(newDocumentEvent.PropertyOrDefault("FileId"), out fileId))
            {
                return(false);
            }

            if (filter.SearchFileIds)
            {
                if (!filter.FileIds.Contains(fileId))
                {
                    return(false);
                }
                filter.FileIds.Remove(fileId);
                if (!filter.FileIds.Any())
                {
                    filter.AllFileIdsFound = true;
                }
            }

            return(true);
        }