Exemple #1
0
        private async Task <IActionResult> GetDomainSecurityInfoInternal <T>(DomainsRequest request,
                                                                             Func <DomainsRequest, Task <T> > getDomainSecurityInfoResponse,
                                                                             Func <T, List <DomainSecurityInfo>, T> updateResponseFactory) where T : DomainsSecurityResponse
        {
            ValidationResult validationResult = await _domainsRequestValidator.ValidateAsync(request);

            if (!validationResult.IsValid)
            {
                string errorString = validationResult.GetErrorString();
                _log.LogWarning($"Bad request: {errorString}");
                return(BadRequest(new ErrorResponse(errorString)));
            }

            T domainsSecurityResponse =
                await getDomainSecurityInfoResponse(request);

            List <DomainSecurityInfo> domainSecurityInfoWithoutDmarcRecord =
                domainsSecurityResponse.DomainSecurityInfos.Where(_ => !_.HasDmarc).ToList();

            if (!domainSecurityInfoWithoutDmarcRecord.Any())
            {
                return(new ObjectResult(domainsSecurityResponse));
            }

            Dictionary <string, string> nonOrgDomainsWithoutDmarcRecordForOrgDomains =
                await GetOrganisationalDomains(domainSecurityInfoWithoutDmarcRecord);

            if (!nonOrgDomainsWithoutDmarcRecordForOrgDomains.Any())
            {
                return(new ObjectResult(domainsSecurityResponse));
            }

            List <string> organisationalDomains = nonOrgDomainsWithoutDmarcRecordForOrgDomains.Values.Distinct().ToList();

            List <DomainSecurityInfo> orgDomainSecurityInfos = await _domainStatusListDao
                                                               .GetDomainsSecurityInfoByDomainNames(organisationalDomains);

            List <DomainSecurityInfo> updatedDomainSecurityInfos = Merge(domainsSecurityResponse.DomainSecurityInfos, orgDomainSecurityInfos,
                                                                         nonOrgDomainsWithoutDmarcRecordForOrgDomains);

            return(new ObjectResult(updateResponseFactory(domainsSecurityResponse, updatedDomainSecurityInfos)));
        }
Exemple #2
0
        public async Task GetDomainSecurityInfoInvalidRequestReturnsBadRequest()
        {
            ValidationResult validationResult = new ValidationResult(new List <ValidationFailure> {
                new ValidationFailure(string.Empty, string.Empty)
            });

            A.CallTo(() => _domainRequestValidator.ValidateAsync(A <DomainsRequest> ._, CancellationToken.None))
            .Returns(Task.FromResult(validationResult));

            DomainsRequest request = new DomainsRequest();
            IActionResult  result  = await _domainStatusListController.GetDomainsSecurityInfo(request);

            Assert.That(result, Is.TypeOf <BadRequestObjectResult>());
            A.CallTo(() => _domainStatusListDao.GetDomainsSecurityInfo(A <int> ._, A <int> ._, A <string> ._)).MustNotHaveHappened();
            A.CallTo(() => _certificateEvaluatorApi.UpdateTlsWithCertificateEvaluatorStatus(A <List <DomainSecurityInfo> > ._)).MustNotHaveHappened();
            A.CallTo(() => _domainStatusListDao.GetDomainsCount(A <string> ._)).MustNotHaveHappened();
            A.CallTo(() => _organisationDomainProvider.GetOrganisationalDomain(A <string> ._)).MustNotHaveHappened();
            A.CallTo(() => _domainStatusListDao.GetDomainsSecurityInfoByDomainNames(A <List <string> > ._)).MustNotHaveHappened();
        }