public void RecordTagsMustExist()
        {
            AttachmentInfo attachmentInfo = CreateAttachmentInfo(AggregateReportDeserialiserTestsResource.NoRecordTags);
            EmailMetadata  emailMetadata  = CreateEmailMetadata();

            Assert.Throws <ArgumentException>(() => _aggregateReportDeserialiser.Deserialise(attachmentInfo, emailMetadata));
        }
        public void PolicyPublishedTagsMustNotOccurMoreThanOnce()
        {
            AttachmentInfo attachmentInfo = CreateAttachmentInfo(AggregateReportDeserialiserTestsResource.MultiplePolicyPublishedTags);
            EmailMetadata  emailMetadata  = CreateEmailMetadata();

            Assert.Throws <InvalidOperationException>(() => _aggregateReportDeserialiser.Deserialise(attachmentInfo, emailMetadata));
        }
        public AggregateReportInfo Deserialise(AttachmentInfo attachment, EmailMetadata emailMetadata)
        {
            using (Stream stream = attachment.GetStream())
            {
                using (StreamReader streamReader = new StreamReader(stream))
                {
                    using (XmlReader reader = XmlReader.Create(streamReader))
                    {
                        XDocument document = XDocument.Load(reader);

                        XElement feedback = document.Root;
                        if (document.Root.Name != "feedback")
                        {
                            throw new ArgumentException("Root of aggregate report must be feedback.");
                        }

                        ReportMetadata  reportMetadata  = _reportMetadataDeserialiser.Deserialise(feedback.Single("report_metadata"));
                        PolicyPublished policyPublished = _policyPublishedDeserialiser.Deserialise(feedback.Single("policy_published"));

                        IEnumerable <XElement> recordElements = feedback.Where("record").ToList();

                        if (!recordElements.Any())
                        {
                            throw new ArgumentException("Aggregate report must contain at least 1 record.");
                        }

                        Record[] records = _recordDeserialiser.Deserialise(recordElements);

                        Domain.Dmarc.AggregateReport aggregateReport = new Domain.Dmarc.AggregateReport(reportMetadata, policyPublished, records);
                        return(new AggregateReportInfo(aggregateReport, emailMetadata, attachment.AttachmentMetadata));
                    }
                }
            }
        }
        public void TagsMustBeDirectDecendants()
        {
            AttachmentInfo attachmentInfo = CreateAttachmentInfo(AggregateReportDeserialiserTestsResource.TagsNotDirectDescendants);
            EmailMetadata  emailMetadata  = CreateEmailMetadata();

            Assert.Throws <InvalidOperationException>(() => _aggregateReportDeserialiser.Deserialise(attachmentInfo, emailMetadata));
        }
        public void RootMustBeFeedback()
        {
            AttachmentInfo attachmentInfo = CreateAttachmentInfo(AggregateReportDeserialiserTestsResource.RootNotFeedback);
            EmailMetadata  emailMetadata  = CreateEmailMetadata();

            Assert.Throws <ArgumentException>(() => _aggregateReportDeserialiser.Deserialise(attachmentInfo, emailMetadata));
        }
Example #6
0
 public AggregateReportInfo(Dmarc.AggregateReport aggregateReport,
                            EmailMetadata emailMetadata,
                            AttachmentMetadata attachmentMetadata)
     : base(emailMetadata)
 {
     AggregateReport    = aggregateReport;
     AttachmentMetadata = attachmentMetadata;
 }
 public AggregateReportInfo(Dmarc.AggregateReport aggregateReport,
                            EmailMetadata emailMetadata,
                            AttachmentInfo attachmentInfo)
 {
     AggregateReport = aggregateReport;
     AttachmentInfo  = attachmentInfo;
     EmailMetadata   = emailMetadata;
 }
Example #8
0
 public UserService(SignInManager <CBAUser> signInManager, UserManager <CBAUser> userManager, RoleManager <CBARole> roleManager, EmailMetadata emailMetadata, ApplicationDbContext context)
 {
     _signInManager = signInManager;
     _roleManager   = roleManager;
     _userManager   = userManager;
     _emailMetadata = emailMetadata;
     _context       = context;
 }
        public void CorrectlyFormedReportNoDeclarationGeneratesAggregateReportInfo()
        {
            AttachmentInfo attachmentInfo = CreateAttachmentInfo(AggregateReportDeserialiserTestsResource.CorrectlyFormedReportNoDeclaration);
            EmailMetadata  emailMetadata  = CreateEmailMetadata();

            AggregateReportInfo aggregateReportInfo = _aggregateReportDeserialiser.Deserialise(attachmentInfo, emailMetadata);

            Assert.That(aggregateReportInfo, Is.Not.Null);
        }
        public void RecordTagsCanOccurrMultipleTimes()
        {
            AttachmentInfo attachmentInfo = CreateAttachmentInfo(AggregateReportDeserialiserTestsResource.CorrectlyFormedReportNoDeclaration);
            EmailMetadata  emailMetadata  = CreateEmailMetadata();

            AggregateReportInfo aggregateReportInfo = _aggregateReportDeserialiser.Deserialise(attachmentInfo, emailMetadata);

            Assert.That(aggregateReportInfo, Is.Not.Null);
        }
