getMessage();
}
break;
case "system":
$arr = array("STATUS" => 0);
$json = json_encode($arr, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
if (set_output("system",$json)) echo "OK";
else echo "ERROR";
break;
case "check_system":
$arr = check_response("system");
if (!empty($arr)) {
foreach ($arr as $key=>$data) {
if ($key=="system") {
if ($data["INSTALL_STATUS"]==2) echo "NEW";
elseif ($data["INSTALL_STATUS"]==1) {
if ($_GET["services"]==1) {
echo "
Service/Container | Image | Status | Action |
";
foreach ($data["INSTALLED_SERVICES"] as $service_name => $object) {
//echo base64_decode($content);
show_service($service_name, $object["running"]);
}
echo "
";
}
else echo "EXISTS";
}
remove_response("$key");
}
}
}
else echo "WAIT";
break;
case "check_install": // called in install.js - check if install process has finished
$arr = check_response("install");
if (!empty($arr)) {
foreach ($arr as $key=>$data) {
//echo $key."-".$_GET["key"];
if ($key=="install") { // if install key moved to web_out
if ($data["INSTALL_STATUS"]>0) {
remove_response("$key");
echo "INSTALLED";
}
}
}
}
else echo "NOT EXISTS"; // TODO - check if in progress or just not exists ???
break;
case "services":
$arr = array("STATUS" => 0);
$json = json_encode($arr, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
if (set_output("services",$json)) echo "OK";
else echo "ERROR";
break;
case "check_services":
$arr = check_response("services");
if (!empty($arr)) {
foreach ($arr as $key=>$data) {
if ($key=="services") {
if ($data["INSTALL_STATUS"]==2) echo "NEW";
elseif ($data["INSTALL_STATUS"]==1) {
echo "Service/Container | Image | Status | Action |
";
foreach ($data["INSTALLED_SERVICES"] as $service_name => $object) {
//echo base64_decode($object["content"]);
show_service($service_name, $object["running"]);
}
echo "
";
}
remove_response("$key");
}
}
}
else echo "WAIT";
break;
case "updates":
$arr = array("STATUS" => 0);
$json = json_encode($arr, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
if (set_output("updates",$json)) echo "OK";
else echo "ERROR";
break;
case "check_updates":
$arr = check_response("updates");
if (!empty($arr)) {
foreach ($arr as $key=>$data) {
if ($key=="updates") {
if ($data["INSTALL_STATUS"]==1) {
echo "Service/Container | Image | Status | Action |
";
foreach ($data["INSTALLED_SERVICES"] as $service_name => $object) {
show_service_update($service_name, trim($object["update"]), trim($object["uptodate"]), trim($object["error"]));
}
echo "
";
}
remove_response("$key");
}
}
}
else echo "WAIT";
break;
case "deployments":
$arr = array("STATUS" => 0);
$json = json_encode($arr, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
if (set_output("deployments",$json)) echo "OK";
else echo "ERROR";
break;
case "check_deployments":
$deployments = "";
$arr = check_response("deployments");
if (!empty($arr)) {
foreach ($arr as $key=>$data) {
if ($key=="deployments") {
if (count($data["DEPLOYMENTS"])) {
if ($data["DEPLOYMENTS"]["deployments"]=="NONE") $deployments = "There are no deployments.";
else {
foreach ($data["DEPLOYMENTS"] as $service_name => $content) {
$orig_service_name = $service_name;
$service_name = strtolower($service_name);
$version = $content["version"];
$subtitle = $content["subtitle"];
if (empty($subtitle) || $subtitle == "null") $subtitle = "";
$icon = $content["icon"];
if (empty($icon) || $icon == "null") $icon = "img/logo.svg"; // default icon image
if (array_key_exists($service_name,$data["INSTALLED_SERVICES"])) $installed = "true";
else $installed = "false";
if (!empty($deployments)) $deployments .= ", ";
$deployments .= '{"name": "'.$service_name.'", "orig_name": "'.$orig_service_name.'", "image": "'.$icon.'", "version": "'.$version.'", "subtitle": "'.$subtitle.'", "installed": "'.$installed.'"}';
}
if (!empty($deployments)) $deployments = "[{$deployments}]";
}
}
else $deployments = "There are no deployments.";
remove_response("$key");
}
}
}
else $deployments = "WAIT";
echo $deployments;
break;
case "deployment":
$arr = array("NAME" => $_GET["additional"], "ACTION" => "ask");
$json = json_encode($arr, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
if (set_output("deployment",$json)) echo "OK";
else echo "ERROR";
break;
case "check_reinstall":
$reinstall = 1;
case "check_deployment":
$arr = check_response("deployment");
if (!empty($arr)) {
foreach ($arr as $key=>$data) {
if ($key=="deployment") {
if ($data["STATUS"]=="0") { // ask
$template = json_decode(base64_decode($data["TEMPLATE"]));
$template->name = strtolower($template->name);
echo '
';
if ($reinstall) {
echo '
';
//var_dump($template);
$letsencrypt = check_letsencrypt();
if (empty($letsencrypt)) echo ""; //echo "LETSENCRYPT file doesn't exists...
";
elseif ($letsencrypt=="ERROR") echo "LETSENCRYPT file: read JSON error...
";
else {
$domain = "";
foreach ($template->fields as $field) {
if ($field->key=="DOMAIN") $domain = $field->value;
}
if (!empty($domain)) show_letsencrypt($letsencrypt, $domain);
}
echo '
';
}
$more = 0;
echo "
";
}
elseif ($data["STATUS"]=="2") { // deploy
echo 'Install has finished.
';
echo "";
}
remove_response("$key");
}
}
}
else {
$arr = check_deploy($_GET["additional"]);
if (!empty($arr)) { // deployment in progress
foreach ($arr as $key=>$data) {
if ($key=="deploy-".$_GET["additional"]) {
if ($data["STATUS"]=="1") {
//echo "Install in progress... Please wait...";
echo "";
}
elseif ($data["STATUS"]=="2") {
echo 'Install has finished.';
echo "";
remove_response("$key"); // remove from output if finished so reinstall can start
}
}
}
}
else echo ""; // no deployment, finished
}
break;
case "request_letsencrypt":
$domain = $_GET["domain"];
$arr = array($domain => array("date" => date("Y-m-d H:i:s"), "status" => "requested"));
$json = json_encode($arr, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
if (set_output("request_letsencrypt",$json)) echo "LETSENCRYPT in progress for {$domain}.
";
else echo "ERROR";
break;
case "check_letsencrypt":
$domain = $_GET["domain"];
$letsencrypt = check_letsencrypt();
if (empty($letsencrypt)) echo ""; //echo "LETSENCRYPT file doesn't exists...";
elseif ($letsencrypt=="ERROR") echo "LETSENCRYPT file: read JSON error...";
else {
show_letsencrypt($letsencrypt, $domain);
}
break;
case "edit": // update deployment after edit
case "redeploy":
case "deploy":
if ($key=check_deploy($_GET["additional"])) {
$text="A deployment ({$_GET["additional"]}) has already started.
Please wait and do not start a new one...";
}
else {
$text="Install in progress...";
$fields = $_GET;
unset($fields["op"]);
unset($fields["additional"]);
$algos = hash_algos();
foreach ($fields as $field_key => $field_value) {
$field_arr = explode(":",$field_value);
if ($field_arr[0]=="generated") {
if ($_GET["op"]=="edit") {
$fields[$field_key] = $field_arr[2]; // replace with previously stored value
continue; // do NOT regenerate values
}
$gen_arr = explode("|",$field_arr[1]);
if (intval($gen_arr[2])==0) $len = 10; // default length
else $len = $gen_arr[2];
if ($gen_arr[0]=="openssl") {
if ($gen_arr[1]=="hex") $command = "openssl rand -hex $len";
elseif ($gen_arr[1]=="base64") $command = "openssl rand -base64 $len";
else $command = "openssl rand $len"; // raw
$output = shell_exec($command);
if ($output === null) $output = "OPENSSL_ERROR";
}
else {
if ($gen_arr[0]=="random") $base = rand(100000,999999);
elseif ($gen_arr[0]=="time") $base = time();
elseif ($gen_arr[0]!="") $base = $gen_arr[0]; // fix string
else $base = rand(100000,999999); // default
if (in_array($gen_arr[1],$algos)) $base = hash($gen_arr[1],$base);
else $base = hash("md5",$base); // default alg
$output = substr($base,0,$len);
}
$fields["$field_key"] = $output;
}
}
//var_dump($fields); exit; // TEMP - test generated values
$payload = base64_encode(json_encode($fields, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT));
$arr = array("NAME" => $_GET["additional"], "ACTION" => $_GET["op"], "PAYLOAD" => $payload);
$json = json_encode($arr, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
if (set_output("deployment",$json)) echo "";
else $text .= " - ERROR";
}
echo $text;
break;
case "reinstall":
$arr = array("NAME" => $_GET["additional"], "ACTION" => "reinstall");
$json = json_encode($arr, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
if (set_output("deployment",$json)) echo "OK";
else echo "ERROR";
break;
case "check_uninstall":
$arr = check_deploy($_GET["additional"]);
if (!empty($arr)) { // deployment in progress
foreach ($arr as $key=>$data) {
if ($key=="deploy-".$_GET["additional"]) {
if ($data["STATUS"]=="1") {
echo "Install in progress... You can't uninstall while in progress...";
}
elseif ($data["STATUS"]=="2") {
echo "Install has finished...";
echo "";
remove_response("$key");
}
}
}
}
else { // no deployment in progress -> uninstall
$key = "uninstall-".$_GET["additional"];
$arr = check_response($key);
if (!empty($arr)) {
$data = $arr[$key];
if ($data["STATUS"]=="1") {
//echo "Uninstall in progress... Please wait... ".date("Y-m-d H:i:s");
echo "Uninstall in progress... ";
}
elseif ($data["STATUS"]=="2") {
echo "OK";
remove_response("$key");
}
}
else echo "Uninstall in progress...";
}
break;
case "uninstall":
if ($key=check_deploy($_GET["additional"])) {
$text="Deploy/uninstall process has already started.
Please wait and do not start a new one...";
}
else {
$text="Uninstall in progress...";
$arr = array("NAME" => $_GET["additional"], "ACTION" => "uninstall");
$json = json_encode($arr, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
if (set_output("deployment",$json)) echo "";
else $text .= " - ERROR";
}
echo $text;
break;
case "check_upgrade":
$arr = check_deploy($_GET["service"]);
if (!empty($arr)) { // deployment in progress
foreach ($arr as $key=>$data) {
if ($key=="deploy-".$_GET["service"]) {
if ($data["STATUS"]=="1") {
echo "Install in progress... You can't uninstall while in progress...";
}
elseif ($data["STATUS"]=="2") {
echo "Install has finished... You can upgrade now.";
//echo "";
remove_response("$key");
}
}
}
}
else { // no upgrade in progress -> upgrade
$key = "upgrade-".$_GET["service"];
$arr = check_response($key);
if (!empty($arr)) {
$data = $arr[$key];
if ($data["STATUS"]=="1") {
echo "Upgrade in progress... Please wait... ".date("Y-m-d H:i:s");
}
elseif ($data["STATUS"]=="2") {
echo "OK";
remove_response("$key");
}
}
else echo "Upgrade in progress... Please wait...";
}
break;
case "upgrade":
if ($key=check_deploy($_GET["service"])) {
$text="Deploy/uninstall of {$_GET["service"]} has started. Please wait...";
}
else {
//$text="Deploy/uninstall of {$_GET["service"]} in progress... Please wait...";
$arr = array("NAME" => $_GET["service"], "ACTION" => "upgrade");
$json = json_encode($arr, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
if (set_output("upgrade",$json)) $text = "OK";
else $text = "ERROR";
}
echo $text;
break;
case "version":
$arr = check_response("version");
if (!empty($arr)) {
$data = $arr["version"];
echo "Framework version: ".$data["VERSION"]."\n";
}
else echo "Framework version not found\n";
echo "Frontend version: ".file_get_contents("version.html");
break;
case "repositories":
$arr = array("STATUS" => 0);
$json = json_encode($arr, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
if (set_output("repositories",$json)) echo "OK";
else echo "ERROR";
break;
case "check_repositories":
$arr = check_response("repositories");
if (!empty($arr)) {
foreach ($arr as $key=>$data) {
if ($key=="repositories") {
$repos = json_decode(base64_decode($data["REPOSITORIES"]));
foreach ($repos->repositories as $repo) {
echo $repo."
";
}
remove_response("$key");
}
}
remove_response("add_repository");
}
else echo "WAIT";
break;
case "add_repository":
remove_response("add_repository");
$arr = array("NEW_REPO" => $_GET["repo"]);
$json = json_encode($arr, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
if (set_output("add_repository",$json)) echo "OK";
else echo "ERROR";
break;
case "check_vpn":
$arr = check_response("save_vpn");
if (!empty($arr)) {
$data = $arr["save_vpn"];
echo $data["STATUS"];
if ($data["STATUS"]=="1") remove_response("save_vpn"); // vpn start has finished
}
else {
$key = "check_vpn";
$arr = array("STATUS" => 0);
$json = json_encode($arr, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
set_output($key,$json);
sleep(1);
$arr = check_response($key);
if (!empty($arr)) {
$data = $arr[$key];
echo $data["STATUS"];
remove_response("$key");
}
else echo "NO";
}
break;
case "save_vpn":
//remove_response("save_repository"); // ???
$arr = array(
"VPN_DOMAIN" => $_GET["vpn_domain"],
"VPN_PASS" => $_GET["vpn_pass"],
"LETSENCRYPT_MAIL" => $_GET["letsencrypt_mail"],
"LETSENCRYPT_SERVERNAME" => $_GET["letsencrypt_servername"]
);
$json = json_encode($arr, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
if (set_output("save_vpn",$json)) echo "OK";
else echo "ERROR";
break;
case "containers":
$arr = array("STATUS" => 0);
$json = json_encode($arr, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
if (set_output("containers",$json)) echo "OK";
else echo "ERROR";
break;
case "check_containers":
$arr = check_response("containers");
if (!empty($arr)) {
foreach ($arr as $key=>$data) {
if ($key=="containers") {
echo base64_decode($data["RESULT"]);
remove_response("$key");
}
}
}
else echo "";
break;
case "docker":
echo true;
break;
}
?>