Even more epp server updates

This commit is contained in:
Pinga 2023-08-09 13:20:45 +03:00
parent 0719adc3dc
commit 012f859c09
2 changed files with 120 additions and 40 deletions

View file

@ -635,7 +635,10 @@ class EppWriter {
$writer->writeAttribute('xsi:schemaLocation', 'urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd'); $writer->writeAttribute('xsi:schemaLocation', 'urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd');
foreach ($resp['names'] as $names) { foreach ($resp['names'] as $names) {
$writer->startElement('domain:cd'); $writer->startElement('domain:cd');
$writer->writeElement('domain:name', $names[0], ['avail' => $names[1]]); $writer->startElement('domain:name');
$writer->writeAttribute('avail', $names[1]);
$writer->text($names[0]);
$writer->endElement(); // End of 'domain:name'
if (isset($names[2])) { if (isset($names[2])) {
$writer->writeElement('domain:reason', $names[2]); $writer->writeElement('domain:reason', $names[2]);
} }
@ -676,7 +679,7 @@ class EppWriter {
$writer->writeAttribute('xsi:schemaLocation', 'urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd'); $writer->writeAttribute('xsi:schemaLocation', 'urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd');
$writer->writeElement('domain:name', $resp['name']); $writer->writeElement('domain:name', $resp['name']);
$writer->writeElement('domain:roid', $resp['roid']); $writer->writeElement('domain:roid', $resp['roid']);
foreach ($resp['status'] as $s) { foreach ($resp['status'] as $s) {
if (isset($s[1]) && isset($s[2])) { if (isset($s[1]) && isset($s[2])) {
$writer->writeElement('domain:status', $s[2], ['s' => $s[0], 'lang' => $s[1]]); $writer->writeElement('domain:status', $s[2], ['s' => $s[0], 'lang' => $s[1]]);
} else { } else {
@ -690,20 +693,25 @@ class EppWriter {
$writer->writeElement('domain:registrant', $resp['registrant']); $writer->writeElement('domain:registrant', $resp['registrant']);
} }
foreach ($resp['contact'] as $t) { foreach ($resp['contact'] as $t) {
$writer->writeElement('domain:contact', $t[1], ['type' => $t[0]]); $writer->startElement('domain:contact');
$writer->writeAttribute('type', $t[0]);
$writer->text($t[1]);
$writer->endElement();
} }
if ($resp['return_ns']) { if (isset($resp['hostObj']) && is_array($resp['hostObj'])) {
$writer->startElement('domain:ns'); $writer->startElement('domain:ns');
foreach ($resp['hostObj'] as $n) { foreach ($resp['hostObj'] as $host) {
$writer->writeElement('domain:hostObj', $n); $writer->writeElement('domain:hostObj', (string)$host[0]);
} }
$writer->endElement(); // End of 'domain:ns' $writer->endElement(); // End of 'domain:ns'
} }
if ($resp['return_host']) { if (isset($resp['return_host'])) {
foreach ($resp['host'] as $h) { if ($resp['return_host']) {
$writer->writeElement('domain:host', $h); foreach ($resp['host'] as $h) {
$writer->writeElement('domain:host', $h);
}
} }
} }
$writer->writeElement('domain:clID', $resp['clID']); $writer->writeElement('domain:clID', $resp['clID']);
if (isset($resp['crID'])) { if (isset($resp['crID'])) {
$writer->writeElement('domain:crID', $resp['crID']); $writer->writeElement('domain:crID', $resp['crID']);
@ -737,15 +745,19 @@ class EppWriter {
$writer->endElement(); // End of 'resData' $writer->endElement(); // End of 'resData'
// Handling the extension part // Handling the extension part
$writer->startElement('extension'); // Check if the 'rgpstatus' key is set in $resp
$writer->startElement('rgp:infData'); if (isset($resp['rgpstatus'])) {
$writer->writeAttribute('xmlns:rgp', 'urn:ietf:params:xml:ns:rgp-1.0'); // Handling the extension part
$writer->writeAttribute('xsi:schemaLocation', 'urn:ietf:params:xml:ns:rgp-1.0 rgp-1.0.xsd'); $writer->startElement('extension');
$writer->startElement('rgp:rgpStatus'); $writer->startElement('rgp:infData');
$writer->writeAttribute('s', $resp['rgpstatus']); $writer->writeAttribute('xmlns:rgp', 'urn:ietf:params:xml:ns:rgp-1.0');
$writer->endElement(); // End of 'rgp:rgpStatus' $writer->writeAttribute('xsi:schemaLocation', 'urn:ietf:params:xml:ns:rgp-1.0 rgp-1.0.xsd');
$writer->endElement(); // End of 'rgp:infData' $writer->startElement('rgp:rgpStatus');
$writer->endElement(); // End of 'extension' $writer->writeAttribute('s', $resp['rgpstatus']);
$writer->endElement(); // End of 'rgp:rgpStatus'
$writer->endElement(); // End of 'rgp:infData'
$writer->endElement(); // End of 'extension'
}
} }
$this->_postamble($writer, $resp); $this->_postamble($writer, $resp);

View file

@ -403,24 +403,46 @@ XML;
function processDomainCheck($conn, $db, $xml) { function processDomainCheck($conn, $db, $xml) {
$domains = $xml->command->check->children('urn:ietf:params:xml:ns:domain-1.0')->check->name; $domains = $xml->command->check->children('urn:ietf:params:xml:ns:domain-1.0')->check->name;
$response = '<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"><response><result code="1000"><msg>Command completed successfully</msg></result><resData><domain:chkData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">'; $clTRID = (string) $xml->command->clTRID;
$names = [];
foreach ($domains as $domain) { foreach ($domains as $domain) {
$domainName = (string) $domain; $domainName = (string) $domain;
$availability = $db->query("SELECT name FROM domain WHERE name = '$domainName'")->fetchColumn(); $availability = $db->query("SELECT name FROM domain WHERE name = '$domainName'")->fetchColumn();
$availString = $availability ? 'available' : 'unavailable';
$response .= "<domain:cd><domain:name avail=\"$availability\">$domainName</domain:name></domain:cd>"; // Convert the DB result into a boolean '0' or '1'
$availability = $availability ? '0' : '1';
// Initialize a new domain entry with the domain name and its availability
$domainEntry = [$domainName, $availability];
// If there's a reason for unavailability, add it to the domain entry
if ($availability === '0') {
$domainEntry[] = 'Domain is already registered';
}
// Append this domain entry to names
$names[] = $domainEntry;
} }
$response .= '</domain:chkData></resData></response></epp>'; $response = [
$length = strlen($response) + 4; // Total length including the 4-byte header 'command' => 'check_domain',
$lengthData = pack('N', $length); // Pack the length into 4 bytes 'resultCode' => 1000,
'lang' => 'en-US',
'message' => 'Command completed successfully',
'names' => $names,
'clTRID' => $clTRID,
'svTRID' => generateSvTRID(),
];
$conn->send($lengthData . $response); $epp = new EPP\EppWriter();
$xml = $epp->epp_writer($response);
sendEppResponse($conn, $xml);
} }
function processDomainInfo($conn, $db, $xml) { function processDomainInfo($conn, $db, $xml) {
$domainName = $xml->command->info->children('urn:ietf:params:xml:ns:domain-1.0')->info->name; $domainName = $xml->command->info->children('urn:ietf:params:xml:ns:domain-1.0')->info->name;
$clTRID = (string) $xml->command->clTRID;
// Validation for domain name // Validation for domain name
if (!filter_var($domainName, FILTER_VALIDATE_DOMAIN)) { if (!filter_var($domainName, FILTER_VALIDATE_DOMAIN)) {
@ -439,21 +461,67 @@ function processDomainInfo($conn, $db, $xml) {
return; return;
} }
$response = <<<XML // Fetch contacts
<?xml version="1.0" encoding="UTF-8"?> $stmt = $db->prepare("SELECT * FROM domain_contact_map WHERE domain_id = :id");
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"> $stmt->execute(['id' => $domain['id']]);
<response> $contacts = $stmt->fetchAll(PDO::FETCH_ASSOC);
<result code="1000">
<msg>Domain information retrieved successfully</msg>
</result>
<!-- Add domain details here -->
</response>
</epp>
XML;
$length = strlen($response) + 4; // Total length including the 4-byte header
$lengthData = pack('N', $length); // Pack the length into 4 bytes
$conn->send($lengthData . $response); $transformedContacts = [];
foreach ($contacts as $contact) {
$transformedContacts[] = [$contact['type'], $contact['contact_id']];
}
// Fetch hosts
$stmt = $db->prepare("SELECT * FROM domain_host_map WHERE domain_id = :id");
$stmt->execute(['id' => $domain['id']]);
$hosts = $stmt->fetchAll(PDO::FETCH_ASSOC);
$transformedHosts = [];
foreach ($hosts as $host) {
$transformedHosts[] = [$host['host_id']];
}
// Fetch authInfo
$stmt = $db->prepare("SELECT * FROM domain_authInfo WHERE domain_id = :id");
$stmt->execute(['id' => $domain['id']]);
$authInfo = $stmt->fetch(PDO::FETCH_ASSOC);
// Fetch status
$stmt = $db->prepare("SELECT * FROM domain_status WHERE domain_id = :id");
$stmt->execute(['id' => $domain['id']]);
$statuses = $stmt->fetchAll(PDO::FETCH_ASSOC);
$statusArray = [];
foreach($statuses as $status) {
$statusArray[] = [$status['status']];
}
$response = [
'command' => 'info_domain',
'clTRID' => $clTRID,
'svTRID' => generateSvTRID(),
'resultCode' => 1000,
'msg' => 'Command completed successfully',
'name' => $domain['name'],
'roid' => $domain['id'],
'status' => $statusArray,
'registrant' => $domain['registrant'],
'contact' => $transformedContacts,
'hostObj' => $transformedHosts,
'clID' => $domain['clid'],
'crID' => $domain['crid'],
'crDate' => $domain['crdate'],
'upID' => $domain['upid'],
'upDate' => $domain['update'],
'trDate' => $domain['trdate'],
'authInfo' => 'valid',
'authInfo_type' => $authInfo['authtype'],
'authInfo_val' => $authInfo['authinfo']
];
$epp = new EPP\EppWriter();
$xml = $epp->epp_writer($response);
sendEppResponse($conn, $xml);
} catch (PDOException $e) { } catch (PDOException $e) {
sendEppError($conn, 2400, 'Database error'); sendEppError($conn, 2400, 'Database error');
} }