"",
"kh_apikey" => "",
"kh_apiversion" => "/api/v1",
"kh_server_ip" => "",
"kh_server_name" => "",
"kh_hosting_plan" => 1,
);
/*
|--- Die Rauten (#) entfernen und zusätzliche Server aktivieren
|
V */
# // Server 2
# $i++;
# $kh_servers[$i] = array(
# "kh_server" => "",
# "kh_apikey" => "",
# "kh_apiversion" => "/api/v1",
# "kh_server_ip" => "",
# "kh_server_name" => "",
# "kh_hosting_plan" => 1,
# );
# // Server 3
# $i++;
# $kh_servers[$i] = array(
# "kh_server" => "",
# "kh_apikey" => "",
# "kh_apiversion" => "/api/v1",
# "kh_server_ip" => "",
# "kh_server_name" => "",
# "kh_hosting_plan" => 1,
# );
/*
^
|
|--- Die Rauten (#) entfernen und zusätzliche Server aktivieren
*/
if ( DEBUGMODE == 1 ){
$i++;
$kh_servers[$i] = $kh_servers[0];
$kh_servers[$i]["kh_server_name"] = "DEBUG Testserver";
error_reporting(E_ALL);
}
printer($kh_servers, 0);
define("KEYHELPSERVERS", $kh_servers);
class khapi{
var $kh_server;
var $kh_apikey;
var $kh_apiversion;
var $kh_endpoint;
function connect($server_id, $endpoint){
$this->kh_server = KEYHELPSERVERS[$server_id]["kh_server"];
$this->kh_apikey = KEYHELPSERVERS[$server_id]["kh_apikey"];
$this->kh_apiversion = KEYHELPSERVERS[$server_id]["kh_apiversion"];
$this->kh_endpoint = $endpoint;
}
function executeRESTCall($methode, $data = false, $out = "RAW") {
$curl = curl_init();
$url = "https://".$this->kh_server.$this->kh_apiversion."/".$this->kh_endpoint;
switch ($methode){
case "POST":
curl_setopt($curl, CURLOPT_POST, 1);
if ($data){
printer($data, 0);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
}
break;
case "PUT":
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
if ($data){
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
}
break;
case "GET":
if ($data){
$url = sprintf("%s?%s", $url, http_build_query($data));
}
break;
default:
if ($data){
}
break;
}
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, '0'); // 1 on Live-Systems
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, '0'); // 1 on Live-Systems
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'X-API-Key: '.$this->kh_apikey,
'accept: application/json',
'Content-Type: application/json',
));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// EXECUTE:
$result = curl_exec($curl);
if(!$result){
echo date("H:i:s")."
";
echo $url."
";
echo $curl;
die("Connection Failure");
}
curl_close($curl);
switch ($out){
case "RAW":
return $result;
break;
case "ARRAY":
return json_decode($result, true);
break;
case "OBJECT":
return json_decode($result);
break;
}
}
}
function printer($out, $print = 1){
if ($print == 1 && DEBUGMODE == 1){
print "
";
print_r($out);
print "
";
}
}
function make_menu($menu, $cl = "standard_ul"){
$ret = "";
$ret.= "";
foreach ($menu AS $key => $wert){
$ret.= "- ";
$ret.= "".$wert["txt"]."";
$ret.= "
";
}
$ret.= "
";
return $ret;
}
function cut($wert, $typ = 0){
switch($typ){
case 20:
break;
case 1000000: // Dateipfad
$wert = preg_replace("|[^a-zA-Z0-9\-\.\_\/]|", "", $wert);
break;
case 999999:
$wert = preg_replace("|[^a-z0-9\-\@\.\_]|", "", $wert);
break;
case 19:
$wert = preg_replace("|[^0-9\-]|", "", $wert);
break;
case 18: // Domaindetails JSON
$wert = preg_replace("|[^a-zA-Z0-9äüöÄÜÖß \-\.\@\{\}\:\,\"]|", "", $wert);
break;
case 17: // Domainnamen
$wert = preg_replace("|[^a-zA-Z0-9\-\.]|", "", $wert);
break;
case 13:
$wert = preg_replace("|[^a-z0-9]|", "", $wert);
break;
case 888888: // Dateinamencheck für Download
$wert = preg_replace("|[^a-zA-Z0-9\-_\.\@]|", "", $wert);
break;
case 10:
$wert = preg_replace("|[^0-9 \+]|", "", $wert);
break;
case 9:
$wert = preg_replace("|[^A-Z]|", "", $wert);
break;
case 8:
$wert = preg_replace("|[^a-zA-Z0-9äüöÄÜÖßàáèéíìôóòûùúý \-\.]|", "", $wert);
break;
case 3: // action
$wert = preg_replace("|[^a-z0-9_]|", "", $wert);
break;
case 2:
$wert = preg_replace("|[^A-Z0-9\@\.]|", "", $wert);
break;
default:
$wert = preg_replace("|[^0-9]|", "", $wert);
break;
}
return $wert;
}
function make_form($data, $action){
$ret = "";
$ret.= "";
return $ret;
}
function html_out($TEXT){
$ret = "";
$css = '
';
$ret.= "\n";
$ret.= "\n";
$ret.= "\n";
$ret.= "Key-Help Api Test\n";
$ret.= "\n\n";
$ret.= "\t\n";
$ret.= "\t\n";
$ret.= "\t\n";
$ret.= "\n\n";
$ret.= "\n";
$ret.= $css;
$ret.= "\n";
$ret.= "\n";
$ret.= "\n";
$ret.= "\n";
$ret.= "";
$ret.= $TEXT;
$ret.= "\n";
$ret.= "\n";
$ret.= "\n";
$ret.= "\n";
header("Content-Type: text/html; charset=utf-8");
echo $ret;
}
$TEXT = "";
$action = isset($_REQUEST["action"]) ? cut($_REQUEST["action"], 3) : "";
$user_id = isset($_REQUEST["user_id"]) && is_numeric($_REQUEST["user_id"]) ? $_REQUEST["user_id"] : 0;
$server_id = isset($_REQUEST["server_id"]) && is_numeric($_REQUEST["server_id"]) ? $_REQUEST["server_id"] : 0;
switch ($action){
case "new_database":
$user_id = cut($user_id);
$new_db = array(
"id_user" => $user_id,
);
printer($new_db, 0);
$TEXT.= "Neue Datenbank für User ID ".$user_id." anlegen
";
$serverinfo = new khapi();
$serverinfo->connect($server_id, "databases");
$api_call = $serverinfo->executeRESTCall("POST", $new_db, "ARRAY");
printer($api_call, 0);
if (isset($api_call["id"])){
$update = array(
"password" => $api_call["password"],
"description" => $api_call["password"],
);
$serverinfo = new khapi();
$serverinfo->connect($server_id, "databases/".$api_call["id"]);
$db_update = $serverinfo->executeRESTCall("PUT", $update, "ARRAY");
printer($db_update, 0);
if (isset($db_update["id"])){
$TEXT.= "Datenbank ".$api_call["database_name"]." wurde erfolgreich hinzugefügt!
";
$menu = array(
0 => array(
"link" => "index.php?action=new_database&user_id=".$user_id."&server_id=".$server_id,
"txt" => "Dem User eine weitere Datenbank hinzufügen"
),
1 => array(
"link" => "index.php?action=list_all_users&server_id=".$server_id,
"txt" => "Alle User dieses Servers anzeigen"
),
);
$TEXT.= make_menu($menu);
break;
}else{
$TEXT.= "Datenbank Update Fail!
";
}
}else{
$TEXT.= "Das hat irgendwie nicht nicht geklappt.
";
}
break;
case "check_domain":
foreach($_POST["hidden"] AS $key => $wert){
${$key} = $wert;
}
foreach($_POST["md5"] AS $key => $wert){
if (isset($_POST[$key])){
${$_POST[$key]} = $wert;
}
}
$user_id = cut($user_id);
$server_id = cut($server_id);
$idn_domain = idn_to_ascii($domainname, IDNA_DEFAULT, INTL_IDNA_VARIANT_UTS46);
$idn_domain = cut($idn_domain, 17);
if (is_numeric($user_id)){
$domain_dns = dns_get_record($idn_domain, DNS_ANY);
$ip_v4 = "";
$ip_mx = "";
foreach ($domain_dns AS $dns){
if ($dns["type"] == "A"){
$ip_v4 = $dns["ip"];
}
if ($dns["type"] == "MX"){
$mx_details = dns_get_record($dns["target"], DNS_A);
printer($mx_details, 0);
if (isset($mx_details[0]["ip"])){
$ip_mx = $mx_details[0]["ip"];
}
}
}
printer($domain_dns, 0);
if (KEYHELPSERVERS[$server_id]["kh_server_ip"] == $ip_v4){
printer($_POST);
$security = array();
if ($lets_encrypt == "true"){
$security = array(
"id_certificate" => 0,
"lets_encrypt" => true,
"force_https" => true,
"is_hsts" => true,
"hsts_max_age" => 10368000,
"hsts_include" => true,
"hsts_preload" => true
);
}
$new_domain = array(
"id_user" => $user_id,
"id_parent_domain" => 0,
"domain" => $idn_domain,
"domain_utf8" => $domainname,
//"php_version" => "",
"is_disabled" => false,
//"delete_on" => "",
"is_dns_disabled" => ($is_dns_disabled == "true") ? true : false,
"is_email_domain" => ($ip_mx == KEYHELPSERVERS[$server_id]["kh_server_ip"]) ? true : false,
"create_www_subdomain" => ($www_subdomain == "true") ? true : false,
"is_subdomain" => false,
"target" => array(
"target" => "webseiten/".$idn_domain,
//"forwarding_type" => 301
),
"security" => $security,
);
printer($new_domain, 0);
$serverinfo = new khapi();
$serverinfo->connect($server_id, "domains");
$api_call = $serverinfo->executeRESTCall("POST", $new_domain, "ARRAY");
printer($api_call, 0);
if (isset($api_call["id"])){
$TEXT.= "Domain ".$domainname." wurde erfolgreich hinzugefügt!
";
$menu = array(
0 => array(
"link" => "index.php?action=new_database&user_id=".$user_id."&server_id=".$server_id,
"txt" => "Dem User eine Datenbank hinzufügen"
),
);
$TEXT.= make_menu($menu);
break;
}
}else{
$TEXT.= "IPV4 Adresse von ".$domainname." muss ".KEYHELPSERVERS[$server_id]["kh_server_ip"]." lauten.
";
$TEXT.= "Aktueller Wert: ".$ip_v4."
";
}
}
case "new_domain":
if ($user_id > 0){
$serverinfo = new khapi();
$serverinfo->connect($server_id, "clients/".$user_id);
$api_call = $serverinfo->executeRESTCall("GET", false, "ARRAY");
printer($api_call, 0);
if (isset($api_call["username"])){
$TEXT.= "Domain für User ".$api_call["username"]." hinzufügen
";
$TEXT.= "Server ".KEYHELPSERVERS[$server_id]["kh_server_name"]."
";
$data = array(
"domainname" => isset($domainname) ? $domainname : "domain.tld",
"www_subdomain" => false,
"lets_encrypt" => true,
"is_dns_disabled" => true,
"hidden_user_id" => $user_id,
"hidden_server_id" => $server_id,
);
$TEXT.= make_form($data, "check_domain");
}
}
break;
case "check_user":
printer($_POST, 0);
case "new_user":
$TEXT.= "Neuen User anlegen
";
$TEXT.= "Server ".KEYHELPSERVERS[$server_id]["kh_server_name"]."
";
$id = date("dmyB");
$username = "khuser-".$id;
$hosting_plan = KEYHELPSERVERS[$server_id]["kh_hosting_plan"];
$new_user = array(
"username" => $username,
"language" => "de",
"email" => $username."@".$catchall_mail_domain,
//"password" => md5("qwertz-".$id),
"notes" => "Automatisch generierter API User ID ".$id,
"id_hosting_plan" => $hosting_plan,
"is_suspended" => false,
"suspend_on" => null,
"delete_on" => null,
"send_login_credentials" => true,
"create_system_domain" => false,
"contact_data" => array(
"first_name" => "KHUser",
"last_name" => $id,
"company" => "masterframe GmbH",
"telephone" => "03643909275",
"address" => "Hainbuchenweg 4",
"city" => "Wohlsborn",
"zip" => "99439",
"state" => "Thuringia",
"country" => "DE",
"client_id" => "ID-".$id
),
"hidden_server_id" => $server_id,
);
if ($action == "check_user"){
foreach ($new_user AS $key => $wert){
$this_key = $key;
if (is_array($wert)){
foreach ($wert AS $kk => $ww){
if (isset($_POST[md5($kk)])){
${$kk} = empty($_POST["md5"][md5($kk)]) ? null : $_POST["md5"][md5($kk)];
}
}
}else{
if (isset($_POST[md5($this_key)])){
${$this_key} = empty($_POST["md5"][md5($this_key)]) ? null : $_POST["md5"][md5($this_key)];
}
}
}
$add_user = array(
"username" => $username,
"language" => $language,
"email" => $email,
//"password" => md5("qwertz-".$id),
"notes" => $notes,
"id_hosting_plan" => $id_hosting_plan,
"is_suspended" => ($is_suspended == "true") ? true : false,
"suspend_on" => $suspend_on,
"delete_on" => $delete_on,
"send_login_credentials" => ($send_login_credentials == "true") ? true : false,
"create_system_domain" => ($create_system_domain == "true") ? true : false,
"contact_data" => array(
"first_name" => $first_name,
"last_name" => $last_name,
"company" => $company,
"telephone" => $telephone,
"address" => $address,
"city" => $city,
"zip" => $zip,
"state" => $state,
"country" => $country,
"client_id" => $client_id,
)
);
printer($add_user, 0);
$serverinfo = new khapi();
$serverinfo->connect($server_id, "clients");
$api_call = $serverinfo->executeRESTCall("POST", $add_user, "ARRAY");
printer($api_call, 0);
if (isset($api_call["id"])){
$TEXT.= "USER ID ".$api_call["id"]." erfolgreich hinzugefügt!
";
$menu = array(
0 => array(
"link" => "index.php?action=new_domain&user_id=".$api_call["id"]."&server_id=".$server_id,
"txt" => "Dem User eine Domain hinzufügen"
),
1 => array(
"link" => "index.php?action=new_database&user_id=".$api_call["id"]."&server_id=".$server_id,
"txt" => "Dem User eine Datenbank hinzufügen"
),
);
$TEXT.= make_menu($menu);
break;
}else{
$TEXT.= "Fehler: Benutzer wurde nicht hinzugefügt.
";
}
$new_user = $add_user;
}
$TEXT.= make_form($new_user, "check_user");
break;
case "new_user_2":
$serverinfo = new khapi();
$serverinfo->connect(0, "clients");
$api_call = $serverinfo->executeRESTCall("POST", $new_user, "ARRAY");
printer($api_call, 0);
if (isset($api_call["id"])){
$TEXT.= "USER ID ".$id." erfolgreich hinzugefügt!
";
$menu = array(
0 => array(
"link" => "index.php?action=new_domain&user_id=".$api_call["id"]."&server_id=".$server_id,
"txt" => "Dem User eine Domain hinzufügen"
),
1 => array(
"link" => "index.php?action=new_database&user_id=".$api_call["id"]."&server_id=".$server_id,
"txt" => "Dem User eine Datenbank hinzufügen"
),
);
$TEXT.= make_menu($menu);
}
break;
case "list_all_users":
$TEXT.= "Übersicht Alle User
";
$TEXT.= "Server ".KEYHELPSERVERS[$server_id]["kh_server_name"]."
";
$data = array();
$serverinfo = new khapi();
$serverinfo->connect($server_id, "clients");
$api_call = $serverinfo->executeRESTCall("GET", $data, "ARRAY");
printer($api_call, 0);
foreach ($api_call AS $wert){
$menu = array(
0 => array(
"link" => "index.php?action=new_domain&user_id=".$wert["id"]."&server_id=".$server_id,
"txt" => "Dem User eine Domain hinzufügen"
),
1 => array(
"link" => "index.php?action=new_database&user_id=".$wert["id"]."&server_id=".$server_id,
"txt" => "Dem User eine Datenbank hinzufügen"
),
);
$TEXT.= "".$wert["username"]."
";
$TEXT.= "".$wert["contact_data"]["first_name"]." ".$wert["contact_data"]["last_name"]."
";
if(!empty($wert["contact_data"]["company"])){
$TEXT.= "".$wert["contact_data"]["company"]."
";
}
$TEXT.= make_menu($menu);
$TEXT.= "
";
}
break;
default:
$TEXT.= "Key-Help Api Test V.01
";
foreach(KEYHELPSERVERS AS $key => $wert){
$data = array(
"meta" => "true",
"operating_system" => "true",
"utilization" => "true",
"resources" => "true",
);
$serverinfo = new khapi();
$serverinfo->connect($key, "server");
$api_call = $serverinfo->executeRESTCall("GET", $data, "ARRAY");
printer($api_call, 0);
$TEXT.= "Verbunden mit Server ".$api_call["meta"]["hostname"]."
";
$TEXT.= "Servername: ".$wert["kh_server_name"]."
";
$menu = array(
0 => array(
"link" => "index.php?action=new_user&server_id=".$key,
"txt" => "Neuen Benutzer hinzufügen"
),
1 => array(
"link" => "index.php?action=list_all_users&server_id=".$key,
"txt" => "Alle User anzeigen"
),
);
$TEXT.= make_menu($menu);
$TEXT.= "
";
}
break;
}
html_out($TEXT);
?>