Änderungen

Wechseln zu: Navigation, Suche

Domain-Registrar-Module erstellen

18.395 Byte hinzugefügt, 22:03, 12. Okt. 2018
== Grundaufbau ==..Sie können an sourceDESK eigene Domain-Registrare anbinden, um [[Domains]] über diese zu registrieren und zu verwalten.
== Methoden Dateistruktur ==Ein Registrar-Modul bekommt ein eigenes Verzeichnis unter ''modules/domain''.In diesem Verzeichnis muss sich eine PHP-Datei mit dem gleichen Namen wie das Verzeichnis und der Endung ''.php'' befinden.In dieser PHP-Datei wird eine Klasse definiert, die von der Klasse ''DomainRegistrar'' erbt. == Attribute ==Es werden mehrere Attribute innerhalb der erstellten Klasse benötigt, die höchstens ''protected'' sein dürfen: * ''$name'' gibt einen Anzeigenamen für das Modul an* ''$short'' gibt den Kurznamen des Moduls an, das entspricht dem Verzeichnis- bzw. Dateinamen* ''$version'' gibt die Versionsnummer des Moduls an == Einstellungen ==Sie können über die Methode ''getSettings()'' definieren, welche Einstellungen der Administrator für das Modul durchführen können soll. Ein Beispiel: <source lang="php">public function getSettings() { return Array( "api_url" => Array("type" => "text", "name" => "API-URL", "default" => "https://gateway.autodns.com"), "api_user" => Array("type" => "text", "name" => "API-Benutzer"), "api_password" => Array("type" => "password", "name" => "API-Passwort"), );}</source> Auf die definierten Einstellungen können Sie innerhalb der Modul-Klasse bspw. mit dem Aufruf ''$this->options->api_url'' zugreifen. == Domain-Verfügbarkeit ==Über die Methode <code>availibilityStatus($domain)</code> wird die Verfügbarkeit der Domain <code>$domain</code> geprüft. Folgende Rückgabewerte sind möglich: * <code>true</code>, wenn die Domain verfügbar ist* <code>false</code>, wenn die Domain bereits registriert ist* <code>null</code>, falls die Domain nicht geprüft werden konnte / nicht registriert werden kann == Domain registrieren / transferieren ==Die Registrierung erfolgt über die Methode <code>registerDomain($domain, $owner, $admin, $tech, $zone, $ns, $privacy = false)</code>. Die Signatur der Methode zum Transfer lautet <code>transferDomain($domain, $owner, $admin, $tech, $zone, $authCode, $ns, $privacy = false)</code>. Die Belegung der Variablen: * <code>$domain</code> - der Domain-Name* <code>$owner, $admin, $tech, $zone</code> - Handle-Daten als Array** Vorname** Nachname** Firma** Straße** Land** Postleitzahl** Stadt** Telefon** Telefax** E-Mail** Notizen* <code>$authCode</code> - Auth-Code (nur bei Transfer)* <code>$ns</code> - Array mit Nameservern* <code>$privacy</code> - Boolean, der angibt, ob WHOIS-Privacy aktiviert ist Als Rückgabe wird im Erfolgsfall <code>true</code> erwartet, im Fehlerfall eine Fehlermeldung als String. == Nameserver ändern ==Über die Methode <code>changeNameserver($domain, $ns)</code> können die Nameserver der Domain <code>$domain</code> geändert werden. Hierbei wird ein Array mit Nameserver-Hostnamen als <code>$ns</code> übergeben. == Kontakte ändern ==Die Methode <code>changeContact($domain, $owner, $admin, $tech, $zone)</code> ändert die Kontakte der Domain <code>$domain</code>. == Sonderfall: Trade ==Der kostenpflichtige Kontaktwechsel (Trade) wird über die Methode <code>trade($domain, $owner, $admin, $tech, $zone)</code> initiiert. == Authcode abrufen ==Der automatische Abruf des Authcodes erfolgt über die Methode <code>getAuthCode($domain)</code>. Als Rückgabewert ist im Fehlerfall <code>false</code> zulässig, im Erfolgsfall ist der Authcode zurückgegeben, wobei vor diesen <code>AUTH:</code> geschrieben werden muss. == Transfersperre / Verlängerung / WHOIS-Privacy ==Das Setzen der Transfersperre, von Verlängerungsoptionen und WHOIS-Privacy erfolgt über die Methode <code>changeValues($domain, $status = false, $renew = true, $privacy = false)</code>. Dabei stellen die drei Booleans folgende Werte dar: * <code>$status</code> aktiviert die Transfersperre* <code>$renew</code> aktiviert die automatische Verlängerung* <code>$privacy</code> aktiviert WHOIS-Privacy == Domain löschen / in den Transit geben ==Um eine Domain zu löschen oder in den Transit zu geben, nutzen Sie die Methode <code>deleteDomain($domain, $transit = 0)</code>. Hierbei ist die Belegung von <code>$transit</code> wie folgt möglich: * <code>0</code> - Domain löschen* <code>1</code> - Konnektierter Transit* <code>2</code> - Dekonnektierter Transit == Domain-Synchronisation ==Domains werden periodisch synchronisiert, dazu wird die Methode <code>syncDomain($domain, $kkSync = false)</code> aufgerufen. Ist <code>$kkSync</code> auf <code>true</code> gesetzt, befindet sich die Domain noch im Transfer-Status. Sofern die Domain noch nicht transferiert wurde, ist <code>Array("status" => "waiting_kk")</code> zurückzugegeben. Die erwartete Rückgabe für eine registrierte Domain ist ein Array mit den folgenden Schlüsseln: * <code>auto_renew</code> - Boolean, der den Status der automatischen Verlängerung zurückgibt* <code>expiration</code> - Datum des Domainablaufs im Format YYYY-MM-DD* <code>status</code> - Boolean, der den Status der Domain (aktiv/nicht aktiv) zurückgibt* <code>transfer_lock</code> - Boolean, der angibt, ob die Transfer-Sperre aktiviert ist* <code>privacy</code> - Boolean, der den Status der WHOIS-Privacy angibt == Beispiel-Code ==<source lang="php"><?php class InterNetWorX extends DomainRegistrar { protected $short = "inwx"; protected $name = "InterNetWorX"; protected $version = "1.0";  public function getSettings() { return Array( "api_user" => Array("type" => "text", "name" => "Benutzername"), "api_password" => Array("type" => "password", "name" => "Passwort"), ); }  public function availibilityStatus($domain) { if (!function_exists('xmlrpc_encode_request')) { return null; }  require_once __DIR__ . "/domrobot.class.php"; $addr = "https://api.domrobot.com/xmlrpc/"; $domrobot = new domrobot($addr); $domrobot->setDebug(false); $domrobot->setLanguage('en'); $res = $domrobot->login($this->options->api_user, $this->options->api_password);  if ($res['code'] == "1000") { $res = $domrobot->call("domain", "check", Array("domain" => $domain), $this); }  if (!isset($res['resData']['domain'][0]['avail']) || $res['resData']['domain'][0]['avail'] === null) { return null; }  $domrobot->logout();  return (bool) $res['resData']['domain'][0]['avail']; }  public function registerDomain($domain, $owner, $admin, $tech, $zone, $ns, $privacy = false) { require_once __DIR__ . "/domrobot.class.php"; $addr = "https://api.domrobot.com/xmlrpc/"; $domrobot = new domrobot($addr); $domrobot->setDebug(false); $domrobot->setLanguage('en'); $res = $domrobot->login($this->options->api_user, $this->options->api_password);  if ($res['code'] != "1000") { return $res; }  $arr = Array("owner", "admin", "tech", "zone");  foreach ($arr as $t) { $i = $$t;  $i[7] = str_replace(Array(" ", "-", "/"), "", $i[7]); $i[8] = str_replace(Array(" ", "-", "/"), "", $i[8]);  $res = $domrobot->call("contact", "create", Array( "type" => empty($i[2]) ? "PERSON" : "ORG", "name" => $i[0] . " " . $i[1], "org" => $i[2], "street" => str_replace(Array("ä", "ö", "ü", "ß", "Ä", "Ö", "Ü"), Array("ae", "oe", "ue", "ss", "Ae", "Oe", "Ue"), $i[3]), "city" => $i[6], "pc" => $i[5], "cc" => $i[4], "voice" => $i[7], "fax" => $i[8], "email" => $i[9], ), $this, $domain);  if ($res['code'] != "1000") { return $res; }  $$t = $res['resData']['id']; }  $res = $domrobot->call("domain", "create", Array( "domain" => $domain, "registrant" => $owner, "admin" => $admin, "tech" => $tech, "billing" => $zone, "ns" => $ns, "renewalMode" => "AUTOEXPIRE", ), $this);  if ($res['code'] != "1000" && $res['code'] != "1001") { return $res; }  $domrobot->logout(); return true; }  public function transferDomain($domain, $owner, $admin, $tech, $zone, $authCode, $ns, $privacy = false) { require_once __DIR__ . "/domrobot.class.php"; $addr = "https://api.domrobot.com/xmlrpc/"; $domrobot = new domrobot($addr); $domrobot->setDebug(false); $domrobot->setLanguage('en'); $res = $domrobot->login($this->options->api_user, $this->options->api_password);  if ($res['code'] != "1000") { return $res; }  $arr = Array("owner", "admin", "tech", "zone");  foreach ($arr as $t) { $i = $$t;  $i[7] = str_replace(Array(" ", "-", "/"), "", $i[7]); $i[8] = str_replace(Array(" ", "-", "/"), "", $i[8]);  $res = $domrobot->call("contact", "create", Array( "type" => empty($i[2]) ? "PERSON" : "ORG", "name" => $i[0] . " " . $i[1], "org" => $i[2], "street" => str_replace(Array("ä", "ö", "ü", "ß", "Ä", "Ö", "Ü"), Array("ae", "oe", "ue", "ss", "Ae", "Oe", "Ue"), $i[3]), "city" => $i[6], "pc" => $i[5], "cc" => $i[4], "voice" => $i[7], "fax" => $i[8], "email" => $i[9], ), $this, $domain);  if ($res['code'] != "1000") { return $res; }  $$t = $res['resData']['id']; }  $res = $domrobot->call("domain", "transfer", Array( "domain" => $domain, "registrant" => $owner, "admin" => $admin, "tech" => $tech, "billing" => $zone, "ns" => $ns, "renewalMode" => "AUTOEXPIRE", "authCode" => $authCode, ), $this);  if ($res['code'] != "1000" && $res['code'] != "1001") { return $res; }  $domrobot->logout(); return true; }  public function deleteDomain($domain, $transit = 0) { require_once __DIR__ . "/domrobot.class.php"; $addr = "https://api.domrobot.com/xmlrpc/"; $domrobot = new domrobot($addr); $domrobot->setDebug(false); $domrobot->setLanguage('en'); $res = $domrobot->login($this->options->api_user, $this->options->api_password);  if ($res['code'] != "1000") { return false; }  if ($transit == 0) { $res = $domrobot->call("domain", "delete", Array( "domain" => $domain, ), $this); } else { $res = $domrobot->call("domain", "push", Array( "domain" => $domain, ), $this); }  if ($res['code'] != "1000" && $res['code'] != "1001") { return false; }  return true; }  public function getAuthCode($domain) { require_once __DIR__ . "/domrobot.class.php"; $addr = "https://api.domrobot.com/xmlrpc/"; $domrobot = new domrobot($addr); $domrobot->setDebug(false); $domrobot->setLanguage('en'); $res = $domrobot->login($this->options->api_user, $this->options->api_password);  if ($res['code'] != "1000") { return false; }  $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; $count = mb_strlen($chars); for ($i = 0, $pwd = ''; $i < 12; $i++) { $index = rand(0, $count - 1); $pwd .= mb_substr($chars, $index, 1); }  $res = $domrobot->call("domain", "update", Array( "domain" => $domain, "authCode" => $pwd, ), $this);  if ($res['code'] != "1000" && $res['code'] != "1001") { return false; }  return "AUTH:" . $pwd; }  public function changeNameserver($domain, $ns) { require_once __DIR__ . "/domrobot.class.php"; $addr = "https://api.domrobot.com/xmlrpc/"; $domrobot = new domrobot($addr); $domrobot->setDebug(false); $domrobot->setLanguage('en'); $res = $domrobot->login($this->options->api_user, $this->options->api_password);  if ($res['code'] != "1000") { return false; }  $res = $domrobot->call("domain", "update", Array( "domain" => $domain, "ns" => $ns, ), $this);  if ($res['code'] != "1000" && $res['code'] != "1001") { return false; }  return true; }  public function changeContact($domain, $owner, $admin, $tech, $zone) { require_once __DIR__ . "/domrobot.class.php"; $addr = "https://api.domrobot.com/xmlrpc/"; $domrobot = new domrobot($addr); $domrobot->setDebug(false); $domrobot->setLanguage('en'); $res = $domrobot->login($this->options->api_user, $this->options->api_password);  if ($res['code'] != "1000") { return false; }  $arr = Array("owner", "admin", "tech", "zone");  foreach ($arr as $t) { $i = $$t;  $i[7] = str_replace(Array(" ", "-", "/"), "", $i[7]); $i[8] = str_replace(Array(" ", "-", "/"), "", $i[8]);  $res = $domrobot->call("contact", "create", Array( "type" => empty($i[2]) ? "PERSON" : "ORG", "name" => $i[0] . " " . $i[1], "org" => $i[2], "street" => str_replace(Array("ä", "ö", "ü", "ß", "Ä", "Ö", "Ü"), Array("ae", "oe", "ue", "ss", "Ae", "Oe", "Ue"), $i[3]), "city" => $i[6], "pc" => $i[5], "cc" => $i[4], "voice" => $i[7], "fax" => $i[8], "email" => $i[9], ), $this, $domain);  if ($res['code'] != "1000") { return false; }  $$t = $res['resData']['id']; }  $res = $domrobot->call("domain", "update", Array( "domain" => $domain, "registrant" => $owner, "admin" => $admin, "tech" => $tech, "billing" => $zone, ), $this);  if ($res['code'] != "1000" && $res['code'] != "1001") { return false; }  return true; }  public function setRegLock($domain, $status = false, $error = false) { require_once __DIR__ . "/domrobot.class.php"; $addr = "https://api.domrobot.com/xmlrpc/"; $domrobot = new domrobot($addr); $domrobot->setDebug(false); $domrobot->setLanguage('en'); $res = $domrobot->login($this->options->api_user, $this->options->api_password);  if ($res['code'] != "1000") { return $res; }  $res = $domrobot->call("domain", "update", Array( "domain" => $domain, "transferLock" => $status, ), $this);  if ($res['code'] != "1000" && $res['code'] != "1001") { return $res; }  return true; }  public function changeAll($domain, $owner, $admin, $tech, $zone, $ns, $status = false, $renew = true, $privacy = false) { require_once __DIR__ . "/domrobot.class.php"; $addr = "https://api.domrobot.com/xmlrpc/"; $domrobot = new domrobot($addr); $domrobot->setDebug(false); $domrobot->setLanguage('en'); $res = $domrobot->login($this->options->api_user, $this->options->api_password);  if ($res['code'] != "1000") { return $res; }  $arr = Array("owner", "admin", "tech", "zone");  foreach ($arr as $t) { $i = $$t;  if (count($i) == 0) { $r = $this->syncDomain($domain); if (empty($r) || !is_array($r) || empty($r['ownerc'])) { return false; }  $$t = $r['ownerc']; } else { $i[7] = str_replace(Array(" ", "-", "/"), "", $i[7]); $i[8] = str_replace(Array(" ", "-", "/"), "", $i[8]);  $res = $domrobot->call("contact", "create", Array( "type" => empty($i[2]) ? "PERSON" : "ORG", "name" => $i[0] . " " . $i[1], "org" => $i[2], "street" => str_replace(Array("ä", "ö", "ü", "ß", "Ä", "Ö", "Ü"), Array("ae", "oe", "ue", "ss", "Ae", "Oe", "Ue"), $i[3]), "city" => $i[6], "pc" => $i[5], "cc" => $i[4], "voice" => $i[7], "fax" => $i[8], "email" => $i[9], ), $this, $domain);  if ($res['code'] != "1000") { return $res; }  $$t = $res['resData']['id']; } }  $res = $domrobot->call("domain", "update", Array( "domain" => $domain, "registrant" => $owner, "admin" => $admin, "tech" => $tech, "billing" => $zone, "transferLock" => $status, "renewalMode" => $renew ? "AUTORENEW" : "AUTOEXPIRE", "ns" => $ns, ), $this);  if ($res['code'] != "1000" && $res['code'] != "1001") { return $res; }  return true; }  public function syncDomain($domain, $kkSync = false) { require_once __DIR__ . "/domrobot.class.php"; $addr = "https://api.domrobot.com/xmlrpc/"; $domrobot = new domrobot($addr); $domrobot->setDebug(false); $domrobot->setLanguage('en'); $res = $domrobot->login($this->options->api_user, $this->options->api_password);  if ($res['code'] != "1000") { return "Login failure"; }  $res = $domrobot->call("domain", "info", Array( "domain" => $domain, ), $this);  if ($res['code'] != "1000") { if ($kkSync) { return ["status" => "waiting_kk"]; }  return false; }  return Array( "auto_renew" => $res['resData']['renewalMode'] == "AUTORENEW", "expiration" => date("Y-m-d", $res['resData']['exDate']->timestamp), "status" => $res['resData']['status'] == "OK", "transfer_lock" => (bool) $res['resData']['transferLock'], "ownerc" => $res['resData']['contact']['registrant']['id'], "privacy" => false, ); }  public function trade($domain, $owner, $admin, $tech, $zone) { require_once __DIR__ . "/domrobot.class.php"; $addr = "https://api.domrobot.com/xmlrpc/"; $domrobot = new domrobot($addr); $domrobot->setDebug(false); $domrobot->setLanguage('en'); $res = $domrobot->login($this->options->api_user, $this->options->api_password);  if ($res['code'] != "1000") { return false; }  $arr = Array("owner", "admin", "tech", "zone");  foreach ($arr as $t) { $i = $$t;  $i[7] = str_replace(Array(" ", "-", "/"), "", $i[7]); $i[8] = str_replace(Array(" ", "-", "/"), "", $i[8]);  $res = $domrobot->call("contact", "create", Array( "type" => empty($i[2]) ? "PERSON" : "ORG", "name" => $i[0] . " " . $i[1], "org" => $i[2], "street" => str_replace(Array("ä", "ö", "ü", "ß", "Ä", "Ö", "Ü"), Array("ae", "oe", "ue", "ss", "Ae", "Oe", "Ue"), $i[3]), "city" => $i[6], "pc" => $i[5], "cc" => $i[4], "voice" => $i[7], "fax" => $i[8], "email" => $i[9], ), $this, $domain);  if ($res['code'] != "1000") { return false; }  $$t = $res['resData']['id']; }  $res = $domrobot->call("domain", "trade", Array( "domain" => $domain, "registrant" => $owner, "admin" => $admin, "tech" => $tech, "billing" => $zone, ), $this);  if ($res['code'] != "1000" && $res['code'] != "1001") { return false; }  return true; }  public function changeValues($domain, $status = false, $renew = true, $privacy = false) { require_once __DIR__ . "/domrobot.class.php"; $addr = "https://api.domrobot.com/xmlrpc/"; $domrobot = new domrobot($addr); $domrobot->setDebug(false); $domrobot->setLanguage('en'); $res = $domrobot->login($this->options->api_user, $this->options->api_password);  if ($res['code'] != "1000") { return $res; }  $res = $domrobot->call("domain", "update", Array( "domain" => $domain, "renewalMode" => $renew ? "AUTORENEW" : "AUTOEXPIRE", "transferLock" => $status, ), $this);  if ($res['code'] != "1000" && $res['code'] != "1001") { return $res; }  return true; }}</source>