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 Explain(SpfRecord record) { if (_versionExplainer.TryExplain(record.Version, out string versionExplanation)) { record.Version.Explanation = versionExplanation; } foreach (Term term in record.Terms) { if (_termExplainer.TryExplain(term, out string termExplanation)) { term.Explanation = termExplanation; } } }
public SpfRecord Parse(string record, string domain) { if (string.IsNullOrEmpty(record)) { return(null); } string[] stringTokens = record.Split(new[] { Separator }, StringSplitOptions.RemoveEmptyEntries); string versionToken = stringTokens.ElementAtOrDefault(0); Domain.Version version = _versionParser.Parse(versionToken); string explanation; if (_versionExplainer.TryExplain(version, out explanation)) { version.Explanation = explanation; } List <Term> terms = stringTokens.Skip(1).Select(_termParser.Parse).ToList(); terms = terms.Concat(_implicitTermProvider.GetImplicitValues(terms)).ToList(); foreach (Term term in terms) { if (_termExplainer.TryExplain(term, out explanation)) { term.Explanation = explanation; } } SpfRecord spfRecord = new SpfRecord(record, version, terms, domain); spfRecord.AddErrors(_spfRecordRulesEvaluator.Evaluate(spfRecord)); return(spfRecord); }