public void Publish(SpfRecordsEvaluated message) { List <Message> rootMessages = message.Messages; List <Message> recordsMessages = message.Records?.Messages; IEnumerable <Message> recordsRecordsMessages = message.Records?.Records?.SelectMany(x => x.Messages); List <SpfRecord> recordsRecords = message.Records?.Records; List <Message> recursiveMessages = new List <Message>(); if (recordsRecords != null && recordsRecords.Count > 0) { foreach (SpfRecord record in recordsRecords) { IEnumerable <Message> recordMessages = GetMessages(record); recursiveMessages.AddRange(recordMessages); } } IEnumerable <Message> messages = (rootMessages ?? new List <Message>()) .Concat(recordsMessages ?? new List <Message>()) .Concat(recordsRecordsMessages ?? new List <Message>()) .Concat(recursiveMessages ?? new List <Message>()); Status status = _domainStatusEvaluator.GetStatus(messages.ToList()); DomainStatusEvaluation domainStatusEvaluation = new DomainStatusEvaluation(message.Id, "SPF", status); _log.LogInformation($"Publishing SPF domain status for {message.Id} of {status}"); _dispatcher.Dispatch(domainStatusEvaluation, _spfEntityConfig.SnsTopicArn); }
public async Task Publish(TlsResultsEvaluated message) { List <TlsEvaluatedResult> evaluatedResults = message.TlsRecords?.Records?.Select(x => x.TlsEvaluatedResult).ToList(); List <Error> evaluatedCertificates = message.Certificates?.Errors; Dictionary <string, List <TlsEntityState> > domainsContainingHost = await _dao.GetDomains(message.Id); foreach (string domain in domainsContainingHost.Keys) { List <TlsEntityState> existingHostStates = domainsContainingHost[domain]; List <TlsEvaluatedResult> existingResults = existingHostStates .Where(x => x.TlsRecords?.Records != null) .SelectMany(x => x.TlsRecords?.Records?.Select(y => y.TlsEvaluatedResult)).ToList(); List <Error> existingCertificates = existingHostStates .Where(x => x.CertificateResults?.Errors != null) .SelectMany(x => x.CertificateResults?.Errors).ToList(); existingResults.AddRange(evaluatedResults ?? new List <TlsEvaluatedResult>()); existingCertificates.AddRange(evaluatedCertificates ?? new List <Error>()); Status status = _domainStatusEvaluator.GetStatus(existingResults, existingCertificates); DomainStatusEvaluation domainStatusEvaluation = new DomainStatusEvaluation(domain, "TLS", status); _log.LogInformation( $"Publishing TLS domain status for domain {domain} because it contains mx host {message.Id} which was evaluated"); _dispatcher.Dispatch(domainStatusEvaluation, _tlsEntityConfig.SnsTopicArn); } }
public void Publish(DkimRecordEvaluationResult message) { if (message.SelectorResults is null || message.SelectorResults.Count == 0) { return; } List <Contracts.SharedDomain.DkimSelector> selectors = message.SelectorResults?.Select(x => x.Selector).ToList(); IEnumerable <SharedDomainMessage> pollErrors = selectors .Where(x => x.PollError != null) .Select(x => x.PollError); IEnumerable <SharedDomainMessage> selectorMessages = selectors .Where(x => x.Records != null) .SelectMany(x => x.Records) .Where(x => x.Messages != null) .SelectMany(x => x.Messages); IEnumerable <SharedDomainMessage> messages = pollErrors.Concat(selectorMessages); List <DkimEvaluatorMessage> recordResults = message.SelectorResults.SelectMany(x => x.RecordsResults) .SelectMany(x => x.Messages).ToList(); Status status = _domainStatusEvaluator.GetStatus(recordResults.ToList(), messages.ToList()); DomainStatusEvaluation domainStatusEvaluation = new DomainStatusEvaluation(message.Id, "DKIM", status); _log.LogInformation($"Publishing DKIM domain status for {message.Id}."); _dispatcher.Dispatch(domainStatusEvaluation, _spfEntityConfig.SnsTopicArn); }