public void Test(string value, bool isErrorExpected)

        {
            Uri uri;

            Uri.TryCreate(value, UriKind.Absolute, out uri);

            DmarcRecord dmarcRecord = new DmarcRecord("",
                                                      new List <Tag>
            {
                new ReportUriAggregate("",
                                       new List <UriTag>
                {
                    new UriTag(value ?? "", new DmarcUri(uri),
                               new MaxReportSize(1000, Unit.K))
                })
            },
                                                      string.Empty);

            Error error;
            bool  isErrored = _rule.IsErrored(dmarcRecord, out error);

            Assert.That(isErrored, Is.EqualTo(isErrorExpected));

            Assert.That(error, isErrorExpected ? Is.Not.Null : Is.Null);
        }
Esempio n. 2
0
        public bool TryParse(string record, string domain, out DmarcRecord dmarcRecord)
        {
            if (string.IsNullOrEmpty(record))
            {
                dmarcRecord = null;
                return(false);
            }

            string[] stringTags = record.Split(new[] { Separator }, StringSplitOptions.RemoveEmptyEntries).Select(_ => _.Trim()).ToArray();

            List <Tag> tags = _tagParser.Parse(stringTags.ToList());

            tags = tags.Concat(_implicitProvider.GetImplicitValues(tags)).ToList();

            foreach (Tag tag in tags)
            {
                string explanation;
                if (_explainer.TryExplain(tag, out explanation))
                {
                    tag.Explanation = explanation;
                }
            }

            dmarcRecord = new DmarcRecord(record, tags, domain);
            dmarcRecord.AddErrors(_ruleEvaluator.Evaluate(dmarcRecord));
            return(true);
        }
        public void Test(DmarcRecord dmarcRecord, bool isErrorExpected, ErrorType?expectedError = null)
        {
            Error error;
            bool  isErrored = _rule.IsErrored(dmarcRecord, out error);

            Assert.That(isErrored, Is.EqualTo(isErrorExpected));

            Assert.That(error?.ErrorType, Is.EqualTo(expectedError));
        }
Esempio n. 4
0
        public void NoErrorWhenFailureReportingOptionIsOne(string record, bool isErroredExpected)
        {
            DmarcRecord dmarcRecord = new DmarcRecord(record, new List <Tag>(), string.Empty, string.Empty, false, false);

            Error error;
            bool  isErrored = _rule.IsErrored(dmarcRecord, out error);

            Assert.That(isErrored, Is.EqualTo(isErroredExpected));

            Assert.That(error, isErroredExpected ? Is.Not.Null : Is.Null);
        }
Esempio n. 5
0
        public void NoVersionTagError()
        {
            DmarcRecord dmarcRecord = new DmarcRecord("", new List <Tag>(), string.Empty, string.Empty, false, false);

            Error error;
            bool  isErrored = _rule.IsErrored(dmarcRecord, out error);

            Assert.That(isErrored, Is.True);

            Assert.That(error, Is.Not.Null);
        }
Esempio n. 6
0
        public void NoErrorWhenPolicyTermNotFound()
        {
            DmarcRecord dmarcRecord = new DmarcRecord("", new List <Tag>(), "abc.com");

            Error error;
            bool  isErrored = _rule.IsErrored(dmarcRecord, out error);

            Assert.That(isErrored, Is.False);

            Assert.That(error, Is.Null);
        }
Esempio n. 7
0
        public void NoErrorWhenPercentTermNotFound()
        {
            DmarcRecord dmarcRecord = new DmarcRecord("", new List <Tag>(), string.Empty);

            Error error;
            bool  isErrored = _rule.IsErrored(dmarcRecord, out error);

            Assert.That(isErrored, Is.False);

            Assert.That(error, Is.Null);
        }
Esempio n. 8
0
        public void VersionIsFirstTagNoError()
        {
            DmarcRecord dmarcRecord = new DmarcRecord("", new List <Tag> {
                new Version("v=DMARC1")
            }, string.Empty, string.Empty, false, false);

            Error error;
            bool  isErrored = _rule.IsErrored(dmarcRecord, out error);

            Assert.That(isErrored, Is.False);

            Assert.That(error, Is.Null);
        }
        public void NoErrorWhenNosubDomainPolicyAndNonOrganisationalDomain()
        {
            string domain = "abc.com";

            DmarcRecord dmarcRecord = new DmarcRecord("", new List <Tag>(), domain, domain, false, false);

            Error error;
            bool  isErrored = _rule.IsErrored(dmarcRecord, out error);

            Assert.That(isErrored, Is.EqualTo(false));

            Assert.That(error, Is.Null);
        }
        public void NoErrorWhenPolicyTermNotFound(PolicyType policyType, bool isErrorExpected, string domain)
        {
            DmarcRecord dmarcRecord = new DmarcRecord("", new List <Tag> {
                new SubDomainPolicy("", policyType)
            }, domain, "abc.com", false, false);

            Error error;
            bool  isErrored = _rule.IsErrored(dmarcRecord, out error);

            Assert.That(isErrored, Is.EqualTo(isErrorExpected));

            Assert.That(error, isErrorExpected ? Is.Not.Null : Is.Null);
        }
