Пример #1
0
 public EuGatewayService(ITemporaryExposureKeyRepository tempKeyRepository,
                         ISignatureService signatureService,
                         IEncodingService encodingService,
                         IKeyFilter keyFilter,
                         IGatewayWebContextReader gatewayWebContextReader,
                         IMapper mapper,
                         ILogger <EuGatewayService> logger,
                         EuGatewayConfig euGatewayConfig,
                         ISettingsService settingsService,
                         IEpochConverter epochConverter,
                         IGatewayHttpClient gatewayHttpClient,
                         IEFGSKeyStoreService storeService
                         )
 {
     _signatureService  = signatureService;
     _tempKeyRepository = tempKeyRepository;
     _encodingService   = encodingService;
     _keyFilter         = keyFilter;
     _webContextReader  = gatewayWebContextReader;
     _mapper            = mapper;
     _logger            = logger;
     _euGatewayConfig   = euGatewayConfig;
     _settingsService   = settingsService;
     _epochConverter    = epochConverter;
     _gatewayHttpClient = gatewayHttpClient;
     _storeService      = storeService;
 }
Пример #2
0
        private void GetCombinedKeysFromEveryType(string tag, HashVector finalResult)
        {
            if (_indexMap == null)
            {
                return;
            }
            IDictionaryEnumerator typeEnumerator;

            lock (_indexMap.SyncRoot)
            {
                typeEnumerator = _indexMap.GetEnumerator();
            }

            while (typeEnumerator.MoveNext())
            {
                AttributeIndex index = typeEnumerator.Value as AttributeIndex;
                IIndexStore    store = index.GetStore("$Tag$");

                if (store != null)
                {
                    IKeyFilter keyFilter = _cache != null?_cache.GetBucketFilter() : null;

                    IKeyFilter compoundFilter = _cache != null?_cache.GetCompoundFilter() : null;

                    IQueryResult result = new ListQueryResult(keyFilter, compoundFilter);
                    store.GetData(tag.ToLower(), ComparisonType.EQUALS, result, CollectionOperation.Union);
                    foreach (string key in result)
                    {
                        finalResult[key] = null;
                    }
                }
            }
        }
 internal static void AddKeyFilter(IKeyFilter value)
 {
     lock (key_filters)
     {
         key_filters.Add(value);
     }
 }
        private EuGatewayService CreateGatewayService(
            TemporaryExposureKeyRepository keysRepository,
            ISignatureService signatureService,
            IMapper autoMapper,
            IGatewayHttpClient gateWayHttpClient,
            IKeyFilter keyFilter,
            IGatewayWebContextReader webContextReader,
            IEFGSKeyStoreService storeService,
            ILogger <EuGatewayService> logger,
            EuGatewayConfig config)
        {
            var encodingService = new EncodingService();
            var epochConverter  = new EpochConverter();

            var gatewaySyncStateSettingsDao = new GatewaySyncStateSettingsDao(new SettingRepository(_dbContext));
            var settingsService             = new SettingsService(gatewaySyncStateSettingsDao);

            return(new EuGatewayService(
                       keysRepository,
                       signatureService,
                       encodingService,
                       keyFilter,
                       webContextReader,
                       autoMapper,
                       logger,
                       config,
                       settingsService,
                       epochConverter,
                       gateWayHttpClient,
                       storeService));
        }
Пример #5
0
 public MapperTask(IMapper mapper, MapReduceInput input, IKeyFilter filter, MapReduceTask prnt)
 {
     this.mapper        = mapper;
     this.parent        = prnt;
     this.inputProvider = input;
     this.keyFilter     = filter;
 }
Пример #6
0
 internal static bool FilterKey(KeyFilterData key)
 {
     lock (key_filters) {
         for (int i = 0; i < key_filters.Count; i++)
         {
             IKeyFilter filter = (IKeyFilter)key_filters[i];
             if (filter.PreFilterKey(key))
             {
                 return(true);
             }
         }
     }
     return(false);
 }
