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');
foreach ($resp['names'] as $names) {
$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])) {
$writer->writeElement('domain:reason', $names[2]);
}
@ -690,18 +693,23 @@ class EppWriter {
$writer->writeElement('domain:registrant', $resp['registrant']);
}
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');
foreach ($resp['hostObj'] as $n) {
$writer->writeElement('domain:hostObj', $n);
foreach ($resp['hostObj'] as $host) {
$writer->writeElement('domain:hostObj', (string)$host[0]);
}
$writer->endElement(); // End of 'domain:ns'
}
if (isset($resp['return_host'])) {
if ($resp['return_host']) {
foreach ($resp['host'] as $h) {
$writer->writeElement('domain:host', $h);
}
}
}
$writer->writeElement('domain:clID', $resp['clID']);
@ -736,6 +744,9 @@ class EppWriter {
$writer->endElement(); // End of 'domain:infData'
$writer->endElement(); // End of 'resData'
// Handling the extension part
// Check if the 'rgpstatus' key is set in $resp
if (isset($resp['rgpstatus'])) {
// Handling the extension part
$writer->startElement('extension');
$writer->startElement('rgp:infData');
@ -747,6 +758,7 @@ class EppWriter {
$writer->endElement(); // End of 'rgp:infData'
$writer->endElement(); // End of 'extension'
}
}
$this->_postamble($writer, $resp);
}

View file

@ -403,24 +403,46 @@ XML;
function processDomainCheck($conn, $db, $xml) {
$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) {
$domainName = (string) $domain;
$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';
}
$response .= '</domain:chkData></resData></response></epp>';
$length = strlen($response) + 4; // Total length including the 4-byte header
$lengthData = pack('N', $length); // Pack the length into 4 bytes
// Append this domain entry to names
$names[] = $domainEntry;
}
$conn->send($lengthData . $response);
$response = [
'command' => 'check_domain',
'resultCode' => 1000,
'lang' => 'en-US',
'message' => 'Command completed successfully',
'names' => $names,
'clTRID' => $clTRID,
'svTRID' => generateSvTRID(),
];
$epp = new EPP\EppWriter();
$xml = $epp->epp_writer($response);
sendEppResponse($conn, $xml);
}
function processDomainInfo($conn, $db, $xml) {
$domainName = $xml->command->info->children('urn:ietf:params:xml:ns:domain-1.0')->info->name;
$clTRID = (string) $xml->command->clTRID;
// Validation for domain name
if (!filter_var($domainName, FILTER_VALIDATE_DOMAIN)) {
@ -439,21 +461,67 @@ function processDomainInfo($conn, $db, $xml) {
return;
}
$response = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<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
// Fetch contacts
$stmt = $db->prepare("SELECT * FROM domain_contact_map WHERE domain_id = :id");
$stmt->execute(['id' => $domain['id']]);
$contacts = $stmt->fetchAll(PDO::FETCH_ASSOC);
$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) {
sendEppError($conn, 2400, 'Database error');
}