示例#1
0
        internal static DomainValue ResolveSubdomain(string[] domainparts, DomainValue value)
        {
            if (domainparts.Length > 2) // sub-domain
            {
                for (int i = domainparts.Length - 3; i >= 0; i--)
                {
                    if (string.IsNullOrWhiteSpace(domainparts[i]))
                    {
                        value = null;
                        break;
                    }

                    var sub = value.GetMap(domainparts[i]);
                    if (sub == null)
                    {
                        sub = value.GetMap("*");
                    }
                    if (sub == null)
                    {
                        break;
                    }
                    value = sub;
                }
            }
            return(value);
        }
示例#2
0
        public void ReadMaps()
        {
            var domain = new DomainValue(Example_2_5_generic);

            var www      = domain.GetMap("www");
            var wwwAlias = www.Alias;

            Assert.AreEqual("", wwwAlias);

            var ftp   = domain.GetMap("ftp");
            var ftpIp = ftp.Ips.Select(m => m.ToString());

            Assert.AreEqual("10.2.3.4", ftpIp.First());
            Assert.AreEqual("10.4.3.2", ftpIp.Skip(1).First());

            var mail   = domain.GetMap("mail");
            var mailNs = mail.Ns;

            Assert.AreEqual("ns1.host.net", mailNs.First());
            Assert.AreEqual("ns12.host.net", mailNs.Skip(1).First());

            var none = domain.GetMap("none");

            Assert.IsNull(none);
        }
示例#3
0
        public void ReadTLSRecord()
        {
            var domain = new DomainValue(Example_2_5_generic);

            var p443      = domain.GetTlsForPort("tcp", "443");
            var p443first = p443.First;

            Assert.AreEqual(1, (int)p443first[0]);
            Assert.AreEqual("660008F91C07DCF9058CDD5AD2BAF6CC9EAE0F912B8B54744CB7643D7621B787", (string)p443first[1]);
            Assert.AreEqual(1, (int)p443first[2]);

            var p25      = domain.GetTlsForPort("tcp", "25");
            var p25first = p25.First;

            Assert.AreEqual(1, (int)p25first[0]);
            Assert.AreEqual("660008F91C07DCF9058CDD5AD2BAF6CC9EAE0F912B8B54744CB7643D7621B787", (string)p25first[1]);
            Assert.AreEqual(1, (int)p25first[2]);

            var p123 = domain.GetTlsForPort("tcp", "123");

            Assert.IsNull(p123);

            var p321 = domain.GetTlsForPort("bull", "321");

            Assert.IsNull(p321);
        }
示例#4
0
        public void ReadNameServerList()
        {
            var domain      = new DomainValue(Example_nameservers);
            var nameservers = domain.Ns;

            Assert.AreEqual("192.168.1.1", nameservers.First());
            Assert.AreEqual("10.2.3.4", nameservers.Last());
        }
示例#5
0
 private void InitTranslation()
 {
     Language = new DomainValue {
         Id = UserContext.Current.User != null ? UserContext.Current.User.LanguageId : Dom.Language.System
     };
     Translations = _translationRepository.GetTranslations(
         Language.Id
         );
 }
示例#6
0
        public void SimpleArrayNamedImport()
        {
            string json = @"{""import"": [""s/derrick_www"",""www""]}";

            DomainValue value = new DomainValue(json);

            var imports = value.Import;

            Assert.AreEqual("s/derrick_www", imports["www"]);
        }
示例#7
0
        public void ReadMapsOnly1()
        {
            var domain = new DomainValue(Example_mapsonly1);

            domain.ImportDefaultMap();

            IPAddress expected = new IPAddress(new byte[] { 1, 1, 1, 1 });

            Assert.AreEqual(expected, domain.Ips.Single());
        }
示例#8
0
        public void ReadIpLists()
        {
            var domain = new DomainValue(Example_2_5_generic);

            IPAddress ip4expected = IPAddress.Parse("192.168.1.1");
            IPAddress ip6expected = IPAddress.Parse("2001:4860:0:1001::68");

            Assert.AreEqual(ip4expected, domain.Ips.First());
            Assert.AreEqual(ip6expected, domain.Ip6s.First());
        }
