Skip to content

Commit 59d2066

Browse files
committed
Add glue record validation and update error messages
1 parent 777c3f4 commit 59d2066

1 file changed

Lines changed: 38 additions & 12 deletions

File tree

  • modules/registrars/openprovider/OpenProvider/API

modules/registrars/openprovider/OpenProvider/API/APITools.php

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public static function createNameserversArray($params, $apiHelper = null)
2626
// }
2727

2828
if ($params['test_mode'] == 'on' && $apiHelper != null) {
29-
29+
3030
for ($i = 1; $i <= 5; $i++) {
3131
$ns = $params["ns{$i}"];
3232
if (!$ns) {
@@ -36,6 +36,16 @@ public static function createNameserversArray($params, $apiHelper = null)
3636
$nsName = trim($nsParts[0]);
3737
$nsIp = empty($nsParts[1]) ? null : trim($nsParts[1]);
3838

39+
// Glue records (NS is a child of the domain) require an IP.
40+
// External nameservers must be accepted as-is without IP lookup.
41+
$domainFqdn = strtolower($params['sld'] . '.' . $params['tld']);
42+
$isGlue = str_ends_with(strtolower($nsName), '.' . $domainFqdn);
43+
44+
if (!$isGlue) {
45+
$nameServers[] = new \OpenProvider\API\DomainNameServer(['name' => $nsName]);
46+
continue;
47+
}
48+
3949
//Try to get IP from searchNsRequest in REST API
4050
if (empty($nsIp)) {
4151
$myNameServerList = $apiHelper->getNameserverList($nsName);
@@ -52,9 +62,12 @@ public static function createNameserversArray($params, $apiHelper = null)
5262
$nsIp = gethostbyname($nsName);
5363
if (!filter_var($nsIp, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
5464
$nsIp = "";
55-
throw new \Exception("Invalid nameserver name: {$nsName}");
65+
throw new \Exception(
66+
"Could not resolve IP for glue record nameserver '{$nsName}'. "
67+
. "Please register it in OpenProvider before initiating the transfer."
68+
);
5669
}
57-
}
70+
}
5871

5972
if (!empty($nsIp) && !empty($nsName)) {
6073
$nameServers[] = new \OpenProvider\API\DomainNameServer(array(
@@ -65,13 +78,13 @@ public static function createNameserversArray($params, $apiHelper = null)
6578
}
6679

6780
if (count($nameServers) < 2) {
68-
throw new \Exception('You must enter minimum 2 nameservers');
81+
throw new \Exception('You must provide at least 2 nameservers.');
6982
}
7083

7184
return $nameServers;
7285
}
7386

74-
$invalidNameServer = false;
87+
$invalidGlueNameServers = [];
7588
for ($i = 1; $i <= 5; $i++) {
7689
$ns = $params["ns{$i}"];
7790
if (!$ns) {
@@ -82,6 +95,16 @@ public static function createNameserversArray($params, $apiHelper = null)
8295
$nsName = trim($nsParts[0]);
8396
$nsIp = empty($nsParts[1]) ? null : trim($nsParts[1]);
8497

98+
// Glue records (NS is a child of the domain) require an IP.
99+
// External nameservers must be accepted as-is without IP lookup.
100+
$domainFqdn = strtolower($params['sld'] . '.' . $params['tld']);
101+
$isGlue = str_ends_with(strtolower($nsName), '.' . $domainFqdn);
102+
103+
if (!$isGlue) {
104+
$nameServers[] = new \OpenProvider\API\DomainNameServer(['name' => $nsName]);
105+
continue;
106+
}
107+
85108
if (empty($nsIp)) {
86109
$api = new \OpenProvider\API\API();
87110
$api->setParams($params);
@@ -99,8 +122,8 @@ public static function createNameserversArray($params, $apiHelper = null)
99122
$nsIp = gethostbyname($nsName);
100123
if (!filter_var($nsIp, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
101124
$nsIp = "";
102-
$invalidNameServer = true;
103-
logModuleCall('openprovider', 'createNameserversArray', $nsName, "Invalid nameserver name: {$nsName}", null, null);
125+
$invalidGlueNameServers[] = $nsName;
126+
logModuleCall('openprovider', 'createNameserversArray', $nsName, "Could not resolve IP for glue record nameserver: {$nsName}", null, null);
104127
}
105128
}
106129

@@ -113,11 +136,14 @@ public static function createNameserversArray($params, $apiHelper = null)
113136
}
114137

115138
if (count($nameServers) < 2) {
116-
if($invalidNameServer) {
117-
throw new \Exception('You must enter minimum 2 nameservers. Invalid nameserver found. Please check the module log.');
118-
}else{
119-
throw new \Exception('You must enter minimum 2 nameservers');
120-
}
139+
if (!empty($invalidGlueNameServers)) {
140+
$names = implode(', ', $invalidGlueNameServers);
141+
throw new \Exception(
142+
"Could not resolve IP for glue record nameserver(s): {$names}. "
143+
. "Please register them in OpenProvider before initiating the transfer."
144+
);
145+
}
146+
throw new \Exception('You must provide at least 2 nameservers.');
121147
}
122148

123149
return $nameServers;

0 commit comments

Comments
 (0)