public function ChangeDomainOwner(Domain $domain, $period = null, $extra = array()) { $params = array("name" => $this->MakeNameIDNCompatible($domain->GetHostName()), "c_registrant" => $domain->GetContact(CONTACT_TYPE::REGISTRANT)->CLID, "c_onsite" => $domain->GetContact(CONTACT_TYPE::TECH)->CLID, "c_billing" => $this->Config->GetFieldByName('BillingContactCLID')->Value, "ns" => '<' . $this->ExtPrefix . ':ns>' . $this->GetNSXML($domain->GetNameserverList()) . '</' . $this->ExtPrefix . ':ns>'); $response = $this->Request("domain-trade-request", $params); $status = $response->Succeed ? REGISTRY_RESPONSE_STATUS::PENDING : REGISTRY_RESPONSE_STATUS::FAILED; return new ChangeDomainOwnerResponse($status, $response->ErrMsg, $response->Code); }
public function Run($userid) { try { $Factory = RegistryModuleFactory::GetInstance(); $Registry = $Factory->GetRegistryByExtension($this->Domain->Extension); $host_as_attr = (bool) $Registry->GetManifest()->GetRegistryOptions()->ability->hostattr; } catch (Exception $e) { throw new UpdateDomainNameserversAction_Exception(sprintf(_("Cannot change nameservers. Reason: %s"), $e->getMessage())); } // Check that all nameserver hosts are registered foreach ($this->nslist as &$NS) { $glue_record = preg_match("/^(.*)\\.{$this->Domain->GetHostName()}\$/", $NS->HostName, $matches); if ($glue_record) { $known_ns = $this->Db->GetRow("SELECT * FROM nhosts WHERE hostname=? AND domainid=?", array($matches[1], $this->Domain->ID)); if (!$known_ns) { if ($host_as_attr) { // No need to register nameserver hosts $this->Db->Execute("INSERT INTO nhosts SET domainid = ?, hostname = ?, ipaddr = ?", array($this->Domain->ID, $matches[1], $NS->IPAddr)); } else { throw new UpdateDomainNameserversAction_Exception(sprintf(_("Nameserver %s does not exist"), $NS->HostName), UpdateDomainNameserversAction_Exception::NAMESERVERHOST_NOT_REGISTERED); } } else { $NS = new NameserverHost($NS->HostName, $host_as_attr ? $NS->IPAddr : $known_ns['ipaddr']); $NS->ID = $known_ns['id']; } } } // Perform nameservers update try { $Changes = new Changelist($this->Domain->GetNameserverList(), $this->nslist); $Registry->UpdateDomainNameservers($this->Domain, $Changes); $DBNSHost = DBNameserverHost::GetInstance(); $DBNSHost->SaveList($this->Domain->GetNameserverHostList(), $this->Domain->ID); return $this->Domain->HasPendingOperation(Registry::OP_UPDATE) ? UpdateDomainNameserversAction_Result::PENDING : UpdateDomainNameserversAction_Result::OK; } catch (Exception $e) { throw new UpdateDomainNameserversAction_Exception(sprintf(_("Cannot change nameservers. Reason: %s"), $e->getMessage())); } }
/** * Create domain and return transaction status * * @access public * @param Domain $domain * @param int $period Domain registration period * @param array $extra Extra data * @version v1000 * @return Domain */ public function CreateDomain(Domain $domain, $period, $extra = array()) { // Validate contacts $contact_list = $domain->GetContactList(); foreach (CONTACT_TYPE::GetKeys() as $contact_type) { $config = $this->GetManifest()->GetContactConfig($contact_type); if ($config instanceof SimpleXMLElement) { if ((int) $config->attributes()->required && !$contact_list[$contact_type]) { throw new Exception(sprintf(_('%s contact is required'), ucfirst($contact_type))); } } } // $nameserver_list = $domain->GetNameserverList(); foreach ($nameserver_list as $ns) { try { try { $can_create = $this->NameserverCanBeCreated($ns); } catch (NotImplementedException $e) { $can_create = true; } if ($can_create) { $this->CreateNameserver($ns); } } catch (ObjectExistsException $e) { // Ignore errors } catch (NotImplementedException $e) { // Ignore errors } } $this->FireEvent('BeforeCreateDomain', $domain); $Resp = $this->RegModule->CreateDomain($domain, $period, $extra); $this->ValidateModuleResponse($Resp, 'CreateDomainResponse'); if ($Resp->IsFailed()) { Log::Log(sprintf('CreateDomain failed. Registry error: %s', $Resp->ErrMsg), E_USER_ERROR); throw new RegistryException($Resp->ErrMsg, $Resp->Code); } $domain->Period = $period; $domain->AuthCode = $Resp->AuthCode; $domain->CreateDate = $Resp->CreateDate; $domain->ExpireDate = $Resp->ExpireDate; $domain->Protocol = $Resp->Protocol; $domain->Status = $Resp->Status == REGISTRY_RESPONSE_STATUS::PENDING ? DOMAIN_STATUS::REGISTRATION_PENDING : DOMAIN_STATUS::DELEGATED; $domain->IncompleteOrderOperation = null; if ($domain->Status == DOMAIN_STATUS::DELEGATED) { $this->FireEvent('DomainOperation', $domain, self::OP_CREATE); $this->FireEvent('DomainCreated', $domain); } else { if ($domain->Status == DOMAIN_STATUS::REGISTRATION_PENDING) { $this->AddPendingOperation($domain, self::OP_CREATE, $Resp->OperationId); } } $this->DBDomain->Save($domain); // db operation return $domain; }
/** * Create domain and return transaction status * * Domain info is an array of the following structure: * Fill domain Data with this values * * "crDate" => string Creation DateTime, * "exDate" => Expiration DateTime, * "status" => string Status code, * "pw" => string Password generated by registry, * "protocol" => string Protocol * * @access public * @param Domain $domain Domain name without TLD * @param array $owner_contact Domain Owner contact array * @param array $admin_contact Domain Admin contact array * @param array $tech_contact Domain Tech contact array * @param array $billing_contact Domain Billing contact array * @param array $extra Domain Billing contact array * @param integer $period Registration period, years * @param array $nameservers Array of strings containing nameservers hostnames * * @return CreateDomainResponse */ public function CreateDomain(Domain $domain, $period, $extra = array()) { $contacts = $domain->GetContactList(); $nameservers = $domain->GetNameserverList(); $params = array( "name" => $this->MakeNameIDNCompatible($domain->GetHostName()), "registrant_id" => $contacts['registrant']->CLID, "ns1" => $nameservers[0]->HostName, "ns2" => $nameservers[1]->HostName, "period" => $period, "pw" => $domain->AuthCode ? $domain->AuthCode : rand(100000000, 999999999) ); unset($contacts[CONTACT_TYPE::REGISTRANT]); $params['contacts'] = ''; foreach ($contacts as $contact_type => $contact) $params['contacts'] .= '<domain:contact type="'.$contact_type.'">'.$contact->CLID.'</domain:contact>'; $params['ns'] = count($nameservers) ? '<domain:ns>' . $this->GetNSXML($nameservers) . '</domain:ns>' : ''; $this->BeforeRequest('domain-create', $params, __METHOD__, $domain, $period, $extra); $response = $this->Request("domain-create", $params); if ($response->Code == RFC3730_RESULT_CODE::OK_PENDING) $status = REGISTRY_RESPONSE_STATUS::PENDING; elseif ($response->Succeed) $status = REGISTRY_RESPONSE_STATUS::SUCCESS; else $status = REGISTRY_RESPONSE_STATUS::FAILED; $resp = new CreateDomainResponse($status, $response->ErrMsg, $response->Code); $resp->RawResponse = $response->Data; if ($response->Succeed) { $info = $response->Data->response->resData->children($this->XmlNamespaces['domain']); $info = $info[0]; if ($date = $this->StrToTime((string)$info->crDate[0])) $resp->CreateDate = $date; if ($date = $this->StrToTime((string)$info->exDate[0])) $resp->ExpireDate = $date; else $resp->ExpireDate = strtotime("+{$period} year"); $resp->AuthCode = "{$info->authInfo->pw}" ? "{$info->authInfo->pw}" : (string)$params["pw"]; } return $resp; }
/** * Save domain in database * * @param Domain $domain * @return Domain */ public function Save(Domain $domain) { if (!$domain->ID) { // check for duplicate domain $duplicate = $this->DB->GetOne('SELECT COUNT(*) FROM domains WHERE name = ? AND TLD = ?', array($domain->Name, $domain->Extension)); if ($duplicate) { throw new Exception(sprintf(_('Domain %s already exists in DB and could\'t be added twice'), $domain->GetHostName())); } } // Properties data $row = array(); foreach ($this->FieldPropertyMap as $field => $property) { $row[$field] = $domain->{$property} !== null ? $domain->{$property} : ""; } if ($domain->IncompleteOrderOperation === null) { $row['incomplete_operation'] = null; } // Nameservers data $nslist = $domain->GetNameserverList(); // If nameservers list smaller then size of db slots for ($i = 2; $i > count($ns_list); $i--) { $row['ns' . $i] = ''; } $ns_n = array(); foreach (array_values($nslist) as $i => $ns) { if ($i < 2) { $row['ns' . ($i + 1)] = $ns->HostName; } else { $ns_n[] = $ns->HostName; } } $row['ns_n'] = join(';', $ns_n); // Contacts data $contact_list = $domain->GetContactList(); foreach ($this->ContactFieldTypeMap as $field => $contact_type) { $contact = $contact_list[$contact_type]; // Add/Remove references to contact $row[$field] = $contact ? $contact->CLID : ''; } // Domain extra fields $extra_fields = array(); foreach ($domain->GetConfig()->xpath('registration/extra_fields/field') as $field) { settype($field, "array"); $field = $field["@attributes"]; if (isset($domain->{$field['name']})) { $extra_fields[$field['name']] = $domain->{$field['name']}; } } foreach ((array) $domain->ExtraFields as $k => $v) { $extra_fields[$k] = $v; } // Prepare data for DB $row["start_date"] = $row["start_date"] ? date("Y-m-d H:i:s", $row["start_date"]) : '0000-00-00 00:00:00'; $row["end_date"] = $row["end_date"] ? date("Y-m-d H:i:s", $row["end_date"]) : '0000-00-00 00:00:00'; $row['dtTransfer'] = $row['dtTransfer'] ? date("Y-m-d H:i:s", $row["dtTransfer"]) : '0000-00-00 00:00:00'; $row["islocked"] = (int) (bool) $row["islocked"]; $row['managed_dns'] = (int) (bool) $row['managed_dns']; $row['period'] = (int) $row['period']; $row['delete_status'] = (int) $row['delete_status']; $row['renew_disabled'] = (int) (bool) $row['renew_disabled']; // Save it! //if ($domain->ID) unset($row['id']); // Prepare SQL statement $set = array(); $bind = array(); foreach ($row as $field => $value) { $set[] = "`{$field}` = ?"; $bind[] = $value; } $set = join(', ', $set); $this->DB->BeginTrans(); try { if ($domain->ID) { // Perform Update $bind[] = $domain->ID; $this->DB->Execute("UPDATE domains SET {$set} WHERE id = ?", $bind); } else { // Perform Insert $this->DB->Execute("INSERT INTO domains SET {$set}", $bind); $domain->ID = $this->DB->Insert_ID(); } // Save extra data $this->DB->Execute('DELETE FROM domains_data WHERE domainid = ?', array($domain->ID)); foreach ($extra_fields as $name => $value) { $this->DB->Execute('INSERT INTO domains_data SET `domainid` = ?, `key` = ?, `value` = ?', array($domain->ID, $name, $value)); } // Save flags $this->DB->Execute('DELETE FROM domains_flags WHERE domainid = ?', array($domain->ID)); $flag_list = $domain->GetFlagList(); foreach ($flag_list as $flag) { $this->DB->Execute('INSERT INTO domains_flags SET domainid = ?, flag = ?', array($domain->ID, $flag)); } // Save contacts foreach ($contact_list as $contact) { if (!$contact->UserID) { $contact->UserID = $domain->UserID; } $this->DBContact->Save($contact); } // Save nameserver hosts $ns_list = $domain->GetNameserverHostList(); foreach ($ns_list as $ns) { $ns_id = $this->DB->GetOne('SELECT id FROM nhosts WHERE domainid=? AND hostname=?', array($domain->ID, $ns->GetBaseName())); if ($ns_id) { $this->DB->Execute('UPDATE nhosts SET ipaddr=? WHERE hostname=? AND domainid=?', array($ns->IPAddr, $ns->GetBaseName(), $domain->ID)); } else { $this->DB->Execute('INSERT INTO nhosts SET domainid=?, hostname=?, ipaddr=?', array($domain->ID, $ns->GetBaseName(), $ns->IPAddr)); $ns_id = $this->DB->Insert_ID(); } $ns->ID = $ns_id; } //$this->DBNameserverHost->SaveList($ns_list, $domain->ID); } catch (Exception $e) { $this->DB->RollbackTrans(); throw new ApplicationException($e->getMessage(), $e->getCode()); } $this->DB->CompleteTrans(); // Update domain in loaded objects storage $this->LoadedObjects[$domain->ID] = clone $domain; return $domain; }
/** * Create domain and return transaction status * * Domain info is an array of the following structure: * Fill domain Data with this values * * "crDate" => string Creation DateTime, * "exDate" => Expiration DateTime, * "status" => string Status code, * "pw" => string Password generated by registry, * "protocol" => string Protocol * * @access public * @param Domain $domain Domain name without TLD * @param array $owner_contact Domain Owner contact array * @param array $admin_contact Domain Admin contact array * @param array $tech_contact Domain Tech contact array * @param array $billing_contact Domain Billing contact array * @param array $extra Domain Billing contact array * @param integer $period Registration period, years * @param array $nameservers Array of strings containing nameservers hostnames * @return Domain * */ public function CreateDomain(Domain $domain, $period, $extra = array()) { $contacts = $domain->GetContactList(); if (!$contacts['registrant']) { throw new Exception(_('Registrant contact is undefined')); } if (!$contacts['admin']) { throw new Exception(_('Admin contact is undefined')); } if (!$contacts['tech']) { throw new Exception(_('Tech contact is undefined')); } if (!$contacts['billing']) { throw new Exception(_('Billing contact is undefined')); } $nameservers = $domain->GetNameserverList(); $params = array("ownercontact0" => $contacts['registrant']->CLID, "techcontact0" => $contacts['tech'] ? $contacts['tech']->CLID : "", "admincontact0" => $contacts['admin'] ? $contacts['admin']->CLID : "", "billingcontact0" => $contacts['billing'] ? $contacts['billing']->CLID : "", "nameserver0" => $nameservers[0]->HostName, "nameserver1" => $nameservers[1]->HostName, "period" => $period, "auth" => $this->GeneratePassword(), "domain" => $this->MakeNameIDNCompatible($domain->GetHostName())); $params = array_merge($params, (array) $extra); if ($this->PromotionCodes[$this->Extension]) { $params["X-PROMOTION-CODE"] = $this->PromotionCodes[$this->Extension]; } $response = $this->Request("AddDomain", $params); $status = $response->Succeed ? REGISTRY_RESPONSE_STATUS::SUCCESS : REGISTRY_RESPONSE_STATUS::FAILED; $resp = new CreateDomainResponse($status, $response->ErrMsg, $response->Code); if (!$resp->IsFailed()) { // Match domain expiration date preg_match("/property\\[registration expiration date\\]\\[0\\][\\s]*=[\\s]*(.*?)\n/si", $response->Data, $matches); $time = strtotime($matches[1]); $resp->ExpireDate = $time; // Set create date as NOW $resp->CreateDate = time(); // Auth code $resp->AuthCode = (string) $params["auth"]; // Match domain renewal date // (Date when RRPPROXY will execute renewal cron if TLD supports auto renewal) $autorenew = (int) $this->Manifest->GetRegistryOptions()->ability->auto_renewal; if ($autorenew) { preg_match("/property\\[renewal date\\]\\[0\\][\\s]*=[\\s]*(.*?)\n/si", $response->Data, $matches); $domain->SetExtraField('RenewalDate', strtotime($matches[1])); } // Set renewal mode $mode = $autorenew ? 'AUTORENEW' : 'AUTOEXPIRE'; $this->Request('SetDomainRenewalMode', array('domain' => $params['domain'], 'renewalmode' => $mode)); } return $resp; }
/** * Create domain and return transaction status * * Domain info is an array of the following structure: * Fill domain Data with this values * * "crDate" => string Creation DateTime, * "exDate" => Expiration DateTime, * "status" => string Status code, * "pw" => string Password generated by registry, * "protocol" => string Protocol * * @access public * @param Domain $domain Domain name without TLD * @param array $owner_contact Domain Owner contact array * @param array $admin_contact Domain Admin contact array * @param array $tech_contact Domain Tech contact array * @param array $billing_contact Domain Billing contact array * @param array $extra Domain Billing contact array * @param integer $period Registration period, years * @param array $nameservers Array of strings containing nameservers hostnames * @return Domain * * @version v1000 */ public function CreateDomain(Domain $domain, $period, $extra = array()) { $contact_list = $domain->GetContactList(); $nameserver_list = $domain->GetNameserverList(); if (!$nameserver_list || count($nameserver_list) != self::NAMESERVERS_COUNT) { throw new Exception(sprintf(_('This registry requires %d nameservers for domain'), self::NAMESERVERS_COUNT)); } $params = array("name" => "{$domain->Name}.{$this->Extension}", "registrant_id" => $contact_list[CONTACT_TYPE::REGISTRANT]->CLID, "ns1" => $nameserver_list[0]->HostName, "ns2" => $nameserver_list[1]->HostName, "y" => $period, "pw" => rand(100000000, 999999999)); unset($contact_list[CONTACT_TYPE::REGISTRANT]); $params['contacts'] = ''; foreach ($contact_list as $contact_type => $contact) { $params['contacts'] .= '<domain:contact type="' . $contact_type . '">' . $contact->CLID . '</domain:contact>'; } $response = $this->Request("domain-create", $params); if ($response->Code == RFC3730_RESULT_CODE::OK_PENDING) { $status = REGISTRY_RESPONSE_STATUS::PENDING; } elseif ($response->Succeed) { $status = REGISTRY_RESPONSE_STATUS::SUCCESS; } else { $status = REGISTRY_RESPONSE_STATUS::FAILED; } $resp = new CreateDomainResponse($status, $response->ErrMsg, $response->Code); if ($response->Succeed) { $protocol_ext = $response->Data->response->extension->children("urn:ics-forth:params:xml:ns:extdomain-1.1"); $resp->Protocol = (string) $protocol_ext[0]->protocol[0]; $info = $response->Data->response->resData->children("urn:ietf:params:xml:ns:domain-1.0"); $info = $info[0]; $resp->CreateDate = $this->StrToTime((string) $info->crDate[0]); $resp->ExpireDate = $this->StrToTime((string) $info->exDate[0]); $resp->AuthCode = (string) $params["pw"]; } return $resp; }
/** * This method send create domain request. * In order to pending domain creation, response must have status REGISTRY_RESPONSE_STATUS::PENDING * * @param Domain $domain * @param int $period Domain registration period * @param array $extra Extra data * @return CreateDomainResponse */ public function CreateDomain(Domain $domain, $period, $extra = array()) { $contact_list = $domain->GetContactList(); $ns_list = $domain->GetNameserverList(); $is_idna = $this->RegistryAccessible->IsIDNHostName($domain->GetHostName()); if ($is_idna) { $idn = '<idnLang:tag xmlns:idnLang="http://www.verisign.com/epp/idnLang-1.0" ' . 'xsi:schemaLocation="http://www.verisign.com/epp/idnLang-1.0 idnLang-1.0.xsd">' . $domain->IDNLanguage . '</idnLang:tag>'; } else { $idn = ''; } $params = array("name" => $this->MakeNameIDNCompatible($domain->GetHostName()), "period" => $period, "pw" => $this->GeneratePassword(10), 'subproduct' => 'dot' . strtoupper($this->Extension), 'idn' => $idn); $ns_str = ''; if (count($ns_list)) { $ns_str .= '<domain:ns>'; $ns_str .= $this->GetNSXML($ns_list); $ns_str .= '</domain:ns>'; } $params['ns_list'] = $ns_str; $contact_str = ''; if ($contact_list[CONTACT_TYPE::REGISTRANT]) { $contact_str .= "<domain:registrant>{$contact_list[CONTACT_TYPE::REGISTRANT]->CLID}</domain:registrant>"; } unset($contact_list[CONTACT_TYPE::REGISTRANT]); foreach ($contact_list as $type => $Contact) { $contact_str .= "<domain:contact type=\"{$type}\">{$Contact->CLID}</domain:contact>"; } $params['contact_list'] = $contact_str; $response = $this->Request("domain-create", $params); if ($response->Code == RFC3730_RESULT_CODE::OK_PENDING) { $status = REGISTRY_RESPONSE_STATUS::PENDING; } elseif ($response->Succeed) { $status = REGISTRY_RESPONSE_STATUS::SUCCESS; } else { $status = REGISTRY_RESPONSE_STATUS::FAILED; } $resp = new CreateDomainResponse($status, $response->ErrMsg, $response->Code); if ($response->Succeed) { $info = $response->Data->response->resData->children($this->XmlNamespaces['domain']); $info = $info[0]; $resp->CreateDate = $this->StrToTime((string) $info->crDate[0]); $resp->ExpireDate = $this->StrToTime((string) $info->exDate[0]); $resp->AuthCode = (string) $params["pw"]; } return $resp; }
/** * This method send create domain request. * In order to pending domain creation, response must have status REGISTRY_RESPONSE_STATUS::PENDING * * @param Domain $domain * @param int $period Domain registration period * @param array $extra Extra data * @return CreateDomainResponse */ public function CreateDomain(Domain $domain, $period, $extra = array()) { $Registrant = $domain->GetContact(CONTACT_TYPE::REGISTRANT); $Tech = $domain->GetContact(CONTACT_TYPE::TECH); $Admin = $domain->GetContact(CONTACT_TYPE::ADMIN); $Billing = $domain->GetContact(CONTACT_TYPE::BILLING); $nslist = $domain->GetNameserverList(); $params = array('name' => $domain->GetHostName(), 'type' => $this->GetDomainType(), 'registrant' => $Registrant->CLID, 'tech' => $Tech->CLID, 'admin' => $Admin->CLID, 'billing' => $Billing->CLID, 'ns1' => $nslist[0]->HostName, 'ns2' => $nslist[1]->HostName, 'period' => $period, 'pw' => $domain->AuthCode ? $domain->AuthCode : rand(100000, 99999999)); $response = $this->Request('domain-create', $params); $status = $response->Succeed ? REGISTRY_RESPONSE_STATUS::SUCCESS : REGISTRY_RESPONSE_STATUS::FAILED; $ret = new CreateDomainResponse($status, $response->ErrMsg, $response->Code); if ($response->Succeed) { $ret->CreateDate = time(); $ret->ExpireDate = strtotime("+{$period} year"); $ret->AuthCode = (string) $params['pw']; } return $ret; }
/** * Register domain. * This operation supports pending status. If you return response object with Status = REGISTRY_RESPONSE_STATUS.PENDING, you must return response later during a poll. * See IRegistryModuleClientPollable::PollCreateDomain(). * * @param Domain $domain * @param int $period Domain registration period * @param array $extra Extra fields * @return CreateDomainResponse */ public function CreateDomain(Domain $domain, $period, $extra = array()) { $params = array('SLD' => $this->MakeNameIDNCompatible($domain->Name), 'TLD' => $this->Extension, 'NumYears' => $period, 'DomainPassword' => $domain->AuthCode ? $domain->AuthCode : rand(100000000, 9999999999.0)); // IDN tag $is_idna = $this->RegistryAccessible->IsIDNHostName($domain->Name); if ($is_idna) { $params['IDNCode'] = $domain->IDNLanguage; } // NS $nameservers = $domain->GetNameserverList(); $n = 1; foreach ($nameservers as $ns) { $params['NS' . $n] = $ns->HostName; $n++; } // Contacts $contacts = $domain->GetContactList(); foreach ($contacts as $t => $contact) { $params = array_merge($params, $this->PackContact($contact, $t)); } // TLD specific extra fields $params = array_merge($params, $extra); // Request enom.com $Resp = $this->Request('Purchase', $params); if ($Resp->Code == 200) { $status = REGISTRY_RESPONSE_STATUS::SUCCESS; } elseif ($Resp->Code == 1300 && strtolower($Resp->Data->IsRealTimeTLD) == 'false') { $status = REGISTRY_RESPONSE_STATUS::PENDING; } else { $status = REGISTRY_RESPONSE_STATUS::FAILED; } $Ret = new CreateDomainResponse($status, $Resp->ErrMsg, $Resp->Code); if ($Resp->Succeed) { $domain->SetExtraField('OrderID', $Resp->Data->OrderID); $Ret->CreateDate = time(); $Ret->ExpireDate = time() + 86400 * 365 * $period; $Ret->AuthCode = (string) $params['DomainPassword']; } return $Ret; }