diff --git a/Tembo.php b/Tembo.php new file mode 100644 index 0000000..48c92a5 --- /dev/null +++ b/Tembo.php @@ -0,0 +1,2619 @@ + array( + 'verify_peer' => (bool)$params['verify_peer'], + 'verify_peer_name' => (bool)$params['verify_peer_name'], + 'verify_host' => (bool)$params['verify_host'], + 'cafile' => (string)$params['cafile'], + 'local_cert' => (string)$params['local_cert'], + 'local_pk' => (string)$params['local_pk'], + 'passphrase' => (string)$params['passphrase'], + 'allow_self_signed' => (bool)$params['allow_self_signed'], + 'min_tls_version' => $tls + ) + ); + if ($bind) { + $opts['socket'] = array('bindto' => $bindip); + } + $context = stream_context_create($opts); + $this->resource = stream_socket_client("tls://{$host}:{$port}", $errno, $errmsg, $timeout, STREAM_CLIENT_CONNECT, $context); + if (!$this->resource) { + throw new \exception("Cannot connect to server '{$host}': {$errmsg}"); + } + + return $this->readResponse(); + } + + /** + * readResponse + */ + public function readResponse() + { + $hdr = stream_get_contents($this->resource, 4); + if ($hdr === false) { + throw new \exception('Connection appears to have closed.'); + } + if (strlen($hdr) < 4) { + throw new \exception('Failed to read header from the connection.'); + } + $unpacked = unpack('N', $hdr); + $xml = fread($this->resource, ($unpacked[1] - 4)); + $xml = preg_replace('/>\n<", $xml); + $this->_response_log($xml); + return $xml; + } + + /** + * writeRequest + */ + public function writeRequest($xml) + { + $this->_request_log($xml); + if (fwrite($this->resource, pack('N', (strlen($xml) + 4)) . $xml) === false) { + throw new exception('Error writing to the connection.'); + } + $xml_string = $this->readResponse(); + libxml_use_internal_errors(true); + + $r = simplexml_load_string($xml_string, 'SimpleXMLElement', LIBXML_DTDLOAD | LIBXML_NOENT); + if ($r instanceof SimpleXMLElement) { + $r->registerXPathNamespace('e', 'urn:ietf:params:xml:ns:epp-1.0'); + $r->registerXPathNamespace('xsi', 'http://www.w3.org/2001/XMLSchema-instance'); + $r->registerXPathNamespace('domain', 'urn:ietf:params:xml:ns:domain-1.0'); + $r->registerXPathNamespace('contact', 'urn:ietf:params:xml:ns:contact-1.0'); + $r->registerXPathNamespace('host', 'urn:ietf:params:xml:ns:host-1.0'); + $r->registerXPathNamespace('rgp', 'urn:ietf:params:xml:ns:rgp-1.0'); + } + if (isset($r->response) && $r->response->result->attributes()->code >= 2000) { + throw new \exception($r->response->result->msg); + } + return $r; + } + + /** + * disconnect + */ + public function disconnect() + { + if (!fclose($this->resource)) { + throw new \exception('Error closing the connection.'); + } + $this->resource = null; + } + + /** + * wrapper for functions + */ + public function __call($func, $args) + { + if (!function_exists($func)) { + throw new \Exception("Call to undefined method Epp::$func()."); + } + + if ($func === 'connect') { + try { + $result = call_user_func_array($func, $args); + } catch (\ErrorException $e) { + throw new \Exception($e->getMessage()); + } + + if (!is_resource($this->resource)) { + throw new \Exception('An error occured while trying to connect to EPP server.'); + } + + $result = null; + } elseif (!is_resource($this->resource)) { + throw new EppNotConnectedException(); + } else { + array_unshift($args, $this->resource); + try { + $result = call_user_func_array($func, $args); + } catch (\ErrorException $e) { + throw new \Exception($e->getMessage()); + } + } + + return $result; + } + + /** + * login + */ + public function login($params = array()) + { + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ clID }}/'; + $to[] = htmlspecialchars($params['clID']); + $from[] = '/{{ pwd }}/'; + $to[] = htmlspecialchars($params['pw']); + if (isset($params['newpw']) && !empty($params['newpw'])) { + $from[] = '/{{ newpw }}/'; + $to[] = PHP_EOL . ' ' . htmlspecialchars($params['newpw']) . ''; + } else { + $from[] = '/{{ newpw }}/'; + $to[] = ''; + } + $from[] = '/{{ clTRID }}/'; + $microtime = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($params['prefix'] . '-login-' . $microtime); + $xml = preg_replace($from, $to, ' + + + + {{ clID }} + {{ pwd }}{{ newpw }} + + 1.0 + en + + + urn:ietf:params:xml:ns:domain-1.0 + urn:ietf:params:xml:ns:contact-1.0 + urn:ietf:params:xml:ns:host-1.0 + + urn:ietf:params:xml:ns:secDNS-1.1 + + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + if ($code == 1000) { + $this->isLoggedIn = true; + $this->prefix = $params['prefix']; + } + + $return = array( + 'code' => $code, + 'msg' => $r->response->result->msg + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * logout + */ + public function logout($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ clTRID }}/'; + $microtime = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-logout-' . $microtime); + $xml = preg_replace($from, $to, ' + + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + if ($code == 1500) { + $this->isLoggedIn = false; + } + + $return = array( + 'code' => $code, + 'msg' => $r->response->result->msg + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * hello + */ + public function hello() + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ clTRID }}/'; + $microtime = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-hello-' . $microtime); + $xml = preg_replace($from, $to, ' + + +'); + $r = $this->writeRequest($xml); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $r->asXML(); + } + + /** + * hostCheck + */ + public function hostCheck($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ name }}/'; + $to[] = htmlspecialchars($params['hostname']); + $from[] = '/{{ clTRID }}/'; + $microtime = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-host-check-' . $microtime); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + $xml = preg_replace($from, $to, ' + + + + + {{ name }} + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + $r = $r->response->resData->children('urn:ietf:params:xml:ns:host-1.0')->chkData; + + $i = 0; + foreach ($r->cd as $cd) { + $i++; + $hosts[$i]['name'] = (string)$cd->name; + $hosts[$i]['reason'] = (string)$cd->reason; + $hosts[$i]['avail'] = (int)$cd->name->attributes()->avail; + } + + $return = array( + 'code' => $code, + 'msg' => $msg, + 'hosts' => $hosts + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * hostInfo + */ + public function hostInfo($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ name }}/'; + $to[] = htmlspecialchars($params['hostname']); + $from[] = '/{{ clTRID }}/'; + $microtime = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-host-info-' . $microtime); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + $xml = preg_replace($from, $to, ' + + + + + {{ name }} + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + $r = $r->response->resData->children('urn:ietf:params:xml:ns:host-1.0')->infData[0]; + $name = (string)$r->name; + $addr = array(); + foreach ($r->addr as $ns) { + $addr[] = (string)$ns; + } + $status = array(); + $i = 0; + foreach ($r->status as $e) { + $i++; + $status[$i] = (string)$e->attributes()->s; + } + $clID = (string)$r->clID; + $crID = (string)$r->crID; + $crDate = (string)$r->crDate; + $upID = (string)$r->upID; + $upDate = (string)$r->upDate; + + $return = array( + 'code' => $code, + 'msg' => $msg, + 'name' => $name, + 'status' => $status, + 'addr' => $addr, + 'clID' => $clID, + 'crID' => $crID, + 'crDate' => $crDate, + 'upID' => $upID, + 'upDate' => $upDate + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * hostCreate + */ + public function hostCreate($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ name }}/'; + $to[] = htmlspecialchars($params['hostname']); + $from[] = '/{{ ip }}/'; + $to[] = htmlspecialchars($params['ipaddress']); + $from[] = '/{{ v }}/'; + $to[] = (preg_match('/:/', $params['ipaddress']) ? 'v6' : 'v4'); + $from[] = '/{{ clTRID }}/'; + $clTRID = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-host-create-' . $clTRID); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + $xml = preg_replace($from, $to, ' + + + + + {{ name }} + {{ ip }} + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + $r = $r->response->resData->children('urn:ietf:params:xml:ns:host-1.0')->creData; + $name = (string)$r->name; + + $return = array( + 'code' => $code, + 'msg' => $msg, + 'name' => $name + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * hostUpdate + */ + public function hostUpdate($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ name }}/'; + $to[] = htmlspecialchars($params['hostname']); + $from[] = '/{{ ip1 }}/'; + $to[] = htmlspecialchars($params['currentipaddress']); + $from[] = '/{{ v1 }}/'; + $to[] = (preg_match('/:/', $params['currentipaddress']) ? 'v6' : 'v4'); + $from[] = '/{{ ip2 }}/'; + $to[] = htmlspecialchars($params['newipaddress']); + $from[] = '/{{ v2 }}/'; + $to[] = (preg_match('/:/', $params['newipaddress']) ? 'v6' : 'v4'); + $from[] = '/{{ clTRID }}/'; + $clTRID = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-host-update-' . $clTRID); + $xml = preg_replace($from, $to, ' + + + + + {{ name }} + + {{ ip2 }} + + + {{ ip1 }} + + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + + $return = array( + 'code' => $code, + 'msg' => $msg + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * hostDelete + */ + public function hostDelete($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ name }}/'; + $to[] = htmlspecialchars($params['hostname']); + $from[] = '/{{ clTRID }}/'; + $clTRID = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-host-delete-' . $clTRID); + $xml = preg_replace($from, $to, ' + + + + + {{ name }} + + + {{ clTRID }} + + '); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + + $return = array( + 'code' => $code, + 'msg' => $msg + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * contactCheck + */ + public function contactCheck($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ id }}/'; + $id = $params['contact']; + $to[] = htmlspecialchars($id); + $from[] = '/{{ clTRID }}/'; + $microtime = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-contact-check-' . $microtime); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + $xml = preg_replace($from, $to, ' + + + + + {{ id }} + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + $r = $r->response->resData->children('urn:ietf:params:xml:ns:contact-1.0')->chkData; + + $i = 0; + foreach ($r->cd as $cd) { + $i++; + $contacts[$i]['id'] = (string)$cd->id; + $contacts[$i]['avail'] = (int)$cd->id->attributes()->avail; + $contacts[$i]['reason'] = (string)$cd->reason; + } + + $return = array( + 'code' => $code, + 'msg' => $msg, + 'contacts' => $contacts + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * contactInfo + */ + public function contactInfo($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ id }}/'; + $to[] = htmlspecialchars($params['contact']); + $from[] = '/{{ authInfo }}/'; + $authInfo = (isset($params['authInfoPw']) ? "\n\n" : ''); + $to[] = $authInfo; + $from[] = '/{{ clTRID }}/'; + $microtime = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-contact-info-' . $microtime); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + $xml = preg_replace($from, $to, ' + + + + + {{ id }} + {{ authInfo }} + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + $r = $r->response->resData->children('urn:ietf:params:xml:ns:contact-1.0')->infData[0]; + + foreach ($r->postalInfo as $e) { + $name = (string)$e->name; + $org = (string)$e->org; + $street1 = $street2 = $street3 = ''; + for ($i = 0; $i <= 2; $i++) { + ${'street' . ($i + 1)} = (string)$e->addr->street[$i]; + } + $city = (string)$e->addr->city; + $state = (string)$e->addr->sp; + $postal = (string)$e->addr->pc; + $country = (string)$e->addr->cc; + } + $id = (string)$r->id; + $status = array(); + $i = 0; + foreach ($r->status as $e) { + $i++; + $status[$i] = (string)$e->attributes()->s; + } + $roid = (string)$r->roid; + $voice = (string)$r->voice; + $fax = (string)$r->fax; + $email = (string)$r->email; + $clID = (string)$r->clID; + $crID = (string)$r->crID; + $crDate = (string)$r->crDate; + $upID = (string)$r->upID; + $upDate = (string)$r->upDate; + $authInfo = (string)$r->authInfo->pw; + + $return = array( + 'id' => $id, + 'roid' => $roid, + 'code' => $code, + 'status' => $status, + 'msg' => $msg, + 'name' => $name, + 'org' => $org, + 'street1' => $street1, + 'street2' => $street2, + 'street3' => $street3, + 'city' => $city, + 'state' => $state, + 'postal' => $postal, + 'country' => $country, + 'voice' => $voice, + 'fax' => $fax, + 'email' => $email, + 'clID' => $clID, + 'crID' => $crID, + 'crDate' => $crDate, + 'upID' => $upID, + 'upDate' => $upDate, + 'authInfo' => $authInfo + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * contactCreate + */ + public function contactCreate($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ type }}/'; + $to[] = htmlspecialchars($params['type']); + $from[] = '/{{ id }}/'; + $to[] = htmlspecialchars($params['id']); + $from[] = '/{{ name }}/'; + $to[] = htmlspecialchars($params['firstname'] . ' ' . $params['lastname']); + $from[] = '/{{ org }}/'; + $to[] = htmlspecialchars($params['companyname']); + $from[] = '/{{ street1 }}/'; + $to[] = htmlspecialchars($params['address1']); + $from[] = '/{{ street2 }}/'; + $to[] = htmlspecialchars($params['address2']); + $from[] = '/{{ street3 }}/'; + $street3 = (isset($params['address3']) ? $params['address3'] : ''); + $to[] = htmlspecialchars($street3); + $from[] = '/{{ city }}/'; + $to[] = htmlspecialchars($params['city']); + $from[] = '/{{ state }}/'; + $to[] = htmlspecialchars($params['state']); + $from[] = '/{{ postcode }}/'; + $to[] = htmlspecialchars($params['postcode']); + $from[] = '/{{ country }}/'; + $to[] = htmlspecialchars($params['country']); + $from[] = '/{{ phonenumber }}/'; + $to[] = htmlspecialchars($params['fullphonenumber']); + $from[] = '/{{ email }}/'; + $to[] = htmlspecialchars($params['email']); + $from[] = '/{{ authInfo }}/'; + $to[] = htmlspecialchars($params['authInfoPw']); + $from[] = '/{{ clTRID }}/'; + $microtime = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-contact-create-' . $microtime); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + $xml = preg_replace($from, $to, ' + + + + + {{ id }} + + {{ name }} + {{ org }} + + {{ street1 }} + {{ street2 }} + {{ street3 }} + {{ city }} + {{ state }} + {{ postcode }} + {{ country }} + + + {{ phonenumber }} + + {{ email }} + + {{ authInfo }} + + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + $r = $r->response->resData->children('urn:ietf:params:xml:ns:contact-1.0')->creData; + $id = (string)$r->id; + + $return = array( + 'code' => $code, + 'msg' => $msg, + 'id' => $id + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * contactUpdate + */ + public function contactUpdate($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ type }}/'; + $to[] = htmlspecialchars($params['type']); + $from[] = '/{{ id }}/'; + $to[] = htmlspecialchars($params['id']); + $from[] = '/{{ name }}/'; + $to[] = htmlspecialchars($params['firstname'] . ' ' . $params['lastname']); + $from[] = '/{{ org }}/'; + $to[] = htmlspecialchars($params['companyname']); + $from[] = '/{{ street1 }}/'; + $to[] = htmlspecialchars($params['address1']); + $from[] = '/{{ street2 }}/'; + $to[] = htmlspecialchars($params['address2']); + $from[] = '/{{ street3 }}/'; + $street3 = (isset($params['address3']) ? $params['address3'] : ''); + $to[] = htmlspecialchars($street3); + $from[] = '/{{ city }}/'; + $to[] = htmlspecialchars($params['city']); + $from[] = '/{{ state }}/'; + $to[] = htmlspecialchars($params['state']); + $from[] = '/{{ postcode }}/'; + $to[] = htmlspecialchars($params['postcode']); + $from[] = '/{{ country }}/'; + $to[] = htmlspecialchars($params['country']); + $from[] = '/{{ voice }}/'; + $to[] = htmlspecialchars($params['fullphonenumber']); + $from[] = '/{{ email }}/'; + $to[] = htmlspecialchars($params['email']); + $from[] = '/{{ clTRID }}/'; + $microtime = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-contact-update-' . $microtime); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + $xml = preg_replace($from, $to, ' + + + + + {{ id }} + + + {{ name }} + {{ org }} + + {{ street1 }} + {{ street2 }} + {{ street3 }} + {{ city }} + {{ state }} + {{ postcode }} + {{ country }} + + + {{ voice }} + + {{ email }} + + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + + $return = array( + 'code' => $code, + 'msg' => $msg + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * contactDelete + */ + public function contactDelete($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ id }}/'; + $to[] = htmlspecialchars($params['contact']); + $from[] = '/{{ clTRID }}/'; + $clTRID = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-contact-delete-' . $clTRID); + $xml = preg_replace($from, $to, ' + + + + + {{ id }} + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + + $return = array( + 'code' => $code, + 'msg' => $msg + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * domainCheck + */ + public function domainCheck($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $text = ''; + foreach ($params['domains'] as $name) { + $text .= '' . $name . '' . "\n"; + } + $from[] = '/{{ names }}/'; + $to[] = $text; + $from[] = '/{{ clTRID }}/'; + $microtime = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-domain-check-' . $microtime); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + $xml = preg_replace($from, $to, ' + + + + + {{ names }} + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + $r = $r->response->resData->children('urn:ietf:params:xml:ns:domain-1.0')->chkData; + + $i = 0; + foreach ($r->cd as $cd) { + $i++; + $domains[$i]['name'] = (string)$cd->name; + $domains[$i]['avail'] = (int)$cd->name->attributes()->avail; + $domains[$i]['reason'] = (string)$cd->reason; + } + + $return = array( + 'code' => $code, + 'msg' => $msg, + 'domains' => $domains + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * domainCheckClaims + */ + public function domainCheckClaims($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ name }}/'; + $to[] = htmlspecialchars($params['domainname']); + $from[] = '/{{ clTRID }}/'; + $microtime = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-domain-checkClaims-' . $microtime); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + $xml = preg_replace($from, $to, ' + + + + + {{ name }} + + + + + claims + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + $phase = $r->response->extension->children('urn:ietf:params:xml:ns:launch-1.0')->chkData->phase; + $status = $r->response->extension->children('urn:ietf:params:xml:ns:launch-1.0')->chkData->cd->name->attributes()->exists; + $name = $r->response->extension->children('urn:ietf:params:xml:ns:launch-1.0')->chkData->cd->name; + $claimKey = $r->response->extension->children('urn:ietf:params:xml:ns:launch-1.0')->chkData->cd->claimKey; + + $return = array( + 'code' => $code, + 'msg' => $msg, + 'domain' => $name, + 'status' => $status, + 'phase' => $phase, + 'claimKey' => $claimKey + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * domainInfo + */ + public function domainInfo($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ domainname }}/'; + $to[] = htmlspecialchars($params['domainname']); + $from[] = '/{{ authInfo }}/'; + $authInfo = (isset($params['authInfoPw']) ? "\n\n" : ''); + $to[] = $authInfo; + $from[] = '/{{ clTRID }}/'; + $microtime = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-domain-info-' . $microtime); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + $xml = preg_replace($from, $to, ' + + + + + {{ domainname }} + {{ authInfo }} + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + $r = $r->response->resData->children('urn:ietf:params:xml:ns:domain-1.0')->infData; + $name = (string)$r->name; + $roid = (string)$r->roid; + $status = array(); + $i = 0; + foreach ($r->status as $e) { + $i++; + $status[$i] = (string)$e->attributes()->s; + } + $registrant = (string)$r->registrant; + $contact = array(); + $i = 0; + foreach ($r->contact as $e) { + $i++; + $contact[$i]['type'] = (string)$e->attributes()->type; + $contact[$i]['id'] = (string)$e; + } + $ns = array(); + $i = 0; + foreach ($r->ns->hostObj as $hostObj) { + $i++; + $ns[$i] = (string)$hostObj; + } + $host = array(); + $i = 0; + foreach ($r->host as $hostname) { + $i++; + $host[$i] = (string)$hostname; + } + $clID = (string)$r->clID; + $crID = (string)$r->crID; + $crDate = (string)$r->crDate; + $upID = (string)$r->upID; + $upDate = (string)$r->upDate; + $exDate = (string)$r->exDate; + $trDate = (string)$r->trDate; + $authInfo = (string)$r->authInfo->pw; + + $return = array( + 'code' => $code, + 'msg' => $msg, + 'name' => $name, + 'roid' => $roid, + 'status' => $status, + 'registrant' => $registrant, + 'contact' => $contact, + 'ns' => $ns, + 'host' => $host, + 'clID' => $clID, + 'crID' => $crID, + 'crDate' => $crDate, + 'upID' => $upID, + 'upDate' => $upDate, + 'exDate' => $exDate, + 'trDate' => $trDate, + 'authInfo' => $authInfo + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * domainUpdateNS + */ + public function domainUpdateNS($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ name }}/'; + $to[] = htmlspecialchars($params['domainname']); + $from[] = '/{{ clTRID }}/'; + $clTRID = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-domain-info-' . $clTRID); + $xml = preg_replace($from, $to, ' + + + + + {{ name }} + + + {{ clTRID }} + + '); + $r = $this->writeRequest($xml); + $r = $r->response->resData->children('urn:ietf:params:xml:ns:domain-1.0')->infData; + + $add = $rem = array(); + $i = 0; + foreach ($r->ns->hostObj as $ns) { + $i++; + $ns = (string)$ns; + if (!$ns) { + continue; + } + + $rem["ns{$i}"] = $ns; + } + + foreach ($params as $k => $v) { + if (!$v) { + continue; + } + + if (!preg_match("/^ns\d$/i", $k)) { + continue; + } + + if ($k0 = array_search($v, $rem)) { + unset($rem[$k0]); + } else { + $add[$k] = $v; + } + } + + if (!empty($add) || !empty($rem)) { + $from = $to = array(); + $text = ''; + foreach ($add as $k => $v) { + $text.= '' . $v . '' . "\n"; + } + + $from[] = '/{{ add }}/'; + $to[] = (empty($text) ? '' : "\n{$text}\n"); + $text = ''; + foreach ($rem as $k => $v) { + $text.= '' . $v . '' . "\n"; + } + + $from[] = '/{{ rem }}/'; + $to[] = (empty($text) ? '' : "\n{$text}\n"); + $from[] = '/{{ name }}/'; + $to[] = htmlspecialchars($params['domainname']); + $from[] = '/{{ clTRID }}/'; + $clTRID = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-domain-updateNS-' . $clTRID); + $xml = preg_replace($from, $to, ' + + + + + {{ name }} + {{ add }} + {{ rem }} + + + {{ clTRID }} + + '); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + + $return = array( + 'code' => $code, + 'msg' => $msg + ); + } + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * domainUpdateContact + */ + public function domainUpdateContact($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ name }}/'; + $to[] = htmlspecialchars($params['domainname']); + if ($params['contacttype'] === 'registrant') { + $from[] = '/{{ add }}/'; + $to[] = ""; + $from[] = '/{{ rem }}/'; + $to[] = ""; + $from[] = '/{{ chg }}/'; + $to[] = "".htmlspecialchars($params['new_contactid'])."\n"; + } else { + $from[] = '/{{ add }}/'; + $to[] = "".htmlspecialchars($params['new_contactid'])."\n"; + $from[] = '/{{ rem }}/'; + $to[] = "".htmlspecialchars($params['old_contactid'])."\n"; + $from[] = '/{{ chg }}/'; + $to[] = ""; + } + $from[] = '/{{ clTRID }}/'; + $clTRID = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-domain-updateContact-' . $clTRID); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + $xml = preg_replace($from, $to, ' + + + + + {{ name }} + {{ add }} + {{ rem }} + {{ chg }} + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + + $return = array( + 'code' => $code, + 'msg' => $msg + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * domainUpdateStatus + */ + public function domainUpdateStatus($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ name }}/'; + $to[] = htmlspecialchars($params['domainname']); + if ($params['command'] === 'add') { + $from[] = '/{{ add }}/'; + $to[] = "\n"; + $from[] = '/{{ rem }}/'; + $to[] = ""; + } else if ($params['command'] === 'rem') { + $from[] = '/{{ add }}/'; + $to[] = ""; + $from[] = '/{{ rem }}/'; + $to[] = "\n"; + } + $from[] = '/{{ clTRID }}/'; + $clTRID = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-domain-updateStatus-' . $clTRID); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + $xml = preg_replace($from, $to, ' + + + + + {{ name }} + {{ add }} + {{ rem }} + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + + $return = array( + 'code' => $code, + 'msg' => $msg + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * domainUpdateAuthinfo + */ + public function domainUpdateAuthinfo($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ name }}/'; + $to[] = htmlspecialchars($params['domainname']); + $from[] = '/{{ authInfo }}/'; + $to[] = htmlspecialchars($params['authInfo']); + $from[] = '/{{ clTRID }}/'; + $clTRID = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-domain-updateAuthinfo-' . $clTRID); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + $xml = preg_replace($from, $to, ' + + + + + {{ name }} + + + {{ authInfo }} + + + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + + $return = array( + 'code' => $code, + 'msg' => $msg + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * domainUpdateDNSSEC + */ + public function domainUpdateDNSSEC($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ name }}/'; + $to[] = htmlspecialchars($params['domainname']); + if ($params['command'] == 'add') { + $from[] = '/{{ add }}/'; + $to[] = " + + ".htmlspecialchars($params['keyTag_1'])." + ".htmlspecialchars($params['alg_1'])." + ".htmlspecialchars($params['digestType_1'])." + ".htmlspecialchars($params['digest_1'])." + + "; + $from[] = '/{{ rem }}/'; + $to[] = ""; + $from[] = '/{{ addrem }}/'; + $to[] = ""; + } else if ($params['command'] == 'rem') { + $from[] = '/{{ add }}/'; + $to[] = ""; + $from[] = '/{{ rem }}/'; + $to[] = " + + ".htmlspecialchars($params['keyTag_1'])." + ".htmlspecialchars($params['alg_1'])." + ".htmlspecialchars($params['digestType_1'])." + ".htmlspecialchars($params['digest_1'])." + + "; + $from[] = '/{{ addrem }}/'; + $to[] = ""; + } else if ($params['command'] == 'addrem') { + $from[] = '/{{ add }}/'; + $to[] = ""; + $from[] = '/{{ rem }}/'; + $to[] = ""; + $from[] = '/{{ addrem }}/'; + $to[] = " + + ".htmlspecialchars($params['keyTag_1'])." + ".htmlspecialchars($params['alg_1'])." + ".htmlspecialchars($params['digestType_1'])." + ".htmlspecialchars($params['digest_1'])." + + + + + ".htmlspecialchars($params['keyTag_2'])." + ".htmlspecialchars($params['alg_2'])." + ".htmlspecialchars($params['digestType_2'])." + ".htmlspecialchars($params['digest_2'])." + + "; + } + $from[] = '/{{ clTRID }}/'; + $clTRID = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-domain-updateDNSSEC-' . $clTRID); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + $xml = preg_replace($from, $to, ' + + + + + {{ name }} + + + + + {{ add }} + {{ rem }} + {{ addrem }} + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + + $return = array( + 'code' => $code, + 'msg' => $msg + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * domainTransfer + */ + public function domainTransfer($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ name }}/'; + $to[] = htmlspecialchars($params['domainname']); + switch (htmlspecialchars($params['op'])) { + case 'request': + $from[] = '/{{ years }}/'; + $to[] = (int)($params['years']); + $from[] = '/{{ authInfoPw }}/'; + $to[] = htmlspecialchars($params['authInfoPw']); + $xmltype = 'req'; + break; + case 'query': + $from[] = '/{{ type }}/'; + $to[] = 'query'; + $xmltype = 'oth'; + break; + case 'cancel': + $from[] = '/{{ type }}/'; + $to[] = 'cancel'; + $xmltype = 'oth'; + break; + case 'reject': + $from[] = '/{{ type }}/'; + $to[] = 'reject'; + $xmltype = 'oth'; + break; + case 'approve': + $xmltype = 'apr'; + break; + default: + throw new EppException('Invalid value for transfer:op specified.'); + break; + } + $from[] = '/{{ clTRID }}/'; + $clTRID = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-domain-transfer-' . $clTRID); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + if ($xmltype === 'req') { + $xml = preg_replace($from, $to, ' + + + + + {{ name }} + {{ years }} + + {{ authInfoPw }} + + + + {{ clTRID }} + + '); + + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + $r = $r->response->resData->children('urn:ietf:params:xml:ns:domain-1.0')->trnData; + $name = (string)$r->name; + $trStatus = (string)$r->trStatus; + $reID = (string)$r->reID; + $reDate = (string)$r->reDate; + $acID = (string)$r->acID; + $acDate = (string)$r->acDate; + $exDate = (string)$r->exDate; + + $return = array( + 'code' => $code, + 'msg' => $msg, + 'name' => $name, + 'trStatus' => $trStatus, + 'reID' => $reID, + 'reDate' => $reDate, + 'acID' => $acID, + 'acDate' => $acDate, + 'exDate' => $exDate + ); + + } else if ($xmltype === 'apr') { + $xml = preg_replace($from, $to, ' + + + + + {{ name }} + + + {{ clTRID }} + + '); + + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + $r = $r->response->resData->children('urn:ietf:params:xml:ns:domain-1.0')->Data; + $name = (string)$r->name; + $trStatus = (string)$r->trStatus; + $reID = (string)$r->reID; + $reDate = (string)$r->reDate; + + $return = array( + 'code' => $code, + 'msg' => $msg, + 'name' => $name, + 'trStatus' => $trStatus, + 'reID' => $reID, + 'reDate' => $reDate + ); + + } else if ($xmltype === 'oth') { + $xml = preg_replace($from, $to, ' + + + + + {{ name }} + + + {{ clTRID }} + + '); + + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + + $return = array( + 'code' => $code, + 'msg' => $msg + ); + + } + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * domainCreate + */ + public function domainCreate($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ name }}/'; + $to[] = htmlspecialchars($params['domainname']); + $from[] = '/{{ period }}/'; + $to[] = (int)($params['period']); + if (isset($params['nss'])) { + $text = ''; + foreach ($params['nss'] as $hostObj) { + $text .= '' . $hostObj . '' . "\n"; + } + $from[] = '/{{ hostObjs }}/'; + $to[] = $text; + } else { + $from[] = '/{{ hostObjs }}/'; + $to[] = ''; + } + $from[] = '/{{ registrant }}/'; + $to[] = htmlspecialchars($params['registrant']); + $text = ''; + foreach ($params['contacts'] as $contactType => $contactID) { + $text .= '' . $contactID . '' . "\n"; + } + $from[] = '/{{ contacts }}/'; + $to[] = $text; + $from[] = '/{{ authInfoPw }}/'; + $to[] = htmlspecialchars($params['authInfoPw']); + $from[] = '/{{ clTRID }}/'; + $clTRID = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-domain-create-' . $clTRID); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + $xml = preg_replace($from, $to, ' + + + + + {{ name }} + {{ period }} + + {{ hostObjs }} + + {{ registrant }} + {{ contacts }} + + {{ authInfoPw }} + + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + $r = $r->response->resData->children('urn:ietf:params:xml:ns:domain-1.0')->creData; + $name = (string)$r->name; + $crDate = (string)$r->crDate; + $exDate = (string)$r->exDate; + + $return = array( + 'code' => $code, + 'msg' => $msg, + 'name' => $name, + 'crDate' => $crDate, + 'exDate' => $exDate + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * domainCreateDNSSEC + */ + public function domainCreateDNSSEC($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ name }}/'; + $to[] = htmlspecialchars($params['domainname']); + $from[] = '/{{ period }}/'; + $to[] = (int)($params['period']); + if (isset($params['nss'])) { + $text = ''; + foreach ($params['nss'] as $hostObj) { + $text .= '' . $hostObj . '' . "\n"; + } + $from[] = '/{{ hostObjs }}/'; + $to[] = $text; + } else { + $from[] = '/{{ hostObjs }}/'; + $to[] = ''; + } + $from[] = '/{{ registrant }}/'; + $to[] = htmlspecialchars($params['registrant']); + $text = ''; + foreach ($params['contacts'] as $contactType => $contactID) { + $text .= '' . $contactID . '' . "\n"; + } + $from[] = '/{{ contacts }}/'; + $to[] = $text; + $from[] = '/{{ authInfoPw }}/'; + $to[] = htmlspecialchars($params['authInfoPw']); + if ($params['dnssec_records'] == 1) { + $from[] = '/{{ dnssec_data }}/'; + $to[] = " + ".htmlspecialchars($params['keyTag_1'])." + ".htmlspecialchars($params['alg_1'])." + ".htmlspecialchars($params['digestType_1'])." + ".htmlspecialchars($params['digest_1'])." + "; + } else if ($params['dnssec_records'] == 2) { + $from[] = '/{{ dnssec_data }}/'; + $to[] = " + ".htmlspecialchars($params['keyTag_1'])." + ".htmlspecialchars($params['alg_1'])." + ".htmlspecialchars($params['digestType_1'])." + ".htmlspecialchars($params['digest_1'])." + + + ".htmlspecialchars($params['keyTag_2'])." + ".htmlspecialchars($params['alg_2'])." + ".htmlspecialchars($params['digestType_2'])." + ".htmlspecialchars($params['digest_2'])." + "; + } + $from[] = '/{{ clTRID }}/'; + $clTRID = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-domain-createDNSSEC-' . $clTRID); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + $xml = preg_replace($from, $to, ' + + + + + {{ name }} + {{ period }} + + {{ hostObjs }} + + {{ registrant }} + {{ contacts }} + + {{ authInfoPw }} + + + + + + {{ dnssec_data }} + + + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + $r = $r->response->resData->children('urn:ietf:params:xml:ns:domain-1.0')->creData; + $name = (string)$r->name; + $crDate = (string)$r->crDate; + $exDate = (string)$r->exDate; + + $return = array( + 'code' => $code, + 'msg' => $msg, + 'name' => $name, + 'crDate' => $crDate, + 'exDate' => $exDate + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * domainCreateClaims + */ + public function domainCreateClaims($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ name }}/'; + $to[] = htmlspecialchars($params['domainname']); + $from[] = '/{{ period }}/'; + $to[] = (int)($params['period']); + if (isset($params['nss'])) { + $text = ''; + foreach ($params['nss'] as $hostObj) { + $text .= '' . $hostObj . '' . "\n"; + } + $from[] = '/{{ hostObjs }}/'; + $to[] = $text; + } else { + $from[] = '/{{ hostObjs }}/'; + $to[] = ''; + } + $from[] = '/{{ registrant }}/'; + $to[] = htmlspecialchars($params['registrant']); + $text = ''; + foreach ($params['contacts'] as $contactType => $contactID) { + $text .= '' . $contactID . '' . "\n"; + } + $from[] = '/{{ contacts }}/'; + $to[] = $text; + $from[] = '/{{ authInfoPw }}/'; + $to[] = htmlspecialchars($params['authInfoPw']); + $from[] = '/{{ noticeID }}/'; + $to[] = htmlspecialchars($params['noticeID']); + $from[] = '/{{ notAfter }}/'; + $to[] = htmlspecialchars($params['notAfter']); + $from[] = '/{{ acceptedDate }}/'; + $to[] = htmlspecialchars($params['acceptedDate']); + $from[] = '/{{ clTRID }}/'; + $clTRID = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-domain-createClaims-' . $clTRID); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + $xml = preg_replace($from, $to, ' + + + + + {{ name }} + {{ period }} + + {{ hostObjs }} + + {{ registrant }} + {{ contacts }} + + {{ authInfoPw }} + + + + + claims + + {{ noticeID }} + {{ notAfter }} + {{ acceptedDate }} + + + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + $r = $r->response->resData->children('urn:ietf:params:xml:ns:domain-1.0')->creData; + $name = (string)$r->name; + $crDate = (string)$r->crDate; + $exDate = (string)$r->exDate; + + $return = array( + 'code' => $code, + 'msg' => $msg, + 'name' => $name, + 'crDate' => $crDate, + 'exDate' => $exDate + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * domainRenew + */ + public function domainRenew($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ name }}/'; + $to[] = htmlspecialchars($params['domainname']); + $from[] = '/{{ clTRID }}/'; + $clTRID = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-domain-renew-' . $clTRID); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + $xml = preg_replace($from, $to, ' + + + + + {{ name }} + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $r = $r->response->resData->children('urn:ietf:params:xml:ns:domain-1.0')->infData; + + $expDate = (string)$r->exDate; + $expDate = preg_replace("/^(\d+\-\d+\-\d+)\D.*$/", "$1", $expDate); + $from = $to = array(); + $from[] = '/{{ name }}/'; + $to[] = htmlspecialchars($params['domainname']); + $from[] = '/{{ regperiod }}/'; + $to[] = htmlspecialchars($params['regperiod']); + $from[] = '/{{ expDate }}/'; + $to[] = htmlspecialchars($expDate); + $from[] = '/{{ clTRID }}/'; + $clTRID = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-domain-renew-' . $clTRID); + $xml = preg_replace($from, $to, ' + + + + + {{ name }} + {{ expDate }} + {{ regperiod }} + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + $r = $r->response->resData->children('urn:ietf:params:xml:ns:domain-1.0')->renData; + $name = (string)$r->name; + $exDate = (string)$r->exDate; + + $return = array( + 'code' => $code, + 'msg' => $msg, + 'name' => $name, + 'exDate' => $exDate + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * domainDelete + */ + public function domainDelete($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ name }}/'; + $to[] = htmlspecialchars($params['domainname']); + $from[] = '/{{ clTRID }}/'; + $clTRID = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-domain-delete-' . $clTRID); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + $xml = preg_replace($from, $to, ' + + + + + {{ name }} + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + + $return = array( + 'code' => $code, + 'msg' => $msg + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * domainRestore + */ + public function domainRestore($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ name }}/'; + $to[] = htmlspecialchars($params['domainname']); + $from[] = '/{{ clTRID }}/'; + $clTRID = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-domain-restore-' . $clTRID); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + $xml = preg_replace($from, $to, ' + + + + + {{ name }} + + + + + + + + + {{ clTRID }} + +'); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + + $return = array( + 'code' => $code, + 'msg' => $msg + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * domainReport + */ + public function domainReport($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ name }}/'; + $to[] = htmlspecialchars($params['domainname']); + $from[] = '/{{ clTRID }}/'; + $clTRID = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-domain-report-' . $clTRID); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + $xml = preg_replace($from, $to, ' + + + + + {{ name }} + + + + + + + + Pre-delete registration data goes here. + Both XML and free text are allowed. + Post-restore registration data goes here. + Both XML and free text are allowed. + 2019-10-10T22:00:00.0Z + 2019-10-20T22:00:00.0Z + Registrant error. + This registrar has not restored the + Registered Name in order to assume the rights to use + or sell the Registered Name for itself or for any + third party. + The information in this report is + true to best of this registrars knowledge, and this + registrar acknowledges that intentionally supplying + false information in this report shall constitute an + incurable material breach of the + Registry-Registrar Agreement. + Supporting information goes + here. + + + + + {{ clTRID }} + + '); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + + $return = array( + 'code' => $code, + 'msg' => $msg + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * pollReq + */ + public function pollReq() + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ clTRID }}/'; + $clTRID = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-poll-req-' . $clTRID); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + $xml = preg_replace($from, $to, ' + + + + {{ clTRID }} + + '); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + $messages = (int)($r->response->msgQ->attributes()->count ?? 0); + $last_id = (int)($r->response->msgQ->attributes()->id ?? 0); + $qDate = (string)($r->response->msgQ->qDate ?? ''); + $last_msg = (string)($r->response->msgQ->msg ?? ''); + + $return = array( + 'code' => $code, + 'msg' => $msg, + 'messages' => $messages, + 'last_id' => $last_id, + 'qDate' => $qDate, + 'last_msg' => $last_msg + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + /** + * pollAck + */ + public function pollAck($params = array()) + { + if (!$this->isLoggedIn) { + return array( + 'code' => 2002, + 'msg' => 'Command use error' + ); + } + + $return = array(); + try { + $from = $to = array(); + $from[] = '/{{ message }}/'; + $to[] = htmlspecialchars($params['msgID']); + $from[] = '/{{ clTRID }}/'; + $clTRID = str_replace('.', '', round(microtime(1), 3)); + $to[] = htmlspecialchars($this->prefix . '-poll-ack-' . $clTRID); + $from[] = "/<\w+:\w+>\s*<\/\w+:\w+>\s+/ims"; + $to[] = ''; + $xml = preg_replace($from, $to, ' + + + + {{ clTRID }} + + '); + $r = $this->writeRequest($xml); + $code = (int)$r->response->result->attributes()->code; + $msg = (string)$r->response->result->msg; + + $return = array( + 'code' => $code, + 'msg' => $msg + ); + } catch (\Exception $e) { + $return = array( + 'error' => $e->getMessage() + ); + } + + return $return; + } + + public function _response_log($content) + { + $handle = fopen(dirname(__FILE__) . '/response.log', 'a'); + ob_start(); + echo "\n==================================\n"; + ob_end_clean(); + fwrite($handle, $content); + fclose($handle); + } + + public function _request_log($content) + { + $handle = fopen(dirname(__FILE__) . '/request.log', 'a'); + ob_start(); + echo "\n==================================\n"; + ob_end_clean(); + fwrite($handle, $content); + fclose($handle); + } +}