You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

140 lines
3.9 KiB

<?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());
}