public async Task <DomainEntity> RetrieveDomainDetailsAsync(string Id) { var domainId = Id; if (_domainValidation.IsValidEmail(Id)) { domainId = _domainValidation.DomainFromEmail(Id); } return(await _dbContext.DomainEntity.AsNoTracking().FirstOrDefaultAsync(x => x.Id == domainId)); }
public async Task <DomainEntity> Verify(string domain) { var domainToVerify = string.Empty; var domainEntity = new DomainEntity(); if (_domainValidation.IsValidEmail(domain)) { domainToVerify = _domainValidation.DomainFromEmail(domain); } if (_domainValidation.IsValidDomainName(domain)) { domainToVerify = domain; } //Fill domain entity with domain details if domain was verified as domain if (!string.IsNullOrEmpty(domainToVerify)) { var client = new LookupClient { UseCache = true }; var result = await client.QueryAsync(domainToVerify, QueryType.TXT); var resultAnswer = result.Answers[0].ToString(); var spfRecord = resultAnswer.Substring(resultAnswer.IndexOf("\"")) .Replace("\"", "") .Replace("\\", "") .Split(";"); domainEntity.Id = domainToVerify; var mxDomains = new StringBuilder(); //Add spf record details to domain entity, if a domain does not have this specified spf, then all these are null and domain is invalid foreach (var item in spfRecord) { switch (item) { case string a when a.Contains("v="): domainEntity.SpfVersion = item.Replace("v=", ""); break; case string a when a.Contains("version"): domainEntity.Version = item.Replace("version:", ""); break; case string a when a.Contains("expire"): domainEntity.ExpiryData = item.Replace("expire:", ""); break; case string a when a.Contains("provider"): domainEntity.Provider = item.Replace("provider:", ""); break; case string a when a.Contains("ntamx"): mxDomains.AppendLine(item.Replace("ntamx:", "")); break; default: break; } } domainEntity.NtaMxList = mxDomains.ToString(); var isValid = IsValidSpf(domainEntity); domainEntity.IsValid = isValid ? "Valid" : "InValid"; } return(domainEntity); }