public async Task <SpfRecord> Parse(string domain, List <string> spfRecordParts)
        {
            string record = string.Join(string.Empty, spfRecordParts);

            if (string.IsNullOrEmpty(record))
            {
                return(null);
            }

            string[] stringTokens = record.Split(Separator, StringSplitOptions.RemoveEmptyEntries);

            string versionToken = stringTokens.ElementAtOrDefault(0);

            Domain.Version version = _versionParser.Parse(versionToken);

            List <Term> terms = stringTokens.Skip(1).Select(_termParser.Parse).ToList();

            terms = terms.Concat(_implicitTermProvider.GetImplicitValues(terms)).ToList();

            SpfRecord spfRecord = new SpfRecord(spfRecordParts, version, terms);
            EvaluationResult <DomainSpfRecord> result = await _spfRecordRulesEvaluator.Evaluate(new DomainSpfRecord(domain, spfRecord));

            spfRecord.AddErrors(result.Errors);

            return(spfRecord);
        }
示例#2
0
 private void UpdateValuesInLanguageVersion(ItemFile itemFile, Item item)
 {
     foreach (Field field in item.Fields)
     {
         if (field.Shared)
         {
             SortedSet <FieldValue> fields = itemFile.SharedFieldValues;
             UpdateField(item, fields, field);
         }
         else
         {
             Domain.Language language = itemFile.Languages.FirstOrDefault(l => l.LanguageName == field.Language.Name);
             if (language == null)
             {
                 language = new Domain.Language()
                 {
                     LanguageName = field.Language.Name
                 };
                 itemFile.Languages.Add(language);
             }
             Domain.Version version = language.Versions.FirstOrDefault(v => v.VersionNumber == item.Version.Number);
             if (version == null)
             {
                 version = new Domain.Version()
                 {
                     VersionNumber = item.Version.Number
                 };
                 language.Versions.Add(version);
             }
             UpdateField(item, version.FieldValues, field);
         }
     }
 }
        public Domain.Version Parse(string versionString)
        {
            Domain.Version version = new Domain.Version(versionString);
            if (versionString == null || !_regex.IsMatch(versionString))
            {
                string errorMessage = string.Format(SpfParserResource.InvalidValueErrorMessage, "SPF version", version);
                string markdown     = string.Format(SpfParserMarkdownResource.InvalidValueErrorMessage, "SPF version", version);

                version.AddError(new Error(Id, ErrorType.Error, errorMessage, markdown));
            }
            return(version);
        }
        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);
        }
示例#5
0
 public AuthConfiguration()
 {
     ApplicationName = Assembly.GetExecutingAssembly().GetApplicationName();
     Version         = Domain.Version.For(Assembly.GetExecutingAssembly().GetVersion());
 }