function budgetvm_AdminServicesTabFields($params) { $powerStatus = new BudgetVM_Api($params['serverpassword']); $getP->post->service = $params['customfields']['BudgetVM Service ID']; $powerStatus = $powerStatus->call("v2", "device", "power", "get", $getP); switch ($powerStatus->result) { case "on": case "online": $power = "<strong>Powered On</strong>"; break; case "off": case "offline": $power = "<strong>Powered Off</strong>"; break; default: $power = "<strong>Unknown</strong>"; break; } $fieldsarray["Power Status"] = $power; $fieldsarray["Power Management"] = "<input type=\"button\" value=\"Power On\" class=\"btn\" onclick=\"runModuleCommand('custom','adminPowerOn')\"> <input type=\"button\" value=\"Power Off\" class=\"btn\" onclick=\"runModuleCommand('custom','adminPowerOff')\"> <input type=\"button\" value=\"Power Cycle\" class=\"btn\" onclick=\"runModuleCommand('custom','adminPowerReboot')\">"; $type = new BudgetVM_Api($params['serverpassword']); $info->post->service = $params['customfields']['BudgetVM Service ID']; $type = $type->call("v2", "device", "type", "get", $info); if ($type->result == "dedicated") { $fieldsarray["IPMI Controller"] = "<input type='button' style='width: 135px' class='searchinput' value='Launch KVM' onclick=\"window.open('../modules/servers/budgetvm/ipmi.php?id=" . base64_encode($params['customfields']['BudgetVM Service ID']) . "&apikey=" . base64_encode($params['serverpassword']) . "', '_blank','width=600,height=200,status=no,location=no,toolbar=no,scrollbars=1,menubar=no')\"> <input type=\"button\" value=\"Reset IPMI Controller\" class=\"btn\" onclick=\"runModuleCommand('custom','adminResetIPMI')\">"; } if ($type->result == "vps") { $getConsole = new BudgetVM_Api($params['serverpassword']); $var->post->service = $params['customfields']['BudgetVM Service ID']; $console = $getConsole->call("v2", "device", "console", "get", $var); if (empty($console->result->user) && !empty($console->result->pass)) { $fieldsarray["VNC Host"] = $console->result->host . ":" . $console->result->port; $fieldsarray["VNC Password"] = $console->result->pass; } else { $fieldsarray["Console Username"] = $console->result->user; $fieldsarray["Console Password"] = $console->result->pass; $fieldsarray["Out of Band Console"] = "<input type='button' style='width: 135px' class='searchinput' value='Launch Console' onclick=\"window.open('" . $console->result->host . "', '_blank','width=800,height=600,status=no,location=no,toolbar=no,scrollbars=1,menubar=no')\">"; } } $displayNetwork = ""; $bandwidth = new BudgetVM_Api($params['serverpassword']); $var->post->service = $params['customfields']['BudgetVM Service ID']; if ($type->result == "dedicated") { $var->post->start = strtotime("last Month"); $var->post->end = strtotime("now"); $bandwidth = $bandwidth->call("v2", "network", "bandwidth", "post", $var); foreach ($bandwidth->result as $server) { foreach ($server as $switch => $port) { foreach ($port as $id => $info) { $displayNetwork .= "<h2>" . $info->name . "</h2>"; $displayNetwork .= '<img src="data:image/png;base64, ' . $info->graph . '">'; } } } } else { $bandwidth = $bandwidth->call("v2", "network", "bandwidth", "post", $var); if ($bandwidth->success == true) { $displayNetwork .= '<img src="data:image/png;base64, ' . $bandwidth->result->graph . '">'; } } $fieldsarray["Network Information"] = $displayNetwork; return $fieldsarray; }
/** * Client area output logic handling. * * This function is used to define module specific client area output. It should * return an array consisting of a template file and optional additional * template variables to make available to that template. * * The template file you return can be one of two types: * * * tabOverviewModuleOutputTemplate - The output of the template provided here * will be displayed as part of the default product/service client area * product overview page. * * * tabOverviewReplacementTemplate - Alternatively using this option allows you * to entirely take control of the product/service overview page within the * client area. * * Whichever option you choose, extra template variables are defined in the same * way. This demonstrates the use of the full replacement. * * Please Note: Using tabOverviewReplacementTemplate means you should display * the standard information such as pricing and billing details in your custom * template or they will not be visible to the end user. * * @param array $params common module parameters * * @see http://docs.whmcs.com/Provisioning_Module_SDK_Parameters * * @return array */ function budgetvm_ClientArea(array $params) { // Determine the requested action and set service call parameters based on // the action. $requestedAction = isset($_REQUEST['customAction']) ? $_REQUEST['customAction'] : ''; $service = $params['serviceid']; $bvmid = $params['customfields']['BudgetVM Service ID']; $var = new stdclass(); $var->post = new stdclass(); $var->post->service = $bvmid; $budgetvm->bvmid = $bvmid; $budgetvm->service = $service; $type = new BudgetVM_Api($params['serverpassword']); $type = $type->call("v2", "device", "type", "get", $var); $budgetvm->type = $type->result; if ($requestedAction == "manage") { $serviceAction = 'get_usage'; $templateFile = 'templates/manage.tpl'; } elseif ($requestedAction == 'reverse') { if ($_SERVER['REQUEST_METHOD'] == "POST" && is_array($_POST['update'])) { $update = new BudgetVM_Api($params['serverpassword']); $var->post->records = json_encode($_POST['update']); $budgetvm->return = $update->call("v2", "dns", "reverse", "put", $var); if (is_object($budgetvm->return->result)) { $fixed = ""; foreach ($budgetvm->return->result as $ip => $ret) { $fixed .= $ip . " - " . $ret . "<br>" . PHP_EOL; } $budgetvm->return->result = $fixed; } } else { $budgetvm->return = NULL; } $netblocks = new BudgetVM_Api($params['serverpassword']); $budgetvm->netblocks = $netblocks->call("v2", "network", "netblock", "get", $var); $serviceAction = 'get_usage'; $templateFile = 'templates/rdns.tpl'; } elseif ($requestedAction == 'network') { $bandwidth = new BudgetVM_Api($params['serverpassword']); if ($budgetvm->type == "dedicated") { if (isset($_GET['period'])) { switch ($_GET['period']) { case "hour": $var->post->start = strtotime("-1 hour"); break; case "day": $var->post->start = strtotime("-1 day"); break; case "week": $var->post->start = strtotime("-1 week"); break; case "month": $var->post->start = strtotime("-1 month"); break; case "year": $var->post->start = strtotime("-1 year"); break; default: $var->post->start = strtotime("-1 month"); break; } } else { $var->post->start = strtotime("last Month"); } $var->post->end = strtotime("now"); $budgetvm->bandwidth = $bandwidth->call("v2", "network", "bandwidth", "post", $var); } else { $budgetvm->bandwidth = $bandwidth->call("v2", "network", "bandwidth", "post", $var); } $serviceAction = 'get_usage'; $templateFile = 'templates/network.tpl'; } elseif ($requestedAction == 'power') { if ($_SERVER['REQUEST_METHOD'] == "POST") { if ($_POST['bootorder'] != "standard") { // Custom Boot Order was Requested $bootorder = new BudgetVM_Api($params['serverpassword']); $var->post->request = $_POST['bootorder']; $budgetvm->bootorder = $bootorder->call("v2", "device", "power", "put", $var); } else { $budgetvm->bootorder = NULL; } // Power Action $update = new BudgetVM_Api($params['serverpassword']); $var->post->action = $_POST['poweraction']; $budgetvm->return = $update->call("v2", "device", "power", "post", $var); if ($budgetvm->return->success == true) { if ($_POST['bootorder'] != "standard" && !empty($budgetvm->bootorder) && $budgetvm->bootorder->success == true) { // Power Action with custom boot order $budgetvm->return->result = $budgetvm->bootorder->result . " & " . $budgetvm->return->result; } } } else { $budgetvm->return = NULL; } $powerStatus = new BudgetVM_Api($params['serverpassword']); $budgetvm->powerStatus = $powerStatus->call("v2", "device", "power", "get", $var); $serviceAction = 'get_usage'; $templateFile = 'templates/power.tpl'; } elseif ($requestedAction == 'reinstall') { if ($_SERVER['REQUEST_METHOD'] == "POST") { $cancel = $_POST['cancel']; if (isset($cancel) && $cancel == true) { $stop = new BudgetVM_Api($params['serverpassword']); $budgetvm->return = $stop->call("v2", "device", "reload", "delete", $var); } else { $provision = new BudgetVM_Api($params['serverpassword']); $var->post->value = $_POST['profile']; $budgetvm->return = $provision->call("v2", "device", "reload", "post", $var); if ($budgetvm->return->success == true) { if ($type->result == "dedicated") { $budgetvm->return->result = "System Reinstall Started</br>Root Password: "******"dedicated") { $status = new BudgetVM_Api($params['serverpassword']); $budgetvm->status = $status->call("v2", "device", "reload", "put", $var)->result; } else { $budgetvm->status = NULL; } $profiles = new BudgetVM_Api($params['serverpassword']); $budgetvm->profiles = $profiles->call("v2", "device", "reload", "get", $var)->result; $serviceAction = 'get_usage'; $templateFile = 'templates/reinstall.tpl'; } elseif ($requestedAction == 'ipmi') { if ($_SERVER['REQUEST_METHOD'] == "POST") { if ($type->result == "dedicated") { if ($_POST['ipmi_reset'] == true) { $reset_ipmi = new BudgetVM_Api($params['serverpassword']); $budgetvm->return = $reset_ipmi->call("v2", "device", "console", "delete", $var); } elseif ($_POST['ipmi_launch'] == true) { $launch_ipmi = new BudgetVM_Api($params['serverpassword']); $budgetvm->return = $launch_ipmi->call("v2", "device", "console", "get", $var); if ($budgetvm->return->success == true) { $launch_ipmi->ipmiLaunch(base64_decode($budgetvm->return->result)); $budgetvm->return->result = "KVM Launched, File download started."; } } elseif ($_POST['image_unmount'] == true) { $unmount_image = new BudgetVM_Api($params['serverpassword']); $budgetvm->return = $unmount_image->call("v2", "device", "iso", "delete", $var); } elseif ($_POST['image_mount'] == true) { $mount_image = new BudgetVM_Api($params['serverpassword']); $var->post->image = $_POST['profile']; $budgetvm->return = $mount_image->call("v2", "device", "iso", "post", $var); $mount_image = new BudgetVM_Api($params['serverpassword']); $budgetvm->return = $mount_image->call("v2", "device", "iso", "put", $var); } } else { if ($_POST['ipmi_vm_launch'] == true) { $ipmi_vm_launch = new BudgetVM_Api($params['serverpassword']); $budgetvm->return = $ipmi_vm_launch->call("v2", "device", "console", "get", $var); if ($budgetvm->return->success == true) { $message = "<h4>Management Console</h4>"; $message .= "Username: "******"</br>" . PHP_EOL; $message .= "Password: "******"</br>" . PHP_EOL; $message .= "Host: <a href='" . $budgetvm->return->result->host . "' target='_blank'>" . $budgetvm->return->result->host . "</a>" . PHP_EOL; $budgetvm->return->result = $message; } } } } else { $budgetvm->return = NULL; } $images = new BudgetVM_Api($params['serverpassword']); $budgetvm->images = $images->call("v2", "device", "iso", "get", NULL); $status = new BudgetVM_Api($params['serverpassword']); $budgetvm->status = $status->call("v2", "device", "iso", "get", $var); $serviceAction = 'get_usage'; $templateFile = 'templates/ipmi.tpl'; } else { // Service Overview if ($type->success == true) { $budgetvm->type = $type->result; if ($type->result == "dedicated") { $device = new BudgetVM_Api($params['serverpassword']); $device = $device->call("v2", "device", "hardware", "get", $var); $network = new BudgetVM_Api($params['serverpassword']); $network = $network->call("v2", "network", "netblock", "get", $var); if ($network->result == true) { $budgetvm->network = $network->result; } } else { $device = new BudgetVM_Api($params['serverpassword']); $device = $device->call("v2", "device", "stats", "get", $var); } if ($device->success == true) { $budgetvm->device = $device->result; } } $var->post->start = strtotime("last Month"); $var->post->end = strtotime("now"); $bandwidth = new BudgetVM_Api($params['serverpassword']); $budgetvm->bandwidth = $bandwidth->call("v2", "network", "bandwidth", "post", $var); $status = new BudgetVM_Api($params['serverpassword']); $status = $status->call("v2", "device", "power", "get", $var); if ($status->success == true && $status->success == true) { $budgetvm->status = $status->result; } else { $budgetvm->status = "Uknown"; } $serviceAction = 'get_stats'; $templateFile = 'templates/overview.tpl'; } try { // Call the service's function based on the request action, using the // values provided by WHMCS in `$params`. return array('tabOverviewReplacementTemplate' => $templateFile, 'templateVariables' => array('budgetvm' => $budgetvm)); } catch (Exception $e) { // Record the error in WHMCS's module log. logModuleCall('provisioningmodule', __FUNCTION__, $params, $e->getMessage(), $e->getTraceAsString()); // In an error condition, display an error page. return array('tabOverviewReplacementTemplate' => 'error.tpl', 'templateVariables' => array('usefulErrorHelper' => $e->getMessage())); } }
<?php define("CLIENTAREA", true); //define("FORCESSL",true); // Uncomment to force the page to use https:// require "../../../init.php"; $ca = new WHMCS_ClientArea(); require dirname(__FILE__) . '/api.class.php'; if (!empty($_GET['id']) && !empty($_GET['apikey']) && isset($_SESSION['adminid']) && !empty($_SESSION['adminid']) && isset($_SESSION['adminpw']) && !empty($_SESSION['adminpw'])) { $launch_ipmi = new BudgetVM_Api(base64_decode($_GET['apikey'])); $var->post->service = base64_decode($_GET['id']); $return = $launch_ipmi->call("v2", "device", "console", "get", $var); if ($return->success == true) { header('Content-Type: application/x-java-jnlp-file', true); header('Content-Disposition: attachment; filename="launch.jnlp"', true); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT", true); header('Accept-Ranges: bytes', true); header("Cache-control: private", true); header('Pragma: private', true); echo base64_decode($return->result); } }