Esempio n. 11
0
        public void Test(PolicyType policyType, bool isErrorExpected)
        {
            DmarcRecord dmarcRecord = new DmarcRecord("", new List <Tag> {
                new Policy("", policyType)
            }, string.Empty, string.Empty, false, false);

            Error error;
            bool  isErrored = _rule.IsErrored(dmarcRecord, out error);

            Assert.That(isErrored, Is.EqualTo(isErrorExpected));

            Assert.That(error, isErrorExpected ? Is.Not.Null : Is.Null);
        }
Esempio n. 12
0
        public void Test(int?percent, bool isErrorExpected)
        {
            DmarcRecord dmarcRecord = new DmarcRecord("", new List <Tag> {
                new Percent("", percent)
            }, string.Empty);

            Error error;
            bool  isErrored = _rule.IsErrored(dmarcRecord, out error);

            Assert.That(isErrored, Is.EqualTo(isErrorExpected));

            Assert.That(error, isErrorExpected ? Is.Not.Null : Is.Null);
        }
Esempio n. 13
0
        public bool IsErrored(DmarcRecord record, out Error error)
        {
            T t = record.Tags.OfType <T>().FirstOrDefault();

            if (t == null || t.Uris.Any())
            {
                error = null;
                return(false);
            }

            error = new Error(ErrorType.Warning, _zeroUrisErrorMessage);

            return(true);
        }
        public bool IsErrored(DmarcRecord record, out Error error)
        {
            T t = record.Tags.OfType <T>().FirstOrDefault();

            if (t == null || t.Uris.Count < 3)
            {
                error = null;
                return(false);
            }

            error = new Error(ErrorType.Warning, string.Format(_moreThan2UrisErrorFormatString, t.Uris.Count));

            return(true);
        }
Esempio n. 15
0
        public bool IsErrored(DmarcRecord record, out Error error)
        {
            T t = record.Tags.OfType <T>().FirstOrDefault();

            //ignore null uri schemes as these will already have parsing error.
            if (t == null || t.Uris.All(_ => string.IsNullOrWhiteSpace(_.Value)) || t.Uris.Select(_ => _.Value.ToLower()).All(_ => _.StartsWith(Prefix)))
            {
                error = null;
                return(false);
            }

            error = new Error(ErrorType.Warning, _errorFormatString);
            return(true);
        }
        public void Test(bool policyTagExists, bool isErrorExpected)
        {
            Policy      policy      = policyTagExists ? new Policy("", PolicyType.None) : null;
            DmarcRecord dmarcRecord = new DmarcRecord("", new List <Tag> {
                policy
            }, string.Empty, string.Empty, false, false);

            Error error;
            bool  isErrored = _rule.IsErrored(dmarcRecord, out error);

            Assert.That(isErrored, Is.EqualTo(isErrorExpected));

            Assert.That(error, isErrorExpected ? Is.Not.Null : Is.Null);
        }
Esempio n. 17
0
        public void VersionTagIsNotFirstError()
        {
            DmarcRecord dmarcRecord = new DmarcRecord("", new List <Tag>
            {
                new SubDomainPolicy("", PolicyType.None),
                new Version("v=DMARC1")
            }, string.Empty, string.Empty, false, false);

            Error error;
            bool  isErrored = _rule.IsErrored(dmarcRecord, out error);

            Assert.That(isErrored, Is.True);

            Assert.That(error, Is.Not.Null);
        }
        public void NoErrorWhenNosubDomainPolicyAndNonOrganisationalDomain()
        {
            string domain = "abc.com";

            DmarcRecord dmarcRecord = new DmarcRecord("", new List <Tag>(), domain);

            A.CallTo(() => _organisationalDomainProvider.GetOrganisationalDomain((domain)))
            .Returns(new OrganisationalDomain(domain, domain));

            Error error;
            bool  isErrored = _rule.IsErrored(dmarcRecord, out error);

            Assert.That(isErrored, Is.EqualTo(false));

            Assert.That(error, Is.Null);
        }
