|
|
|
@ -0,0 +1,140 @@ |
|
|
|
<?php |
|
|
|
|
|
|
|
$args = getopt("", array("action:", "domain:", "token:", "ispconfig_user:", "ispconfig_pass:", "soap_location:", "soap_uri:")); |
|
|
|
|
|
|
|
$action = $args["action"]; |
|
|
|
$fulldomain = $args["domain"]; |
|
|
|
$token = $args["token"]; |
|
|
|
|
|
|
|
$soap_location = $args["soap_location"]; |
|
|
|
$soap_uri = $args["soap_uri"]; |
|
|
|
|
|
|
|
$username = $args["ispconfig_user"]; |
|
|
|
$password = $args["ispconfig_pass"]; |
|
|
|
|
|
|
|
$client = new SoapClient( |
|
|
|
null, |
|
|
|
array( |
|
|
|
'location' => $soap_location, |
|
|
|
'uri' => $soap_uri, |
|
|
|
'trace' => 1, |
|
|
|
'exceptions' => 1, |
|
|
|
'stream_context' => stream_context_create( |
|
|
|
array( |
|
|
|
'ssl' => |
|
|
|
array( |
|
|
|
'verify_peer' => false, |
|
|
|
'verify_peer_name' => false |
|
|
|
) |
|
|
|
) |
|
|
|
) |
|
|
|
) |
|
|
|
); |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
if ($session_id = $client->login($username, $password)) { |
|
|
|
//echo 'Logged in successfully. Session ID:' . $session_id . '<br />';
|
|
|
|
} |
|
|
|
|
|
|
|
// Get all zone
|
|
|
|
$zones = $client->dns_zone_get($session_id, -1); |
|
|
|
|
|
|
|
$zone_id = 0; |
|
|
|
$client_id = 0; |
|
|
|
$server_id = 0; |
|
|
|
|
|
|
|
foreach ($zones as $zone) { |
|
|
|
// Find zone that needs to update
|
|
|
|
if (preg_match("/" . $zone["origin"] . "/", $fulldomain . ".")) { |
|
|
|
$zone_id = $zone["id"]; |
|
|
|
$sys_userid = $zone["sys_userid"]; |
|
|
|
$server_id = $zone["server_id"]; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//Get client id
|
|
|
|
$client_id = $client->client_get_id($session_id, $sys_userid); |
|
|
|
|
|
|
|
if ($client_id == 0) { |
|
|
|
exit; |
|
|
|
} |
|
|
|
|
|
|
|
// Get all domain records of type txt
|
|
|
|
// Bug it retrieves all domain records
|
|
|
|
$dns_records = $client->dns_txt_get($session_id, -1); |
|
|
|
|
|
|
|
$dns_record_id = 0; |
|
|
|
|
|
|
|
foreach ($dns_records as $dns_record) { |
|
|
|
if ($dns_record["zone"] == $zone_id && $dns_record["type"] == "TXT" && $dns_record["name"] == "_acme-challenge.{$fulldomain}.") { |
|
|
|
$dns_record_id = $dns_record["id"]; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// Add if zero else update
|
|
|
|
|
|
|
|
$date = new DateTime(); |
|
|
|
|
|
|
|
switch ($action) { |
|
|
|
|
|
|
|
case "add": |
|
|
|
if ($dns_record_id == 0) { |
|
|
|
|
|
|
|
$dns_record = array( |
|
|
|
"server_id" => $server_id, |
|
|
|
"zone" => $zone_id, |
|
|
|
"name" => "_acme-challenge.{$fulldomain}.", |
|
|
|
"type" => "txt", |
|
|
|
"data" => $token, |
|
|
|
"aux" => 111, |
|
|
|
"ttl" => 300, |
|
|
|
"active" => 'y', |
|
|
|
"stamp" => date_format($date, 'Y-m-d H:i:s'), |
|
|
|
"serial" => date_format($date, 'Ymds') |
|
|
|
); |
|
|
|
|
|
|
|
$result = $client->dns_txt_add($session_id, $client_id, $dns_record); |
|
|
|
|
|
|
|
echo "Created record for domain {$fulldomain} with token $token\n"; |
|
|
|
} else { |
|
|
|
|
|
|
|
$dns_record["data"] = $token; |
|
|
|
$dns_record["stamp"] = date_format($date, 'Y-m-d H:i:s'); |
|
|
|
$dns_record["serial"] = date_format($date, 'YmdH'); |
|
|
|
|
|
|
|
$result = $client->dns_txt_update($session_id, $client_id, $dns_record_id, $dns_record); |
|
|
|
echo "Updated the record for domain {$fulldomain} with token $token\n"; |
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case "del": |
|
|
|
|
|
|
|
if ($dns_record_id > 0) { |
|
|
|
|
|
|
|
$result = $client->dns_txt_delete($session_id, $dns_record_id); |
|
|
|
|
|
|
|
if ($result) { |
|
|
|
echo "The record was deleted from domain {$fulldomain} successfully\n"; |
|
|
|
} else { |
|
|
|
echo "Failed to delete the record for domain {$fulldomain}\n"; |
|
|
|
} |
|
|
|
} else { |
|
|
|
|
|
|
|
echo "The record was not found for deletion\n"; |
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
default: |
|
|
|
echo "No action was specified as parameter\n"; |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
if ($client->logout($session_id)) { |
|
|
|
//echo 'Logged out.<br />';
|
|
|
|
} |
|
|
|
} catch (SoapFault $e) { |
|
|
|
echo $client->__getLastResponse(); |
|
|
|
die('SOAP Error: ' . $e->getMessage()); |
|
|
|
} |