示例#9
0
        public void ReadDomain_V2_5()
        {
            var domain = new DomainValue(Example_2_5_generic);

            Assert.AreEqual("192.168.1.1", domain.Ips.Select(m => m.ToString()).First());
            Assert.AreEqual("2001:4860:0:1001::68", domain.Ip6s.Select(m => m.ToString()).First());
            Assert.AreEqual("eqt5g4fuenphqinx.onion", domain.Tor);
            Assert.AreEqual("*****@*****.**", domain.Email);
            Assert.AreEqual("Example & Sons Co.", domain.Info.First());
        }
示例#10
0
        private DomainValue GetNameValueForDomainname(string[] domainparts)
        {
            DomainValue value;
            var         root = domainparts[domainparts.Length - 2];

            var info = Client.LookupDomainValue(root);

            if (info == null)
            {
                value = null;
            }
            else
            {
                value = info.GetValue <DomainValue>();

                if (value.Import != null && value.Import.Count() > 0)
                {
                    var key = domainparts.Length > 2 ? domainparts[domainparts.Length - 3] : "";
                    foreach (var domain in value.Import.Keys)
                    {
                        if (domain == key)
                        {
                            var name  = value.Import[domain];
                            var info2 = Client.LookupNameValue(name);
                            if (info2 != null)
                            {
                                DomainValue import = info2.GetValue <DomainValue>();
                                if (import != null)
                                {
                                    value.ImportValues(import, overwrite: false);
                                    var importMap = import.Maps[domain];
                                    if (importMap != null)
                                    {
                                        var valueMap = value.GetMap(domain);
                                        if (valueMap == null)
                                        {
                                            value.Maps[domain] = importMap;
                                        }
                                        else
                                        {
                                            valueMap.ImportValues(importMap, overwrite: false);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }


                value = ResolveSubdomain(domainparts, value);
            }
            return(value);
        }
示例#11
0
        public void SimpleArrayDefaultImport()
        {
            string json = @"{""import"": [""s/derrick"",""""]}";

            DomainValue value = new DomainValue(json);

            var imports = value.Import;

            Assert.AreEqual(1, imports.Count());
            Assert.AreEqual("s/derrick", imports[""]);
        }
示例#12
0
        public void ArrayImportWithDefault()
        {
            string json = @"{""import"": [[""s/derrick""],[""s/derrick_www"",""www""]]}";

            DomainValue value = new DomainValue(json);

            var imports = value.Import;

            Assert.AreEqual(2, imports.Count());
            Assert.AreEqual("s/derrick", imports[""]);
            Assert.AreEqual("s/derrick_www", imports["www"]);
        }
示例#13
0
        private void UpdateCandidates(List <Variable> currentStateVariables, DomainValue value)
        {
            var sensorsAlreadyTrackingTargetCount = currentStateVariables.Count(v => v.IsAssigned && v.AssignedValue == value.Value);
            var needed = NeededSensorsForEachTargetNo - sensorsAlreadyTrackingTargetCount;

            if (needed > 0)
            {
                return;
            }

            Variables.ForEach(v => v.RemoveFromCandidateList(value));
        }
示例#14
0
        public void ReadServiceRecord()
        {
            var domain = new DomainValue(Example_2_5_generic);

            ServiceRecord servicerecord = domain.Service.First();

            Assert.AreEqual("smtp", servicerecord.SrvName);
            Assert.AreEqual("tcp", servicerecord.Protocol);
            Assert.AreEqual(10, servicerecord.Priority);
            Assert.AreEqual(0, servicerecord.Weight);
            Assert.AreEqual(25, servicerecord.Port);
            Assert.AreEqual("mail", servicerecord.Target);
        }
示例#15
0
 public bool UpdateDomainValue(DomainValue pDomainValue)
 {
     try
     {
         _DbContext.DomainValue.Attach(pDomainValue);
         _DbContext.Entry(pDomainValue).State = System.Data.Entity.EntityState.Modified;
         _DbContext.SaveChanges();
         return(true);
     }
     catch (Exception ex)
     {
         return(false);
     }
 }
示例#16
0
        public void ReadMapsOnly2()
        {
            var domain = new DomainValue(Example_mapsonly2);

            domain.ImportDefaultMap();

            IPAddress expectedIp1 = new IPAddress(new byte[] { 10, 2, 3, 4 });
            IPAddress expectedIp2 = new IPAddress(new byte[] { 10, 4, 3, 2 });

            int expectedNsCount = 2;

            Assert.AreEqual(expectedIp1, domain.Ips.First());
            Assert.AreEqual(expectedIp2, domain.Ips.Last());

            Assert.AreEqual(expectedNsCount, domain.Ns.Count());
        }
示例#17
0
        private DomainValue GetDomainValue(string name)
        {
            DomainValue value = null;

            string[] domainparts = name.Split('.');

            if (domainparts.Length < 2 || domainparts[domainparts.Length - 1] != "bit")
            {
                value = null;
            }
            else
            {
                value = GetNameValueForDomainname(domainparts);
            }

            return(value);
        }
示例#18
0
        public bool DeleteDomainValue(int pDomainValueID)
        {
            try
            {
                DomainValue oDomainValue = new DomainValue {
                    ID = pDomainValueID
                };
                _DbContext.DomainValue.Attach(oDomainValue);

                _DbContext.DomainValue.Remove(oDomainValue);
                _DbContext.SaveChanges();

                return(true);
            }
            catch
            {
                return(false);
            }
        }
示例#19
0
        public int AddValueToDomain(string pDomainValue, int?pDomainId)
        {
            int oID = -1;

            try
            {
                Domain oDomain = _DbContext.Domain.Where(a => a.ID == pDomainId).First();
                if (oDomain != null)
                {
                    DomainValue oDomainValue = _DbContext.DomainValue.Create();
                    oDomainValue.Domain_ID = pDomainId;
                    oDomainValue.Value     = pDomainValue;
                    _DbContext.DomainValue.Add(oDomainValue);
                    oID = oDomainValue.ID;
                }
                _DbContext.SaveChanges();
            }
            catch
            {
                oID = -1;
            }
            return(oID);
        }
示例#20
0
 public JsonResult DeleteDomainValue([DataSourceRequest] DataSourceRequest request, DomainValue pDomainValue)
 {
     if (pDomainValue != null)
     {
         if (!_DomainBL.DeleteDomainValue(pDomainValue.ID))
         {
             ModelState.AddModelError("Value", "خطایی در حذف مقدار دامنه رخ داده است.مجددا تلاش کنید");
         }
     }
     return(Json(new[] { pDomainValue }.ToDataSourceResult(request, ModelState)));
 }
示例#21
0
        public JsonResult UpdateDomainValue([DataSourceRequest] DataSourceRequest request, DomainValue pDomainValue)
        {
            if (pDomainValue != null && ModelState.IsValid)
            {
                var domains = _DomainBL.GetDomainValues(pDomainValue.Domain_ID ?? -1);
                if (!domains.Any(a => a.Value == pDomainValue.Value && a.ID != pDomainValue.ID))
                {
                    var domain = domains.First(a => a.ID == pDomainValue.ID);
                    domain.Value = pDomainValue.Value;
                    if (!_DomainBL.UpdateDomainValue(domain))
                    {
                        ModelState.AddModelError("Value", "خطایی در ذخیره مقدار دامنه رخ داده است.مجددا تلاش کنید");
                    }
                }
                else
                {
                    ModelState.AddModelError("Value", "مقدار دامنه تکراری وارد شده است");
                }
            }

            return(Json(new[] { pDomainValue }.ToDataSourceResult(request, ModelState)));
        }
示例#22
0
        public JsonResult CreateDomainValue([DataSourceRequest] DataSourceRequest request, DomainValue pDomainValue)
        {
            if (pDomainValue != null && ModelState.IsValid)
            {
                List <DomainValue> oList = _DomainBL.GetDomainValues(pDomainValue.Domain_ID ?? -1).Where(a => a.Value == pDomainValue.Value).ToList();
                if (oList.Count == 0)
                {
                    int id = _DomainBL.AddValueToDomain(pDomainValue.Value, pDomainValue.Domain_ID);
                    if (id == -1)
                    {
                        ModelState.AddModelError("FIELD_Name", "خطایی در ذخیره مقدار دامنه رخ داده است.مجددا تلاش کنید");
                    }
                }
                else
                {
                    ModelState.AddModelError("FIELD_Name", "مقدار وارد شده تکراری می باشد");
                }
            }

            return(Json(new[] { pDomainValue }.ToDataSourceResult(request, ModelState)));
        }
示例#23
0
        public void ReadJson()
        {
            var domain = DomainValue.JsonDeserialize(Example_2_5_generic);

            Assert.IsNotNull(domain);
        }
示例#24
0
        private DnsMessage GetDotBitAnswerForName(DnsQuestion question)
        {
            string fqdn = question.Name;

            try
            {
                recursionLevel++;

                if (recursionLevel > maxRecursion)
                {
                    ConsoleUtils.WriteWarning("Max recursion reached");
                    return(null);
                }

                DomainValue value = GetDomainValue(fqdn);
                if (value == null)
                {
                    return(null);
                }

                if (!string.IsNullOrWhiteSpace(value.@Delegate))
                {
                    ConsoleUtils.WriteWarning("delegate setting not implemented: {0}", value.@Delegate);
                }

                value.ImportDefaultMap();

                if (!string.IsNullOrWhiteSpace(value.Translate))
                {
                    string newLookup;
                    if (value.Translate.EndsWith("."))
                    {
                        newLookup = value.Translate.Substring(0, value.Translate.Length - 1);
                    }
                    else
                    {
                        newLookup = value.Translate + '.' + fqdn;
                    }
                    DnsQuestion newQuestion = new DnsQuestion(newLookup, question.RecordType, question.RecordClass);
                    return(InternalGetAnswer(newQuestion));
                }

                DnsMessage answer = null;

                if (value.Alias != null)
                {
                    string newLookup;
                    if (value.Alias == "")
                    {
                        var sa = fqdn.Split('.');
                        newLookup = string.Format("{0}.{1}", sa[sa.Length - 2], sa[sa.Length - 1]);
                    }
                    else if (value.Alias.EndsWith(".")) // absolute
                    {
                        newLookup = value.Alias.Substring(0, value.Alias.Length - 1);
                    }
                    else // sub domain
                    {
                        var sa = fqdn.Split('.');
                        sa[0]     = value.Alias;
                        newLookup = string.Join(".", sa);
                    }
                    DnsQuestion newQuestion = new DnsQuestion(newLookup, question.RecordType, question.RecordClass);

                    DnsMessage toReturn = new DnsMessage();
                    toReturn.AnswerRecords.Add(new CNameRecord(fqdn, defaultTTL, newLookup));

                    var additional = InternalGetAnswer(newQuestion);
                    toReturn.AdditionalRecords = additional.AnswerRecords;

                    return(toReturn);
                }

                answer = new DnsMessage()
                {
                    Questions = new List <DnsQuestion>()
                    {
                        question
                    }
                };

                bool any = question.RecordType == RecordType.Any;

                var nsnames = value.Ns;
                if (nsnames != null && nsnames.Count() > 0) // NS overrides all
                {
                    List <IPAddress> nameservers = GetNameserverAddresses(nsnames);
                    if (nameservers.Count() > 0)
                    {
                        if (!string.IsNullOrWhiteSpace(value.Translate))
                        {
                            fqdn = value.Translate;
                        }
                        answer = NameServer.DnsResolve(nameservers, fqdn, question.RecordType, question.RecordClass);
                    }
                }
                else
                {
                    if (any || question.RecordType == RecordType.A)
                    {
                        var addresses = value.Ips;
                        if (addresses.Count() > 0)
                        {
                            foreach (var address in addresses)
                            {
                                answer.AnswerRecords.Add(new ARecord(fqdn, defaultTTL, address));
                            }
                        }
                    }
                    if (any || question.RecordType == RecordType.Aaaa)
                    {
                        var addresses = value.Ip6s;
                        if (addresses.Count() > 0)
                        {
                            foreach (var address in addresses)
                            {
                                answer.AnswerRecords.Add(new AaaaRecord(fqdn, defaultTTL, address));
                            }
                        }
                    }
                }

                return(answer);
            }
            finally
            {
                recursionLevel--;
            }
        }
示例#25
0
 /// <summary>
 /// Does the domain value intersect with this range.
 /// </summary>
 /// <param name="theDomainValue">Domain value.</param>
 /// <returns>True if intersects. False if it does not intersect.</returns>
 public abstract bool IntersectsWith(DomainValue theDomainValue);