示例#1
0
 public ResContactCheck ContactCheck(ReqContactCheck req)
 {
     return(Call <ResContactCheck, ReqContactCheck>(req, "ContactCheck"));
 }
示例#2
0
        private JobStates domainRegister(Job job)
        {
            var orderItem = Provider.Database.Read <OrderItem>("Id={0}", job.RelatedEntityId);

            if (orderItem == null)
            {
                throw new Exception("OrderItem not found (in worker method domainRegister)");
            }

            var domainName = orderItem.DisplayName;

            var member = orderItem.Order().Member();

            var memberDomain =
                Provider.Database.Read <MemberDomain>("DomainName={0}", domainName)
                ??
                member.CreateNewMemberDomain(orderItem.DisplayName, orderItem.Id);

            var memberProduct = Provider.Database.Read <MemberProduct>("Id={0}", memberDomain.Id);

            if (memberProduct.CurrentPhase != LifeCyclePhases.None)
            {
                throw new Exception("Domain name (" + domainName + " #" + memberDomain.Id + ") already created (in worker method domainRegister)");
            }

            var product = memberProduct.OrderItem().Product();

            // Aşağıdaki işlemler RFC 5731 dikkate alınarak yazılmıştır. (https://tools.ietf.org/html/rfc5731#page-18)
            var eppApi = new EppAPI();

            var req = new ReqDomainCreate();

            // 1. ContactCheck
            if (product.GetProperty("WhoisServerHolder") == "Registry")
            {
                var reqContactCheck = new ReqContactCheck()
                {
                    DomainName = domainName
                };

                // 1.1. contact id'lerin hepsini bir seferde check edelim
                reqContactCheck.ContactIDs = new List <string>();
                if (!memberDomain.OwnerDomainContactId.IsEmpty())
                {
                    reqContactCheck.ContactIDs.Add(memberDomain.OwnerDomainContactId);
                }
                if (!memberDomain.AdminDomainContactId.IsEmpty())
                {
                    reqContactCheck.ContactIDs.Add(memberDomain.AdminDomainContactId);
                }
                if (!memberDomain.BillingDomainContactId.IsEmpty())
                {
                    reqContactCheck.ContactIDs.Add(memberDomain.BillingDomainContactId);
                }
                if (!memberDomain.TechDomainContactId.IsEmpty())
                {
                    reqContactCheck.ContactIDs.Add(memberDomain.TechDomainContactId);
                }
                reqContactCheck.ContactIDs = reqContactCheck.ContactIDs.Distinct().ToList();

                if (reqContactCheck.ContactIDs.Count > 0)
                {
                    var resContactCheck = eppApi.ContactCheck(reqContactCheck);

                    // 1.2. eğer registry tarafında contact create edilmemişse create edelim
                    if (!memberDomain.OwnerDomainContactId.IsEmpty())
                    {
                        if (resContactCheck.IsAvailable(memberDomain.OwnerDomainContactId))
                        {
                            createContact(memberDomain.OwnerDomainContactId, eppApi, domainName);
                            resContactCheck.ContactInfos.First(ci => ci.ContactId == memberDomain.OwnerDomainContactId).Available = false;
                        }
                        req.Registrant = memberDomain.OwnerDomainContactId;
                    }
                    if (!memberDomain.AdminDomainContactId.IsEmpty())
                    {
                        if (resContactCheck.IsAvailable(memberDomain.AdminDomainContactId))
                        {
                            createContact(memberDomain.AdminDomainContactId, eppApi, domainName);
                            resContactCheck.ContactInfos.First(ci => ci.ContactId == memberDomain.AdminDomainContactId).Available = false;
                        }
                        if (req.Contacts == null)
                        {
                            req.Contacts = new List <DomainContactInfo>();
                        }
                        req.Contacts.Add(new DomainContactInfo(memberDomain.AdminDomainContactId, DomainContactInfo.ContactType.Admin));
                    }
                    if (!memberDomain.BillingDomainContactId.IsEmpty())
                    {
                        if (resContactCheck.IsAvailable(memberDomain.BillingDomainContactId))
                        {
                            createContact(memberDomain.BillingDomainContactId, eppApi, domainName);
                            resContactCheck.ContactInfos.First(ci => ci.ContactId == memberDomain.BillingDomainContactId).Available = false;
                        }
                        if (req.Contacts == null)
                        {
                            req.Contacts = new List <DomainContactInfo>();
                        }
                        req.Contacts.Add(new DomainContactInfo(memberDomain.BillingDomainContactId, DomainContactInfo.ContactType.Billing));
                    }
                    if (!memberDomain.TechDomainContactId.IsEmpty())
                    {
                        if (resContactCheck.IsAvailable(memberDomain.TechDomainContactId))
                        {
                            createContact(memberDomain.TechDomainContactId, eppApi, domainName);
                            resContactCheck.ContactInfos.First(ci => ci.ContactId == memberDomain.TechDomainContactId).Available = false;
                        }
                        if (req.Contacts == null)
                        {
                            req.Contacts = new List <DomainContactInfo>();
                        }
                        req.Contacts.Add(new DomainContactInfo(memberDomain.TechDomainContactId, DomainContactInfo.ContactType.Tech));
                    }
                }
            }

            req.Registrant = memberDomain.OwnerDomainContactId;

            // 2. Nameserver'ları set edelim
            if (!memberDomain.NameServers.IsEmpty())
            {
                foreach (string host in memberDomain.NameServers.SplitWithTrim(";"))
                {
                    if (host.Contains(','))
                    {
                        var parts = host.SplitWithTrim(","); //TODO: IPv6'yı da desteklemek gerekecek gibi
                        req.NameServers.Add(new NameServerInfo {
                            HostName = parts[0], Addresses = new List <IpAddress> {
                                new IpAddress {
                                    Address = parts[1], Type = IpAddress.IpAddressType.V4
                                }
                            }
                        });
                    }
                    else
                    {
                        req.NameServers.Add(new NameServerInfo {
                            HostName = host
                        });
                    }
                }
            }

            // 3. The domain name itself
            req.DomainName = memberDomain.DomainName;

            // 4. Period
            req.RegistrationPeriod = new DomainPeriod
            {
                Units  = orderItem.ProductPrice().Unit == "years" ? DomainPeriod.PeriodUnits.Year : DomainPeriod.PeriodUnits.Month,
                Period = orderItem.Amount
            };

            // 5. AuthInfo
            req.AuthInfo = new Epp.Protocol.Shared.AuthInfo(memberDomain.AuthInfo);

            var res = eppApi.DomainCreate(req);

            memberProduct.StartDate    = res.CreateDate;
            memberProduct.EndDate      = res.ExpireDate.Value;
            memberProduct.CurrentPhase = LifeCyclePhases.Active;

            memberProduct.Save();

            var resInfo = eppApi.DomainInfo(new ReqDomainInfo {
                AuthInfo = req.AuthInfo, DomainName = req.DomainName
            });

            memberDomain.RegistryStates = resInfo.Statuses.Select(s => s.Status).ToList();
            memberDomain.Save();

            return(JobStates.Done);
        }