diff --git a/modules/registrars/cozaepp/cozaepp.php b/modules/registrars/cozaepp/cozaepp.php index 1abd47d616efb5b437eddc0f5e5b9285206a5825..d33c3b2999899e8d59ba5fb1b33b117c1617fda8 100644 --- a/modules/registrars/cozaepp/cozaepp.php +++ b/modules/registrars/cozaepp/cozaepp.php @@ -279,6 +279,75 @@ function cozaepp_SaveRegistrarLock($params) { return $values; } +# Function to retrieve an available contact id +function _cozaepp_CheckContact($prehash) { + $prehash = $prehash . time() . rand(0, 1000000); + $contactid = substr(md5($prehash), 0,15); + + # Get client instance and check for available contact id + try { + $client = _cozaepp_Client(); + + $contactAvailable = 0; + $count = 0; + + while ($contactAvailable == 0) { + + # Check if contact exists + $request = $client->request($xml = ' + <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"> + <command> + <check> + <contact:check + xmlns:contact="urn:ietf:params:xml:ns:contact-1.0"> + <contact:id>'.$contactid.'</contact:id> + </contact:check> + </check> + </command> + </epp> + '); + + # Parse XML result + $doc= new DOMDocument(); + $doc->loadXML($request); + logModuleCall('Cozaepp', 'RegisterDomain:CheckContact', $xml, $request); + + # Pull off status + $coderes = $doc->getElementsByTagName('result')->item(0)->getAttribute('code'); + $contactAvailable = $doc->getElementsByTagName('id')->item(0)->getAttribute('avail'); + $msg = $doc->getElementsByTagName('msg')->item(0)->nodeValue; + if($coderes == '1000') { + $values['contact'] = 'Contact Created'; + } else if($coderes == '2302') { + $values['contact'] = 'Contact Already exists'; + } else { + $values["error"] = "RegisterDomain/contact-check($contactid): Code ($coderes) $msg"; + return $values; + } + + $values["status"] = $msg; + + # if contact still isn't available attempt to add a random time again rehash and return + if ($contactAvailable == 0) { + $contactAvailable = substr(md5($prehash . time() . rand(0, 1000000) . $count), 0,15); + } + + if ($count >= 10) { + break; + } + + $count++; + } + + return $contactid; + + } catch (Exception $e) { + $values["error"] = 'RegisterDomain/EPP: '.$e->getMessage(); + return $values; + } + +} + # Function to register domain function cozaepp_RegisterDomain($params) { # Grab varaibles @@ -309,7 +378,8 @@ function cozaepp_RegisterDomain($params) { $AdminEmailAddress = $params["adminemail"]; $AdminPhone = $params["adminphonenumber"]; # Our details - $contactid = substr(md5($sld . '.' . $tld), 0,15); + $contactid = _cozaepp_CheckContact($sld . '.' . $tld); + # Generate XML for namseverss if ($nameserver1 = $params["ns1"]) { @@ -482,7 +552,7 @@ function cozaepp_TransferDomain($params) { $AdminEmailAddress = $params["adminemail"]; $AdminPhone = $params["adminphonenumber"]; # Our details - $contactid = substr(md5($sld . '.' . $tld), 0,15); + $contactid = _cozaepp_CheckContact($sld . '.' . $tld); # Get client instance try {