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); }
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)); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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.")); }
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); }
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.")); }
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); }