RDAP conforms February 2024 gTLD RDAP profile

This commit is contained in:
Pinga 2024-10-29 19:47:21 +02:00
parent 95e8fb73a4
commit ef475600b3
2 changed files with 64 additions and 30 deletions

View file

@ -52,7 +52,7 @@ function mapContactToVCard($contactDetails, $role, $c) {
return [ return [
'objectClassName' => 'entity', 'objectClassName' => 'entity',
'handle' => ['C' . $contactDetails['id'] . '-' . $c['roid']], 'handle' => 'C' . $contactDetails['id'] . '-' . $c['roid'],
'roles' => [$role], 'roles' => [$role],
'remarks' => [ 'remarks' => [
[ [
@ -84,18 +84,17 @@ function mapContactToVCard($contactDetails, $role, $c) {
['version', new stdClass(), 'text', '4.0'], ['version', new stdClass(), 'text', '4.0'],
["fn", new stdClass(), 'text', $disclose_name ? $contactDetails['name'] : "REDACTED FOR PRIVACY"], ["fn", new stdClass(), 'text', $disclose_name ? $contactDetails['name'] : "REDACTED FOR PRIVACY"],
["org", new stdClass(), 'text', $disclose_org ? $contactDetails['org'] : "REDACTED FOR PRIVACY"], ["org", new stdClass(), 'text', $disclose_org ? $contactDetails['org'] : "REDACTED FOR PRIVACY"],
["adr", [ ["adr", ["CC" => strtoupper($contactDetails['cc'])], 'text', [ // specify "CC" parameter for country code
"", // Post office box
$disclose_addr ? $contactDetails['street1'] : "REDACTED FOR PRIVACY", // Extended address $disclose_addr ? $contactDetails['street1'] : "REDACTED FOR PRIVACY", // Extended address
$disclose_addr ? $contactDetails['street2'] : "REDACTED FOR PRIVACY", // Street address $disclose_addr ? $contactDetails['street2'] : "REDACTED FOR PRIVACY", // Street address
$disclose_addr ? $contactDetails['street3'] : "REDACTED FOR PRIVACY", // Additional street address $disclose_addr ? $contactDetails['street3'] : "REDACTED FOR PRIVACY", // Additional street address
$disclose_addr ? $contactDetails['city'] : "REDACTED FOR PRIVACY", // Locality $disclose_addr ? $contactDetails['city'] : "REDACTED FOR PRIVACY", // Locality
$disclose_addr ? $contactDetails['sp'] : "REDACTED FOR PRIVACY", // Region $disclose_addr ? $contactDetails['sp'] : "REDACTED FOR PRIVACY", // Region
$disclose_addr ? $contactDetails['pc'] : "REDACTED FOR PRIVACY", // Postal code $disclose_addr ? $contactDetails['pc'] : "REDACTED FOR PRIVACY", // Postal code
$disclose_addr ? strtoupper($contactDetails['cc']) : "REDACTED FOR PRIVACY" // Country name "" // Add empty last element as required for ADR structure
]], ]],
["tel", new stdClass(), 'uri', $disclose_voice ? "tel:" . $contactDetails['voice'] : "REDACTED FOR PRIVACY", ["type" => "voice"]], ["tel", ["type" => "voice"], 'uri', $disclose_voice ? "tel:" . $contactDetails['voice'] : "REDACTED FOR PRIVACY"],
["tel", new stdClass(), 'uri', $disclose_fax ? "tel:" . $contactDetails['fax'] : "REDACTED FOR PRIVACY", ["type" => "fax"]], ["tel", ["type" => "fax"], 'uri', $disclose_fax ? "tel:" . $contactDetails['fax'] : "REDACTED FOR PRIVACY"],
["email", new stdClass(), 'text', $disclose_email ? $contactDetails['email'] : "REDACTED FOR PRIVACY"], ["email", new stdClass(), 'text', $disclose_email ? $contactDetails['email'] : "REDACTED FOR PRIVACY"],
] ]
], ],

View file

@ -334,11 +334,13 @@ function handleDomainQuery($request, $response, $pdo, $domainName, $c, $log) {
"links" => [ "links" => [
[ [
"href" => $c['rdap_url'] . "/help", "href" => $c['rdap_url'] . "/help",
"value" => $c['rdap_url'] . "/help",
"rel" => "self", "rel" => "self",
"type" => "application/rdap+json" "type" => "application/rdap+json"
], ],
[ [
"href" => $c['registry_url'], "href" => $c['registry_url'],
"value" => $c['registry_url'],
"rel" => "alternate", "rel" => "alternate",
"type" => "text/html" "type" => "text/html"
], ],
@ -395,9 +397,9 @@ function handleDomainQuery($request, $response, $pdo, $domainName, $c, $log) {
$statuses = $stmt2->fetchAll(PDO::FETCH_COLUMN, 0); $statuses = $stmt2->fetchAll(PDO::FETCH_COLUMN, 0);
// Add rgpstatus to statuses if it's not empty // Add rgpstatus to statuses if it's not empty
if (!empty($domainDetails['rgpstatus'])) { //if (!empty($domainDetails['rgpstatus'])) {
$statuses[] = $domainDetails['rgpstatus']; //$statuses[] = $domainDetails['rgpstatus'];
} //}
// If statuses array is empty, add 'active' to it // If statuses array is empty, add 'active' to it
if (empty($statuses)) { if (empty($statuses)) {
@ -505,8 +507,8 @@ function handleDomainQuery($request, $response, $pdo, $domainName, $c, $log) {
$rdapResponse = [ $rdapResponse = [
'rdapConformance' => [ 'rdapConformance' => [
'rdap_level_0', 'rdap_level_0',
'icann_rdap_response_profile_0', 'icann_rdap_response_profile_1',
'icann_rdap_technical_implementation_guide_0', 'icann_rdap_technical_implementation_guide_1',
], ],
'objectClassName' => 'domain', 'objectClassName' => 'domain',
'entities' => array_merge( 'entities' => array_merge(
@ -533,6 +535,7 @@ function handleDomainQuery($request, $response, $pdo, $domainName, $c, $log) {
"links" => [ "links" => [
[ [
"href" => $c['rdap_url'] . "/entity/" . ($registrarDetails['iana_id'] ?: $registrarDetails['id']), "href" => $c['rdap_url'] . "/entity/" . ($registrarDetails['iana_id'] ?: $registrarDetails['id']),
"value" => $c['rdap_url'] . "/entity/" . ($registrarDetails['iana_id'] ?: $registrarDetails['id']),
"rel" => "self", "rel" => "self",
"type" => "application/rdap+json" "type" => "application/rdap+json"
] ]
@ -581,11 +584,13 @@ function handleDomainQuery($request, $response, $pdo, $domainName, $c, $log) {
'links' => [ 'links' => [
[ [
'href' => $c['rdap_url'] . '/domain/' . $domain, 'href' => $c['rdap_url'] . '/domain/' . $domain,
'value' => $c['rdap_url'] . '/domain/' . $domain,
'rel' => 'self', 'rel' => 'self',
'type' => 'application/rdap+json', 'type' => 'application/rdap+json',
], ],
[ [
'href' => $registrarDetails['rdap_server'] . 'domain/' . $domain, 'href' => $registrarDetails['rdap_server'] . 'domain/' . $domain,
'value' => $registrarDetails['rdap_server'] . 'domain/' . $domain,
'rel' => 'related', 'rel' => 'related',
'type' => 'application/rdap+json', 'type' => 'application/rdap+json',
] ]
@ -598,6 +603,7 @@ function handleDomainQuery($request, $response, $pdo, $domainName, $c, $log) {
'links' => [ 'links' => [
[ [
'href' => $c['rdap_url'] . '/nameserver/' . $nameserverDetails['name'], 'href' => $c['rdap_url'] . '/nameserver/' . $nameserverDetails['name'],
'value' => $c['rdap_url'] . '/nameserver/' . $nameserverDetails['name'],
'rel' => 'self', 'rel' => 'self',
'type' => 'application/rdap+json', 'type' => 'application/rdap+json',
], ],
@ -608,7 +614,7 @@ function handleDomainQuery($request, $response, $pdo, $domainName, $c, $log) {
"This record contains only a brief summary. To access the full details, please initiate a specific query targeting this entity." "This record contains only a brief summary. To access the full details, please initiate a specific query targeting this entity."
], ],
"title" => "Incomplete Data", "title" => "Incomplete Data",
"type" => "The object's information is incomplete due to reasons not currently understood." "type" => "object truncated due to authorization"
], ],
], ],
]; ];
@ -631,11 +637,13 @@ function handleDomainQuery($request, $response, $pdo, $domainName, $c, $log) {
"links" => [ "links" => [
[ [
"href" => $c['rdap_url'] . "/help", "href" => $c['rdap_url'] . "/help",
"value" => $c['rdap_url'] . "/help",
"rel" => "self", "rel" => "self",
"type" => "application/rdap+json" "type" => "application/rdap+json"
], ],
[ [
"href" => $c['registry_url'], "href" => $c['registry_url'],
"value" => $c['registry_url'],
"rel" => "alternate", "rel" => "alternate",
"type" => "text/html" "type" => "text/html"
], ],
@ -777,11 +785,13 @@ function handleEntityQuery($request, $response, $pdo, $entityHandle, $c, $log) {
"links" => [ "links" => [
[ [
"href" => $c['rdap_url'] . "/help", "href" => $c['rdap_url'] . "/help",
"value" => $c['rdap_url'] . "/help",
"rel" => "self", "rel" => "self",
"type" => "application/rdap+json" "type" => "application/rdap+json"
], ],
[ [
"href" => $c['registry_url'], "href" => $c['registry_url'],
"value" => $c['registry_url'],
"rel" => "alternate", "rel" => "alternate",
"type" => "text/html" "type" => "text/html"
], ],
@ -929,8 +939,8 @@ function handleEntityQuery($request, $response, $pdo, $entityHandle, $c, $log) {
$rdapResponse = [ $rdapResponse = [
'rdapConformance' => [ 'rdapConformance' => [
'rdap_level_0', 'rdap_level_0',
'icann_rdap_response_profile_0', 'icann_rdap_response_profile_1',
'icann_rdap_technical_implementation_guide_0', 'icann_rdap_technical_implementation_guide_1',
], ],
'objectClassName' => 'entity', 'objectClassName' => 'entity',
'entities' => $entityBlocks, 'entities' => $entityBlocks,
@ -981,11 +991,13 @@ function handleEntityQuery($request, $response, $pdo, $entityHandle, $c, $log) {
"links" => [ "links" => [
[ [
"href" => $c['rdap_url'] . "/help", "href" => $c['rdap_url'] . "/help",
"value" => $c['rdap_url'] . "/help",
"rel" => "self", "rel" => "self",
"type" => "application/rdap+json" "type" => "application/rdap+json"
], ],
[ [
"href" => $c['registry_url'], "href" => $c['registry_url'],
"value" => $c['registry_url'],
"rel" => "alternate", "rel" => "alternate",
"type" => "text/html" "type" => "text/html"
], ],
@ -1165,11 +1177,13 @@ function handleNameserverQuery($request, $response, $pdo, $nameserverHandle, $c,
"links" => [ "links" => [
[ [
"href" => $c['rdap_url'] . "/help", "href" => $c['rdap_url'] . "/help",
"value" => $c['rdap_url'] . "/help",
"rel" => "self", "rel" => "self",
"type" => "application/rdap+json" "type" => "application/rdap+json"
], ],
[ [
"href" => $c['registry_url'], "href" => $c['registry_url'],
"value" => $c['registry_url'],
"rel" => "alternate", "rel" => "alternate",
"type" => "text/html" "type" => "text/html"
], ],
@ -1277,8 +1291,8 @@ function handleNameserverQuery($request, $response, $pdo, $nameserverHandle, $c,
$rdapResponse = [ $rdapResponse = [
'rdapConformance' => [ 'rdapConformance' => [
'rdap_level_0', 'rdap_level_0',
'icann_rdap_response_profile_0', 'icann_rdap_response_profile_1',
'icann_rdap_technical_implementation_guide_0', 'icann_rdap_technical_implementation_guide_1',
], ],
'objectClassName' => 'nameserver', 'objectClassName' => 'nameserver',
'entities' => array_merge( 'entities' => array_merge(
@ -1305,6 +1319,7 @@ function handleNameserverQuery($request, $response, $pdo, $nameserverHandle, $c,
"links" => [ "links" => [
[ [
"href" => $c['rdap_url'] . "/entity/" . ($registrarDetails['iana_id'] ?: $registrarDetails['id']), "href" => $c['rdap_url'] . "/entity/" . ($registrarDetails['iana_id'] ?: $registrarDetails['id']),
"value" => $c['rdap_url'] . "/entity/" . ($registrarDetails['iana_id'] ?: $registrarDetails['id']),
"rel" => "self", "rel" => "self",
"type" => "application/rdap+json" "type" => "application/rdap+json"
] ]
@ -1358,11 +1373,13 @@ function handleNameserverQuery($request, $response, $pdo, $nameserverHandle, $c,
"links" => [ "links" => [
[ [
"href" => $c['rdap_url'] . "/help", "href" => $c['rdap_url'] . "/help",
"value" => $c['rdap_url'] . "/help",
"rel" => "self", "rel" => "self",
"type" => "application/rdap+json" "type" => "application/rdap+json"
], ],
[ [
"href" => $c['registry_url'], "href" => $c['registry_url'],
"value" => $c['registry_url'],
"rel" => "alternate", "rel" => "alternate",
"type" => "text/html" "type" => "text/html"
], ],
@ -1653,11 +1670,13 @@ function handleDomainSearchQuery($request, $response, $pdo, $searchPattern, $c,
"links" => [ "links" => [
[ [
"href" => $c['rdap_url'] . "/help", "href" => $c['rdap_url'] . "/help",
"value" => $c['rdap_url'] . "/help",
"rel" => "self", "rel" => "self",
"type" => "application/rdap+json" "type" => "application/rdap+json"
], ],
[ [
"href" => $c['registry_url'], "href" => $c['registry_url'],
"value" => $c['registry_url'],
"rel" => "alternate", "rel" => "alternate",
"type" => "text/html" "type" => "text/html"
], ],
@ -1714,9 +1733,9 @@ function handleDomainSearchQuery($request, $response, $pdo, $searchPattern, $c,
$statuses = $stmt2->fetchAll(PDO::FETCH_COLUMN, 0); $statuses = $stmt2->fetchAll(PDO::FETCH_COLUMN, 0);
// Add rgpstatus to statuses if it's not empty // Add rgpstatus to statuses if it's not empty
if (!empty($domainDetails['rgpstatus'])) { //if (!empty($domainDetails['rgpstatus'])) {
$statuses[] = $domainDetails['rgpstatus']; //$statuses[] = $domainDetails['rgpstatus'];
} //}
// If statuses array is empty, add 'active' to it // If statuses array is empty, add 'active' to it
if (empty($statuses)) { if (empty($statuses)) {
@ -1824,8 +1843,8 @@ function handleDomainSearchQuery($request, $response, $pdo, $searchPattern, $c,
$rdapResponse = [ $rdapResponse = [
'rdapConformance' => [ 'rdapConformance' => [
'rdap_level_0', 'rdap_level_0',
'icann_rdap_response_profile_0', 'icann_rdap_response_profile_1',
'icann_rdap_technical_implementation_guide_0', 'icann_rdap_technical_implementation_guide_1',
], ],
'domainSearchResults' => [ 'domainSearchResults' => [
[ [
@ -1854,6 +1873,7 @@ function handleDomainSearchQuery($request, $response, $pdo, $searchPattern, $c,
"links" => [ "links" => [
[ [
"href" => $c['rdap_url'] . "/entity/" . ($registrarDetails['iana_id'] ?: $registrarDetails['id']), "href" => $c['rdap_url'] . "/entity/" . ($registrarDetails['iana_id'] ?: $registrarDetails['id']),
"value" => $c['rdap_url'] . "/entity/" . ($registrarDetails['iana_id'] ?: $registrarDetails['id']),
"rel" => "self", "rel" => "self",
"type" => "application/rdap+json" "type" => "application/rdap+json"
] ]
@ -1927,7 +1947,7 @@ function handleDomainSearchQuery($request, $response, $pdo, $searchPattern, $c,
"This record contains only a brief summary. To access the full details, please initiate a specific query targeting this entity." "This record contains only a brief summary. To access the full details, please initiate a specific query targeting this entity."
], ],
"title" => "Incomplete Data", "title" => "Incomplete Data",
"type" => "The object's information is incomplete due to reasons not currently understood." "type" => "object truncated due to authorization"
], ],
], ],
]; ];
@ -1952,11 +1972,13 @@ function handleDomainSearchQuery($request, $response, $pdo, $searchPattern, $c,
"links" => [ "links" => [
[ [
"href" => $c['rdap_url'] . "/help", "href" => $c['rdap_url'] . "/help",
"value" => $c['rdap_url'] . "/help",
"rel" => "self", "rel" => "self",
"type" => "application/rdap+json" "type" => "application/rdap+json"
], ],
[ [
"href" => $c['registry_url'], "href" => $c['registry_url'],
"value" => $c['registry_url'],
"rel" => "alternate", "rel" => "alternate",
"type" => "text/html" "type" => "text/html"
], ],
@ -2177,11 +2199,13 @@ function handleNameserverSearchQuery($request, $response, $pdo, $searchPattern,
"links" => [ "links" => [
[ [
"href" => $c['rdap_url'] . "/help", "href" => $c['rdap_url'] . "/help",
"value" => $c['rdap_url'] . "/help",
"rel" => "self", "rel" => "self",
"type" => "application/rdap+json" "type" => "application/rdap+json"
], ],
[ [
"href" => $c['registry_url'], "href" => $c['registry_url'],
"value" => $c['registry_url'],
"rel" => "alternate", "rel" => "alternate",
"type" => "text/html" "type" => "text/html"
], ],
@ -2303,8 +2327,8 @@ function handleNameserverSearchQuery($request, $response, $pdo, $searchPattern,
$rdapResponse = [ $rdapResponse = [
'rdapConformance' => [ 'rdapConformance' => [
'rdap_level_0', 'rdap_level_0',
'icann_rdap_response_profile_0', 'icann_rdap_response_profile_1',
'icann_rdap_technical_implementation_guide_0', 'icann_rdap_technical_implementation_guide_1',
], ],
'nameserverSearchResults' => $rdapResult, 'nameserverSearchResults' => $rdapResult,
"notices" => [ "notices" => [
@ -2320,11 +2344,13 @@ function handleNameserverSearchQuery($request, $response, $pdo, $searchPattern,
"links" => [ "links" => [
[ [
"href" => $c['rdap_url'] . "/help", "href" => $c['rdap_url'] . "/help",
"value" => $c['rdap_url'] . "/help",
"rel" => "self", "rel" => "self",
"type" => "application/rdap+json" "type" => "application/rdap+json"
], ],
[ [
"href" => $c['registry_url'], "href" => $c['registry_url'],
"value" => $c['registry_url'],
"rel" => "alternate", "rel" => "alternate",
"type" => "text/html" "type" => "text/html"
], ],
@ -2428,8 +2454,8 @@ function handleNameserverSearchQuery($request, $response, $pdo, $searchPattern,
$rdapResponse = [ $rdapResponse = [
'rdapConformance' => [ 'rdapConformance' => [
'rdap_level_0', 'rdap_level_0',
'icann_rdap_response_profile_0', 'icann_rdap_response_profile_1',
'icann_rdap_technical_implementation_guide_0', 'icann_rdap_technical_implementation_guide_1',
], ],
'nameserverSearchResults' => [ 'nameserverSearchResults' => [
[ [
@ -2458,6 +2484,7 @@ function handleNameserverSearchQuery($request, $response, $pdo, $searchPattern,
"links" => [ "links" => [
[ [
"href" => $c['rdap_url'] . "/entity/" . ($registrarDetails['iana_id'] ?: $registrarDetails['id']), "href" => $c['rdap_url'] . "/entity/" . ($registrarDetails['iana_id'] ?: $registrarDetails['id']),
"value" => $c['rdap_url'] . "/entity/" . ($registrarDetails['iana_id'] ?: $registrarDetails['id']),
"rel" => "self", "rel" => "self",
"type" => "application/rdap+json" "type" => "application/rdap+json"
] ]
@ -2513,11 +2540,13 @@ function handleNameserverSearchQuery($request, $response, $pdo, $searchPattern,
"links" => [ "links" => [
[ [
"href" => $c['rdap_url'] . "/help", "href" => $c['rdap_url'] . "/help",
"value" => $c['rdap_url'] . "/help",
"rel" => "self", "rel" => "self",
"type" => "application/rdap+json" "type" => "application/rdap+json"
], ],
[ [
"href" => $c['registry_url'], "href" => $c['registry_url'],
"value" => $c['registry_url'],
"rel" => "alternate", "rel" => "alternate",
"type" => "text/html" "type" => "text/html"
], ],
@ -2701,11 +2730,13 @@ function handleEntitySearchQuery($request, $response, $pdo, $searchPattern, $c,
"links" => [ "links" => [
[ [
"href" => $c['rdap_url'] . "/help", "href" => $c['rdap_url'] . "/help",
"value" => $c['rdap_url'] . "/help",
"rel" => "self", "rel" => "self",
"type" => "application/rdap+json" "type" => "application/rdap+json"
], ],
[ [
"href" => $c['registry_url'], "href" => $c['registry_url'],
"value" => $c['registry_url'],
"rel" => "alternate", "rel" => "alternate",
"type" => "text/html" "type" => "text/html"
], ],
@ -2805,8 +2836,8 @@ function handleEntitySearchQuery($request, $response, $pdo, $searchPattern, $c,
$rdapResponse = [ $rdapResponse = [
'rdapConformance' => [ 'rdapConformance' => [
'rdap_level_0', 'rdap_level_0',
'icann_rdap_response_profile_0', 'icann_rdap_response_profile_1',
'icann_rdap_technical_implementation_guide_0', 'icann_rdap_technical_implementation_guide_1',
], ],
'entitySearchResults' => [ 'entitySearchResults' => [
[ [
@ -2861,11 +2892,13 @@ function handleEntitySearchQuery($request, $response, $pdo, $searchPattern, $c,
"links" => [ "links" => [
[ [
"href" => $c['rdap_url'] . "/help", "href" => $c['rdap_url'] . "/help",
"value" => $c['rdap_url'] . "/help",
"rel" => "self", "rel" => "self",
"type" => "application/rdap+json" "type" => "application/rdap+json"
], ],
[ [
"href" => $c['registry_url'], "href" => $c['registry_url'],
"value" => $c['registry_url'],
"rel" => "alternate", "rel" => "alternate",
"type" => "text/html" "type" => "text/html"
], ],
@ -2949,8 +2982,8 @@ function handleHelpQuery($request, $response, $pdo, $c) {
// Set the RDAP conformance levels // Set the RDAP conformance levels
$rdapConformance = [ $rdapConformance = [
"rdap_level_0", "rdap_level_0",
"icann_rdap_response_profile_0", "icann_rdap_response_profile_1",
"icann_rdap_technical_implementation_guide_0" "icann_rdap_technical_implementation_guide_1"
]; ];
// Set the descriptions and links for the help section // Set the descriptions and links for the help section
@ -2996,11 +3029,13 @@ function handleHelpQuery($request, $response, $pdo, $c) {
"links" => [ "links" => [
[ [
"href" => $c['rdap_url'] . "/help", "href" => $c['rdap_url'] . "/help",
"value" => $c['rdap_url'] . "/help",
"rel" => "self", "rel" => "self",
"type" => "application/rdap+json" "type" => "application/rdap+json"
], ],
[ [
"href" => $c['registry_url'], "href" => $c['registry_url'],
"value" => $c['registry_url'],
"rel" => "alternate", "rel" => "alternate",
"type" => "text/html" "type" => "text/html"
], ],