Пример #7
0
        public void RemoveKeyDuplicates_ShouldOnlyWorkOnKeysCreatedUpTo14DaysAgo()
        {
            var options = new DbContextOptionsBuilder <DigNDB_SmittestopContext>()
                          .UseInMemoryDatabase(nameof(EuGatewayServiceUploadTest))
                          .Options;

            var dbContext = new DigNDB_SmittestopContext(options);

            dbContext.Database.EnsureDeleted();
            var translationsRepositoryMock = new Mock <IGenericRepository <Translation> >(MockBehavior.Strict);

            var originSpecificSettings = new AppSettingsConfig()
            {
                OriginCountryCode = "dk"
            };
            var countryRepository = new CountryRepository(dbContext, translationsRepositoryMock.Object, originSpecificSettings);
            var keysRepository    = new TemporaryExposureKeyRepository(dbContext, countryRepository);

            _keyFilter = new KeyFilter(_keyMapper, _keyValidator.Object, new ExposureKeyMapper(), _logger.Object, keysRepository);

            var rollingStartNumberNewerThan14Days = DateTimeOffset.Now.Subtract(new TimeSpan(DaysOffset - 1, 0, 0, 0)).ToUnixTimeSeconds();
            var rollingStartNumberOlderThan14Days = DateTimeOffset.Now.Subtract(new TimeSpan(DaysOffset + 3, 0, 0, 0)).ToUnixTimeSeconds();
            var origin = new Country {
                Id = 1
            };
            var keysNewerThan14Days = new List <TemporaryExposureKey>
            {
                new TemporaryExposureKey {
                    Id = Guid.NewGuid(), RollingStartNumber = rollingStartNumberNewerThan14Days, Origin = origin, KeyData = new byte[] { 1 }
                },
            };
            var keysOlderThan14Days = new List <TemporaryExposureKey>
            {
                new TemporaryExposureKey {
                    Id = Guid.NewGuid(), RollingStartNumber = rollingStartNumberOlderThan14Days, Origin = origin, KeyData = new byte[] { 2 }
                },
                new TemporaryExposureKey {
                    Id = Guid.NewGuid(), RollingStartNumber = rollingStartNumberOlderThan14Days, Origin = origin, KeyData = new byte[] { 3 }
                },
            };
            var keyList = keysNewerThan14Days.Concat(keysOlderThan14Days).ToList();

            dbContext.TemporaryExposureKey.AddRange(keyList);
            dbContext.SaveChanges();

            var filteredList = _keyFilter.RemoveKeyDuplicatesAsync(keyList).Result;

            filteredList.Count.Should().Be(keysOlderThan14Days.Count);
        }
Пример #8
0
        private void GetCombinedKeysFromEveryType(string tag, HashVector finalResult, CancellationToken token, bool wildCardSupport = false)
        {
            if (_indexMap == null)
            {
                return;
            }
            IDictionaryEnumerator typeEnumerator;

            lock (_indexMap.SyncRoot)
            {
                typeEnumerator = _indexMap.GetEnumerator();
            }

            while (typeEnumerator.MoveNext())
            {
                if (token != null && token.IsCancellationRequested)
                {
                    throw new OperationCanceledException(ExceptionsResource.OperationFailed);
                }

                AttributeIndex index = typeEnumerator.Value as AttributeIndex;
                IIndexStore    store = index.GetStore("$Tag$");

                if (store != null)
                {
                    IKeyFilter keyFilter = _cache != null?_cache.GetBucketFilter() : null;

                    IKeyFilter compoundFilter = _cache != null?_cache.GetCompoundFilter() : null;

                    IQueryResult result = new ListQueryResult(keyFilter, compoundFilter);

                    if (wildCardSupport)
                    {
                        store.GetData(tag.ToLower(), ComparisonType.LIKE, result, CollectionOperation.Union, token);
                    }
                    else
                    {
                        store.GetData(tag.ToLower(), ComparisonType.EQUALS, result, CollectionOperation.Union, token);
                    }


                    foreach (string key in result)
                    {
                        finalResult[key] = null;
                    }
                }
            }
        }
Пример #9
0
 public EFGSKeyStoreService(IGatewayWebContextReader reader,
                            IKeyFilter filter,
                            ITemporaryExposureKeyRepository repository,
                            ILogger <EFGSKeyStoreService> logger,
                            IRiskCalculator riskCalculator,
                            IEpochConverter epochConverter,
                            IDaysSinceOnsetOfSymptomsDecoder daysSinceOnsetOfSymptomsDecoder)
 {
     _webContextReader  = reader;
     _keyFilter         = filter;
     _tempKeyRepository = repository;
     _logger            = logger;
     _riskCalculator    = riskCalculator;
     _epochConverter    = epochConverter;
     _daysSinceOnsetOfSymptomsDecoder = daysSinceOnsetOfSymptomsDecoder;
 }
 public EFGSKeyStoreService(IKeyFilter filter,
                            ITemporaryExposureKeyRepository repository,
                            ILogger <EFGSKeyStoreService> logger,
                            IRiskCalculator riskCalculator,
                            IEpochConverter epochConverter,
                            IDaysSinceOnsetOfSymptomsDecoder daysSinceOnsetOfSymptomsDecoder,
                            IAddTemporaryExposureKeyService addTemporaryExposureKeyService)
 {
     _addTemporaryExposureKeyService = addTemporaryExposureKeyService;
     _keyFilter         = filter;
     _tempKeyRepository = repository;
     _logger            = logger;
     _riskCalculator    = riskCalculator;
     _epochConverter    = epochConverter;
     _daysSinceOnsetOfSymptomsDecoder = daysSinceOnsetOfSymptomsDecoder;
 }
Пример #11
0
        public void Init()
        {
            _exposureKeyMock   = new ExposureKeyMock();
            _countryFactory    = new CountryMockFactory();
            _mockServices      = new SetupMockedServices();
            _keyValidator      = new Mock <IKeyValidator>(MockBehavior.Strict);
            _logger            = new Mock <ILogger <KeyFilter> >();
            _repository        = new Mock <ITemporaryExposureKeyRepository>(MockBehavior.Strict);
            _countryRepository = new Mock <ICountryRepository>(MockBehavior.Strict);
            _mockServices.SetupMapperAndCountryRepositoryMock(_countryRepository);
            _keyMapper = _mockServices.CreateAutoMapperWithDependencies(_countryRepository.Object);
            _mockServices.SetupKeyValidatorMock(_keyValidator);
            _mockServices.SetupTemopraryExposureKeyRepositoryMock(_repository);

            var mapper = new ExposureKeyMapper();

            _keyFilter = new KeyFilter(_keyMapper, _keyValidator.Object, mapper, _logger.Object, _repository.Object);
        }
Пример #12
0
 public ListQueryResult(IKeyFilter kf, IKeyFilter cf, IList result) : this(kf, cf)
 {
     _resultKeys.AddRange(result);
 }
Пример #13
0
		internal static void AddKeyFilter (IKeyFilter value)
		{
			XplatUI.AddKeyFilter (value);
		}
Пример #14
0
 public HashedQueryResult(IKeyFilter keyFilter, IKeyFilter compoundFilter)
 {
     this.KeyFilter      = KeyFilter;
     this.CompoundFilter = compoundFilter;
 }
Пример #15
0
 public HashSetQueryResult(IKeyFilter kf, IKeyFilter cf)
 {
     this.KeyFilter      = kf;
     this.CompoundFilter = cf;
 }
Пример #16
0
        /// <summary>
        /// 根据查询条件返回数据
        /// </summary>
        /// <param name="result"></param>
        /// <returns></returns>
        private void WrapData(JsonResult result)
        {
            var baseQuery    = result.Data as IQueryable <T>;
            var queryManager = SiteManager.Get <AdvQueryManager>();

            if (String.IsNullOrWhiteSpace(_pageModel.SortExpression))
            {
                _pageModel.SortField = "Id";
                _pageModel.SortOrder = "desc";
            }
            if (!_pageModel.Key.IsEmpty())
            {
                IKeyFilter <T> keyController = _filterContext.Controller as IKeyFilter <T>;
                Func <string, Expression <Func <T, bool> > > func = BuildDefaultKeyFilter;
                if (keyController != null)
                {
                    func = keyController.GetKeyFilter;
                }

                string[] keys = _pageModel.Key.Split(' ');
                _keyFilter = null;
                foreach (string key in keys)
                {
                    if (!String.IsNullOrWhiteSpace(key))
                    {
                        _keyFilter = _keyFilter.And(func(key));
                    }
                }

                baseQuery = baseQuery.Where(_keyFilter);
            }
            else if (!_pageModel.AdvQuery.IsEmpty())
            {
                int queryType = CommOp.ToInt(_filterContext.HttpContext.Request["QueryType"]);
                //调用服务层业务逻辑获取分页数据
                baseQuery = queryManager.Query(baseQuery, _pageModel.AdvQuery, queryType);
            }

            if (_pageModel.PageSize == 0) //不分页的情况
            {
                result.Data = baseQuery;
            }
            else
            {
                Pager <T> pageData = null;
                _pageModel.PageIndex++;//MiniUI的分页数字是从0开始,实际的分页是从1开始的,这里+1同步。
                pageData = new Pager <T>(baseQuery.OrderBy(_pageModel.SortExpression), _pageModel.PageIndex, _pageModel.PageSize);

                //让用户有机会在数据返回前作一些处理
                var pagedController = _filterContext.Controller as IPagedDataController <T>;
                if (pagedController != null)
                {
                    pagedController.BeforeShowingPage(pageData);
                }

                //根据mini-UI的mini-grid控件的约定返回数据
                result.Data = new
                {
                    data  = pageData,
                    total = pageData.RecordCount
                };
            }
            queryManager.Dispose();
            result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
        }
Пример #17
0
		internal static void AddKeyFilter (IKeyFilter value)
		{
			lock (key_filters) {
				key_filters.Add (value);
			}
		}
Пример #18
0
 public ListQueryResult(IKeyFilter kf, IKeyFilter cf)
 {
     KeyFilter      = kf;
     CompoundFilter = cf;
 }
Пример #19
0
 public virtual void ExecuteMapReduceTask(MapReduceTask task, string taskId, MROutputOption option,
                                          short callbackId, IKeyFilter keyfilter, string query, Hashtable parameters)
 {
 }
Пример #20
0
 internal static void AddKeyFilter(IKeyFilter value)
 {
     XplatUI.AddKeyFilter(value);
 }
Пример #21
0
 public Filter(IKeyFilter keyFilter)
 {
     this.keyFilter = keyFilter;
 }