Example #11
0
        private AggregateReportInfo CreateAggregateReportInfo()
        {
            Dmarc.AggregateReport.Parser.Lambda.Domain.Dmarc.AggregateReport aggregateReport = new Dmarc.AggregateReport.Parser.Lambda.Domain.Dmarc.AggregateReport {
                Records = new Record[0]
            };
            EmailMetadata      emailMetadata      = new EmailMetadata("", "", 1);
            AttachmentMetadata attachmentMetadata = new AttachmentMetadata("");

            return(new AggregateReportInfo(aggregateReport, emailMetadata, attachmentMetadata));
        }
Example #12
0
 private EmailMessage Map(MercuryRequest <ExpandoObject> request, EmailMetadata metadata, string body)
 {
     return(new EmailMessage
     {
         From = metadata.From ?? settings.From,
         Tos = request.Tos,
         Ccs = request.Ccs,
         Bccs = request.Bccs,
         Subject = metadata.Subject,
         Body = body
     });
 }
        private AggregateReportInfo CreateReportInfo(DkimAuthResult[] dkimAuthResults = null, SpfAuthResult[] spfAuthResults = null)
        {
            Domain.Dmarc.AggregateReport aggregateReport = new Domain.Dmarc.AggregateReport(1.0,
                                                                                            new ReportMetadata("org", "*****@*****.**", "extra", "reportid", new DateRange(1, 2), new [] { "error" }),
                                                                                            new PolicyPublished("abc.com", Alignment.r, Alignment.r, Disposition.none, Disposition.none, 0, "fo"),
                                                                                            new Record[]
            {
                new Record(new Row("source", 1,
                                   new PolicyEvaluated(Disposition.none, DmarcResult.pass, DmarcResult.pass, new PolicyOverrideReason[0])),
                           new Identifier("envelopeTo", "envelopeFrom", "headerFrom"),
                           new AuthResult(dkimAuthResults ?? new DkimAuthResult[] {}, spfAuthResults ?? new SpfAuthResult[] {}))
            });

            EmailMetadata emailMetadata = new EmailMetadata("org", "filename", 10);

            AttachmentInfo attachmentInfo = new AttachmentInfo(new AttachmentMetadata("filename"), Stream.Null);

            return(new AggregateReportInfo(aggregateReport, emailMetadata, attachmentInfo));
        }
        private static AggregateReportInfo Create(string requestId     = "RequestId", string orginalUri = "OriginalUri",
                                                  string emailFilename = "EmailFilename", long filesize = 1, string attachmentFilename = "AttachmentFilename")
        {
            AggregateReportDomain aggregateReport = new AggregateReportDomain
            {
                ReportMetadata = new ReportMetadata
                {
                    Range = new DateRange()
                },
                PolicyPublished = new PolicyPublished(),
                Records         = new[] { new Record
                                          {
                                              Row = new Row
                                              {
                                                  PolicyEvaluated = new PolicyEvaluated
                                                  {
                                                      Reasons = new []
                                                      {
                                                          new PolicyOverrideReason(),
                                                      }
                                                  }
                                              },
                                              Identifiers = new Identifier(),
                                              AuthResults = new AuthResult
                                              {
                                                  Dkim = new []
                                                  {
                                                      new DkimAuthResult()
                                                  },
                                                  Spf = new []
                                                  {
                                                      new SpfAuthResult()
                                                  }
                                              }
                                          } }
            };
            EmailMetadata      emailMetadata      = new EmailMetadata(requestId, string.Empty, orginalUri, emailFilename, filesize);
            AttachmentMetadata attachmentMetadata = new AttachmentMetadata(attachmentFilename);

            return(new AggregateReportInfo(aggregateReport, emailMetadata, attachmentMetadata));
        }
        public AggregateReportInfo Deserialise(AttachmentInfo attachment, EmailMetadata emailMetadata)
        {
            attachment.AttachmentStream.Seek(0, SeekOrigin.Begin);
            using (StreamReader streamReader = new StreamReader(attachment.AttachmentStream, Encoding.UTF8, true, 1024, true))
            {
                using (XmlReader reader = XmlReader.Create(streamReader))
                {
                    XDocument document = XDocument.Load(reader);

                    XElement feedback = document.Root;
                    if (document.Root != null && document.Root.Name != "feedback")
                    {
                        throw new ArgumentException("Root of aggregate report must be feedback.");
                    }

                    XElement versionElement = feedback.SingleOrDefault("version");
                    double?  version        = double.TryParse(versionElement?.Value, out var candidateVersion)
                        ? candidateVersion
                        : (double?)null;

                    ReportMetadata  reportMetadata  = _reportMetadataDeserialiser.Deserialise(feedback.Single("report_metadata"));
                    PolicyPublished policyPublished = _policyPublishedDeserialiser.Deserialise(feedback.Single("policy_published"));

                    IEnumerable <XElement> recordElements = feedback.Where("record").ToList();

                    if (!recordElements.Any())
                    {
                        throw new ArgumentException("Aggregate report must contain at least 1 record.");
                    }

                    Record[] records = _recordDeserialiser.Deserialise(recordElements);

                    Domain.Dmarc.AggregateReport aggregateReport = new Domain.Dmarc.AggregateReport(version, reportMetadata, policyPublished, records);
                    return(new AggregateReportInfo(aggregateReport, emailMetadata, attachment));
                }
            }
        }
Example #16
0
        private async Task SendAsync(EmailRequest request, EmailMetadata metadata, string body)
        {
            var msg = Map(request, metadata, body);

            await emailer.SendAsync(msg);
        }
 protected ReportInfo(EmailMetadata emailMetadata)
 {
     EmailMetadata = emailMetadata;
 }