Esempio n. 19
0
        public void NoErrorWhenPolicyTermNotFound(PolicyType policyType, bool isErrorExpected, string domain)
        {
            DmarcRecord dmarcRecord = new DmarcRecord("", new List <Tag> {
                new SubDomainPolicy("", policyType)
            }, domain);

            A.CallTo(() => _organisationalDomainProvider.GetOrganisationalDomain((domain)))
            .Returns(new OrganisationalDomain(domain, "abc.com"));

            Error error;
            bool  isErrored = _rule.IsErrored(dmarcRecord, out error);

            Assert.That(isErrored, Is.EqualTo(isErrorExpected));

            Assert.That(error, isErrorExpected ? Is.Not.Null : Is.Null);
        }
        public void NoErrorWhenOnNonOrganisationalDomainIsImpicit()
        {
            string domain = "abc.com";

            DmarcRecord dmarcRecord = new DmarcRecord("",
                                                      new List <Tag> {
                new SubDomainPolicy("", PolicyType.Unknown, true)
            }, domain, "def.com", false, false);

            Error error;
            bool  isErrored = _rule.IsErrored(dmarcRecord, out error);

            Assert.That(isErrored, Is.EqualTo(false));

            Assert.That(error, Is.Null);
        }
        public void ErrorWhenOnNonOrganisationalDomain()
        {
            string domain = "abc.com";

            DmarcRecord dmarcRecord = new DmarcRecord("", new List <Tag> {
                new SubDomainPolicy("", PolicyType.Unknown)
            }, domain, "def.com", false, false);

            Error error;
            bool  isErrored = _rule.IsErrored(dmarcRecord, out error);

            Assert.That(isErrored, Is.EqualTo(true));

            Assert.That(error, Is.Not.Null);
            Assert.That(error.Message, Is.EqualTo($"The specified sub-domain policy (sp) is ineffective because {domain} is not an organisational domain."));
        }
Esempio n. 22
0
        public void Test(int tagCount, bool isErrorExpected)
        {
            List <UriTag> uriTags = Enumerable.Range(0, tagCount)
                                    .Select(_ => new UriTag("", new DmarcUri(new Uri("mailto:[email protected]")), new MaxReportSize(1000, Unit.K))).ToList();

            ReportUriAggregate reportUriAggregate = new ReportUriAggregate("", uriTags);

            DmarcRecord dmarcRecord = new DmarcRecord("", new List <Tag> {
                reportUriAggregate
            }, string.Empty);

            Error error;
            bool  isErrored = _rule.IsErrored(dmarcRecord, out error);

            Assert.That(isErrored, Is.EqualTo(isErrorExpected));

            Assert.That(error, isErrorExpected ? Is.Not.Null : Is.Null);
        }
Esempio n. 23
0
        public bool IsErrored(DmarcRecord record, out Error error)
        {
            var reportUris = record.Tags.OfType <T>().ToList();

            // If we have duplicate entries for the same tag
            // There is already an error so disable this rule
            if (reportUris.Count > 1)
            {
                error = null;
                return(false);
            }

            var mailCheckUris = GetMailCheckUris(reportUris.FirstOrDefault());

            if (HasMisconfiguredUri(mailCheckUris))
            {
                error = new Error(ErrorType.Error, string.Format(
                                      _shouldNotHaveMisconfiguredMailCheckMailboxFormatString,
                                      _dmarcMailboxAddress,
                                      _dmarcMailbox.OriginalString));

                return(true);
            }

            if (!mailCheckUris.Any())
            {
                error = new Error(ErrorType.Warning, string.Format(
                                      _shouldContainDmarcServiceMailBoxErrorMessageFormatString,
                                      _dmarcMailboxAddress,
                                      _dmarcMailbox.OriginalString));

                return(true);
            }

            if (HasDuplicates(reportUris.FirstOrDefault()))
            {
                error = new Error(ErrorType.Warning, _shouldNotContainDuplicateUris);
                return(true);
            }

            error = null;
            return(false);
        }
        public void ErrorWhenOnNonOrganisationalDomain()
        {
            string domain = "abc.com";

            DmarcRecord dmarcRecord = new DmarcRecord("", new List <Tag> {
                new SubDomainPolicy("", PolicyType.Unknown)
            }, domain);

            A.CallTo(() => _organisationalDomainProvider.GetOrganisationalDomain((domain)))
            .Returns(new OrganisationalDomain(domain, "def.com"));

            Error error;
            bool  isErrored = _rule.IsErrored(dmarcRecord, out error);

            Assert.That(isErrored, Is.EqualTo(true));

            Assert.That(error, Is.Not.Null);
            Assert.That(error.Message, Is.EqualTo($"The specified sub-domain policy (sp) is ineffective because {domain} is not an organisational domain. Only sub-domain policies on organisational domains are valid."));
        }
Esempio n. 25
0
        private List <DmarcRecord> GetAllRecordEntities()
        {
            List <DmarcRecord> records = new List <DmarcRecord>();

            using (DbDataReader reader = MySqlHelper.ExecuteReader(ConnectionString, "SELECT * FROM dns_record_dmarc"))
            {
                while (reader.Read())
                {
                    DmarcRecord recordEntity = new DmarcRecord(
                        reader.GetInt32("id"),
                        reader.GetInt32("domain_id"),
                        reader.GetString("record"),
                        reader.GetDateTime("start_date"),
                        reader.GetDateTimeNullable("end_date"),
                        reader.GetDateTime("last_checked"),
                        reader.GetInt16("failure_count"),
                        reader.GetInt16("result_code"));

                    records.Add(recordEntity);
                }
            }
            return(records);
        }