mirror of
https://github.com/getnamingo/registry.git
synced 2025-06-26 14:14:41 +02:00
Added launch phase extension in domain check
This commit is contained in:
parent
61be823185
commit
eab0e93417
3 changed files with 245 additions and 73 deletions
|
@ -644,23 +644,76 @@ class EppWriter {
|
||||||
$this->_preamble($writer, $resp);
|
$this->_preamble($writer, $resp);
|
||||||
|
|
||||||
if ($this->epp_success($resp['resultCode'])) {
|
if ($this->epp_success($resp['resultCode'])) {
|
||||||
$writer->startElement('resData');
|
// Begin the extension part if any of the extensions are present
|
||||||
$writer->startElement('domain:chkData');
|
if (isset($resp['launchCheck'])) {
|
||||||
$writer->writeAttribute('xmlns:domain', 'urn:ietf:params:xml:ns:domain-1.0');
|
$writer->startElement('extension');
|
||||||
$writer->writeAttribute('xsi:schemaLocation', 'urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd');
|
|
||||||
foreach ($resp['names'] as $names) {
|
// Handle claims
|
||||||
$writer->startElement('domain:cd');
|
if ($resp['launchCheckType'] === 'claims') {
|
||||||
$writer->startElement('domain:name');
|
$writer->startElement('launch:chkData');
|
||||||
$writer->writeAttribute('avail', $names[1]);
|
$writer->writeAttribute('xmlns:launch', 'urn:ietf:params:xml:ns:launch-1.0');
|
||||||
$writer->text($names[0]);
|
|
||||||
$writer->endElement(); // End of 'domain:name'
|
// launch:phase
|
||||||
if (isset($names[2])) {
|
$writer->writeElement('launch:phase', 'claims');
|
||||||
$writer->writeElement('domain:reason', $names[2]);
|
|
||||||
}
|
foreach ($resp['names'] as $names) {
|
||||||
$writer->endElement(); // End of 'domain:cd'
|
$writer->startElement('launch:cd');
|
||||||
|
$writer->startElement('launch:name');
|
||||||
|
$writer->writeAttribute('exists', $names[1]);
|
||||||
|
$writer->text($names[0]);
|
||||||
|
$writer->endElement(); // End of 'launch:name'
|
||||||
|
if (isset($names[2])) {
|
||||||
|
$writer->startElement('launch:claimKey');
|
||||||
|
$writer->writeAttribute('exists', $names[1]);
|
||||||
|
$writer->text($names[2]);
|
||||||
|
$writer->endElement(); // End of 'launch:claimKey'
|
||||||
|
}
|
||||||
|
$writer->endElement(); // End of 'launch:cd'
|
||||||
|
}
|
||||||
|
|
||||||
|
$writer->endElement(); // End of 'launch:chkData'
|
||||||
|
} else if ($resp['launchCheckType'] === 'trademark') {
|
||||||
|
$writer->startElement('launch:chkData');
|
||||||
|
$writer->writeAttribute('xmlns:launch', 'urn:ietf:params:xml:ns:launch-1.0');
|
||||||
|
|
||||||
|
foreach ($resp['names'] as $names) {
|
||||||
|
$writer->startElement('launch:cd');
|
||||||
|
$writer->startElement('launch:name');
|
||||||
|
$writer->writeAttribute('exists', $names[1]);
|
||||||
|
$writer->text($names[0]);
|
||||||
|
$writer->endElement(); // End of 'launch:name'
|
||||||
|
if (isset($names[2])) {
|
||||||
|
$writer->startElement('launch:claimKey');
|
||||||
|
$writer->writeAttribute('exists', $names[1]);
|
||||||
|
$writer->text($names[2]);
|
||||||
|
$writer->endElement(); // End of 'launch:claimKey'
|
||||||
|
}
|
||||||
|
$writer->endElement(); // End of 'launch:cd'
|
||||||
|
}
|
||||||
|
|
||||||
|
$writer->endElement(); // End of 'launch:chkData'
|
||||||
}
|
}
|
||||||
$writer->endElement(); // End of 'domain:chkData'
|
|
||||||
$writer->endElement(); // End of 'resData'
|
$writer->endElement(); // End of 'extension'
|
||||||
|
} else {
|
||||||
|
$writer->startElement('resData');
|
||||||
|
$writer->startElement('domain:chkData');
|
||||||
|
$writer->writeAttribute('xmlns:domain', 'urn:ietf:params:xml:ns:domain-1.0');
|
||||||
|
$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->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]);
|
||||||
|
}
|
||||||
|
$writer->endElement(); // End of 'domain:cd'
|
||||||
|
}
|
||||||
|
$writer->endElement(); // End of 'domain:chkData'
|
||||||
|
$writer->endElement(); // End of 'resData'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->_postamble($writer, $resp);
|
$this->_postamble($writer, $resp);
|
||||||
|
|
|
@ -109,64 +109,182 @@ function processDomainCheck($conn, $db, $xml, $trans) {
|
||||||
$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;
|
||||||
$clTRID = (string) $xml->command->clTRID;
|
$clTRID = (string) $xml->command->clTRID;
|
||||||
|
|
||||||
$names = [];
|
$extensionNode = $xml->command->extension;
|
||||||
foreach ($domains as $domain) {
|
if (isset($extensionNode)) {
|
||||||
$domainName = (string) $domain;
|
$launch_check = $xml->xpath('//launch:check')[0] ?? null;
|
||||||
|
|
||||||
// Check if the domain is already taken
|
|
||||||
$stmt = $db->prepare("SELECT name FROM domain WHERE name = :domainName");
|
|
||||||
$stmt->bindParam(':domainName', $domainName, PDO::PARAM_STR);
|
|
||||||
$stmt->execute();
|
|
||||||
$taken = $stmt->fetchColumn();
|
|
||||||
$availability = $taken ? '0' : '1';
|
|
||||||
|
|
||||||
// Initialize a new domain entry with the domain name
|
|
||||||
$domainEntry = [$domainName];
|
|
||||||
|
|
||||||
if ($availability === '0') {
|
|
||||||
// Domain is taken
|
|
||||||
$domainEntry[] = 0; // Set status to unavailable
|
|
||||||
$domainEntry[] = 'In use';
|
|
||||||
} else {
|
|
||||||
// Check if the domain is reserved
|
|
||||||
$parts = extractDomainAndTLD($domainName);
|
|
||||||
$label = $parts['domain'];
|
|
||||||
|
|
||||||
$stmt = $db->prepare("SELECT type FROM reserved_domain_names WHERE name = :domainName LIMIT 1");
|
|
||||||
$stmt->bindParam(':domainName', $label, PDO::PARAM_STR);
|
|
||||||
$stmt->execute();
|
|
||||||
$reserved = $stmt->fetchColumn();
|
|
||||||
|
|
||||||
if ($reserved) {
|
|
||||||
$domainEntry[] = 0; // Set status to unavailable
|
|
||||||
$domainEntry[] = ucfirst($reserved); // Capitalize the first letter
|
|
||||||
} else {
|
|
||||||
$invalid_label = validate_label($domainName, $db);
|
|
||||||
|
|
||||||
// Check if the domain is Invalid
|
|
||||||
if ($invalid_label) {
|
|
||||||
$domainEntry[] = 0; // Set status to unavailable
|
|
||||||
$domainEntry[] = ucfirst($invalid_label); // Capitalize the first letter
|
|
||||||
} else {
|
|
||||||
$domainEntry[] = 1; // Domain is available
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Append this domain entry to names
|
|
||||||
$names[] = $domainEntry;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$svTRID = generateSvTRID();
|
if (isset($launch_check)) {
|
||||||
$response = [
|
// Extract the 'type' attribute from <launch:check>
|
||||||
'command' => 'check_domain',
|
$launchCheckType = (string) $xml->xpath('//launch:check/@type')[0];
|
||||||
'resultCode' => 1000,
|
|
||||||
'lang' => 'en-US',
|
// Extract <launch:phase>
|
||||||
'message' => 'Command completed successfully',
|
$launchPhaseText = (string) $xml->xpath('//launch:phase')[0];
|
||||||
'names' => $names,
|
|
||||||
'clTRID' => $clTRID,
|
if ($launchCheckType === 'claims' || $launchCheckType === 'trademark') {
|
||||||
'svTRID' => $svTRID,
|
// Check if the domain has claims
|
||||||
];
|
$names = [];
|
||||||
|
foreach ($domains as $domain) {
|
||||||
|
$domainName = (string) $domain;
|
||||||
|
|
||||||
|
// Initialize a new domain entry with the domain name
|
||||||
|
$domainEntry = [$domainName];
|
||||||
|
|
||||||
|
$parts = extractDomainAndTLD($domainName);
|
||||||
|
$label = $parts['domain'];
|
||||||
|
|
||||||
|
$stmt = $db->prepare("SELECT claim_key FROM tmch_claims WHERE domain_label = :domainName LIMIT 1");
|
||||||
|
$stmt->bindParam(':domainName', $label, PDO::PARAM_STR);
|
||||||
|
$stmt->execute();
|
||||||
|
$claim_key = $stmt->fetchColumn();
|
||||||
|
|
||||||
|
if ($claim_key) {
|
||||||
|
$domainEntry[] = 1;
|
||||||
|
$domainEntry[] = $claim_key;
|
||||||
|
} else {
|
||||||
|
$domainEntry[] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Append this domain entry to names
|
||||||
|
$names[] = $domainEntry;
|
||||||
|
}
|
||||||
|
|
||||||
|
$svTRID = generateSvTRID();
|
||||||
|
$response = [
|
||||||
|
'command' => 'check_domain',
|
||||||
|
'resultCode' => 1000,
|
||||||
|
'lang' => 'en-US',
|
||||||
|
'message' => 'Command completed successfully',
|
||||||
|
'names' => $names,
|
||||||
|
'launchCheck' => 1,
|
||||||
|
'launchCheckType' => 'claims',
|
||||||
|
'clTRID' => $clTRID,
|
||||||
|
'svTRID' => $svTRID,
|
||||||
|
];
|
||||||
|
} else if ($launchCheckType === 'avail') {
|
||||||
|
if ($launchPhaseText === 'custom') {
|
||||||
|
$launchPhaseName = (string) $xml->xpath('//launch:phase/@name')[0];
|
||||||
|
|
||||||
|
$names = [];
|
||||||
|
foreach ($domains as $domain) {
|
||||||
|
$domainName = (string) $domain;
|
||||||
|
|
||||||
|
// Check if the domain is already taken
|
||||||
|
$stmt = $db->prepare("SELECT name FROM domain WHERE name = :domainName");
|
||||||
|
$stmt->bindParam(':domainName', $domainName, PDO::PARAM_STR);
|
||||||
|
$stmt->execute();
|
||||||
|
$taken = $stmt->fetchColumn();
|
||||||
|
$availability = $taken ? '0' : '1';
|
||||||
|
|
||||||
|
// Initialize a new domain entry with the domain name
|
||||||
|
$domainEntry = [$domainName];
|
||||||
|
|
||||||
|
if ($availability === '0') {
|
||||||
|
// Domain is taken
|
||||||
|
$domainEntry[] = 0; // Set status to unavailable
|
||||||
|
$domainEntry[] = 'In use';
|
||||||
|
} else {
|
||||||
|
// Check if the domain is reserved
|
||||||
|
$parts = extractDomainAndTLD($domainName);
|
||||||
|
$label = $parts['domain'];
|
||||||
|
|
||||||
|
$stmt = $db->prepare("SELECT type FROM reserved_domain_names WHERE name = :domainName LIMIT 1");
|
||||||
|
$stmt->bindParam(':domainName', $label, PDO::PARAM_STR);
|
||||||
|
$stmt->execute();
|
||||||
|
$reserved = $stmt->fetchColumn();
|
||||||
|
|
||||||
|
if ($reserved) {
|
||||||
|
$domainEntry[] = 0; // Set status to unavailable
|
||||||
|
$domainEntry[] = ucfirst($reserved); // Capitalize the first letter
|
||||||
|
} else {
|
||||||
|
$invalid_label = validate_label($domainName, $db);
|
||||||
|
|
||||||
|
// Check if the domain is Invalid
|
||||||
|
if ($invalid_label) {
|
||||||
|
$domainEntry[] = 0; // Set status to unavailable
|
||||||
|
$domainEntry[] = ucfirst($invalid_label); // Capitalize the first letter
|
||||||
|
} else {
|
||||||
|
$domainEntry[] = 1; // Domain is available
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Append this domain entry to names
|
||||||
|
$names[] = $domainEntry;
|
||||||
|
}
|
||||||
|
|
||||||
|
$svTRID = generateSvTRID();
|
||||||
|
$response = [
|
||||||
|
'command' => 'check_domain',
|
||||||
|
'resultCode' => 1000,
|
||||||
|
'lang' => 'en-US',
|
||||||
|
'message' => 'Command completed successfully',
|
||||||
|
'names' => $names,
|
||||||
|
'clTRID' => $clTRID,
|
||||||
|
'svTRID' => $svTRID,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$names = [];
|
||||||
|
foreach ($domains as $domain) {
|
||||||
|
$domainName = (string) $domain;
|
||||||
|
|
||||||
|
// Check if the domain is already taken
|
||||||
|
$stmt = $db->prepare("SELECT name FROM domain WHERE name = :domainName");
|
||||||
|
$stmt->bindParam(':domainName', $domainName, PDO::PARAM_STR);
|
||||||
|
$stmt->execute();
|
||||||
|
$taken = $stmt->fetchColumn();
|
||||||
|
$availability = $taken ? '0' : '1';
|
||||||
|
|
||||||
|
// Initialize a new domain entry with the domain name
|
||||||
|
$domainEntry = [$domainName];
|
||||||
|
|
||||||
|
if ($availability === '0') {
|
||||||
|
// Domain is taken
|
||||||
|
$domainEntry[] = 0; // Set status to unavailable
|
||||||
|
$domainEntry[] = 'In use';
|
||||||
|
} else {
|
||||||
|
// Check if the domain is reserved
|
||||||
|
$parts = extractDomainAndTLD($domainName);
|
||||||
|
$label = $parts['domain'];
|
||||||
|
|
||||||
|
$stmt = $db->prepare("SELECT type FROM reserved_domain_names WHERE name = :domainName LIMIT 1");
|
||||||
|
$stmt->bindParam(':domainName', $label, PDO::PARAM_STR);
|
||||||
|
$stmt->execute();
|
||||||
|
$reserved = $stmt->fetchColumn();
|
||||||
|
|
||||||
|
if ($reserved) {
|
||||||
|
$domainEntry[] = 0; // Set status to unavailable
|
||||||
|
$domainEntry[] = ucfirst($reserved); // Capitalize the first letter
|
||||||
|
} else {
|
||||||
|
$invalid_label = validate_label($domainName, $db);
|
||||||
|
|
||||||
|
// Check if the domain is Invalid
|
||||||
|
if ($invalid_label) {
|
||||||
|
$domainEntry[] = 0; // Set status to unavailable
|
||||||
|
$domainEntry[] = ucfirst($invalid_label); // Capitalize the first letter
|
||||||
|
} else {
|
||||||
|
$domainEntry[] = 1; // Domain is available
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Append this domain entry to names
|
||||||
|
$names[] = $domainEntry;
|
||||||
|
}
|
||||||
|
|
||||||
|
$svTRID = generateSvTRID();
|
||||||
|
$response = [
|
||||||
|
'command' => 'check_domain',
|
||||||
|
'resultCode' => 1000,
|
||||||
|
'lang' => 'en-US',
|
||||||
|
'message' => 'Command completed successfully',
|
||||||
|
'names' => $names,
|
||||||
|
'clTRID' => $clTRID,
|
||||||
|
'svTRID' => $svTRID,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
$epp = new EPP\EppWriter();
|
$epp = new EPP\EppWriter();
|
||||||
$xml = $epp->epp_writer($response);
|
$xml = $epp->epp_writer($response);
|
||||||
|
|
|
@ -108,6 +108,7 @@ $server->handle(function (Connection $conn) use ($table, $pool, $c, $log, $permi
|
||||||
$xml->registerXPathNamespace('host', 'urn:ietf:params:xml:ns:host-1.0');
|
$xml->registerXPathNamespace('host', 'urn:ietf:params:xml:ns:host-1.0');
|
||||||
$xml->registerXPathNamespace('rgp', 'urn:ietf:params:xml:ns:rgp-1.0');
|
$xml->registerXPathNamespace('rgp', 'urn:ietf:params:xml:ns:rgp-1.0');
|
||||||
$xml->registerXPathNamespace('secDNS', 'urn:ietf:params:xml:ns:secDNS-1.1');
|
$xml->registerXPathNamespace('secDNS', 'urn:ietf:params:xml:ns:secDNS-1.1');
|
||||||
|
$xml->registerXPathNamespace('launch', 'urn:ietf:params:xml:ns:launch-1.0');
|
||||||
|
|
||||||
if ($xml === false) {
|
if ($xml === false) {
|
||||||
sendEppError($conn, $pdo, 2001, 'Invalid XML');
|
sendEppError($conn, $pdo, 2001, 'Invalid XML');
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue