function select()
 {
     $h['state']['title'] = $this->lang['appliances']['state'];
     $h['id']['title'] = $this->lang['appliances']['id'];
     $h['id']['hidden'] = true;
     $h['name']['title'] = $this->lang['create']['hostname'];
     $h['name']['hidden'] = true;
     $h['type']['title'] = $this->lang['create']['type'];
     $h['type']['hidden'] = true;
     $h['cpu']['title'] = $this->lang['create']['cpu'];
     $h['cpu']['hidden'] = true;
     $h['ram']['title'] = $this->lang['create']['ram'];
     $h['ram']['hidden'] = true;
     $h['config']['title'] = ' ';
     $h['config']['sortable'] = false;
     $h['kernel']['title'] = $this->lang['create']['kernel'];
     $h['kernel']['hidden'] = true;
     $h['disk']['title'] = $this->lang['create']['disk'];
     $h['disk']['hidden'] = true;
     $h['image']['title'] = $this->lang['create']['image'];
     $h['image']['hidden'] = true;
     $h['comment']['title'] = ' ';
     $h['comment']['sortable'] = false;
     $h['action']['title'] = ' ';
     $h['action']['sortable'] = false;
     // mark sorted values
     $sort = $this->response->html->request()->get('cloud_table[sort]');
     if ($sort === 'id') {
         $this->lang['appliances']['id'] = '<span>' . $this->lang['appliances']['id'] . '</span>';
     } else {
         if ($sort === 'name') {
             $this->lang['create']['hostname'] = '<span>' . $this->lang['create']['hostname'] . '</span>';
         } else {
             if ($sort === 'type') {
                 $this->lang['create']['type'] = '<span>' . $this->lang['create']['type'] . '</span>';
             } else {
                 if ($sort === 'cpu') {
                     $this->lang['create']['cpu'] = '<span>' . $this->lang['create']['cpu'] . '</span>';
                 } else {
                     if ($sort === 'ram') {
                         $this->lang['create']['ram'] = '<span>' . $this->lang['create']['ram'] . '</span>';
                     } else {
                         if ($sort === 'kernel') {
                             $this->lang['create']['kernel'] = '<span>' . $this->lang['create']['kernel'] . '</span>';
                         } else {
                             if ($sort === 'disk') {
                                 $this->lang['create']['disk'] = '<span>' . $this->lang['create']['disk'] . '</span>';
                             } else {
                                 if ($sort === 'image') {
                                     $this->lang['create']['image'] = '<span>' . $this->lang['create']['image'] . '</span>';
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     $cloudreq_array = $this->cloudrequest->get_all_ids_per_user($this->clouduser->id);
     $user_requests = array();
     // build an array of our appliance id's
     foreach ($cloudreq_array as $cr) {
         $user_requests[] = $cr['cr_id'];
     }
     $show_ip_mgmt = false;
     if (!strcmp($this->cloudconfig->get_value_by_key('ip-management'), "true")) {
         $show_ip_mgmt = true;
     }
     $sshterm_enabled = false;
     if (!strcmp($this->cloudconfig->get_value_by_key('show_sshterm_login'), "true")) {
         $sshterm_enabled = true;
     }
     $show_application_ha = false;
     if (!strcmp($this->cloudconfig->get_value_by_key('show_ha_checkbox'), "true")) {
         $show_application_ha = true;
     }
     $collectd_graph_enabled = false;
     if (!strcmp($this->cloudconfig->get_value_by_key('show_collectd_graphs'), "true")) {
         $collectd_graph_enabled = true;
     }
     $private_image_config_enabled = false;
     if (!strcmp($this->cloudconfig->get_value_by_key('show_private_image'), "true")) {
         $private_image_config_enabled = true;
     }
     $show_pause_button = false;
     $show_unpause_button = false;
     // now we go over all our appliances from the users request list
     $app_count = 0;
     $ta = array();
     foreach ($user_requests as $reqid) {
         $appliance = null;
         $this->cloudrequest->get_instance_by_id($reqid);
         if (strlen($this->cloudrequest->appliance_id) && $this->cloudrequest->appliance_id != 0) {
             $appliance = $this->openqrm->appliance();
             $appliance->get_instance_by_id($this->cloudrequest->appliance_id);
         }
         $sshterm_login = false;
         $appliance_resources_str = "";
         $res_ip_loop = 0;
         $resource = $this->openqrm->resource();
         // prepare values
         $str_cpu = intval($this->cloudrequest->cpu_req);
         if ($str_cpu === 0) {
             $str_cpu = 'Auto';
         }
         $str_ram = intval($this->cloudrequest->ram_req);
         if ($str_ram === 0) {
             $str_ram = 'Auto';
         } else {
             if ($str_ram >= 1000) {
                 $str_ram = round($str_ram / 1000, 3, PHP_ROUND_HALF_DOWN) . ' GB';
             } else {
                 $str_ram = $str_ram . ' MB';
             }
         }
         if (isset($appliance)) {
             $appliance_resources = $appliance->resources;
             #if (!strlen($sshterm_login_ip)) {
             // in case no external ip was given to the appliance we show the internal ip
             $resource->get_instance_by_id($appliance->resources);
             $appliance_resources_str .= $resource->ip;
             $sshterm_login_ip = $resource->ip;
             $sshterm_login = true;
             #}
             if ($appliance_resources >= 0) {
                 // check ip-mgmt
                 if ($show_ip_mgmt) {
                     if (file_exists($this->rootdir . "/plugins/ip-mgmt/.running")) {
                         require_once $this->rootdir . "/plugins/ip-mgmt/class/ip-mgmt.class.php";
                         $ip_mgmt = new ip_mgmt();
                         $appliance_first_nic_ip_mgmt_id = $ip_mgmt->get_id_by_appliance($appliance->id, 1);
                         if ($appliance_first_nic_ip_mgmt_id > 0) {
                             $appliance_ip_mgmt_config_arr = $ip_mgmt->get_instance('id', $appliance_first_nic_ip_mgmt_id);
                             if (isset($appliance_ip_mgmt_config_arr['ip_mgmt_address'])) {
                                 $sshterm_login_ip = $appliance_ip_mgmt_config_arr['ip_mgmt_address'];
                                 $appliance_resources_str .= ', ' . $appliance_ip_mgmt_config_arr['ip_mgmt_address'];
                                 $sshterm_login = true;
                             }
                         }
                     }
                 }
                 // check if we need to NAT the ip address
                 $cn_nat_enabled = $this->cloudconfig->get_value_by_key('cloud_nat');
                 // 18 is cloud_nat
                 if (!strcmp($cn_nat_enabled, "true")) {
                     $appliance_resources_str = $this->cloudnat->translate($appliance_resources_str);
                     $sshterm_login_ip = $this->cloudnat->translate($sshterm_login_ip);
                 }
             } else {
                 // an appliance with resource auto-select enabled
                 $appliance_resources_str = "auto-select";
                 $sshterm_login = false;
             }
             // state
             $state = $this->cloudrequest->getstatus($this->cloudrequest->id);
             $this->cloudappliance->get_instance_by_appliance_id($appliance->id);
             switch ($this->cloudappliance->state) {
                 case 0:
                     if ($state === 'starting' || $resource->state === 'transition') {
                         $cloudappliance_state = 'busy';
                         $sshterm_login = false;
                         $show_application_ha = false;
                         $show_pause_button = false;
                         $private_image_enabled = false;
                     } else {
                         $cloudappliance_state = "paused";
                         $sshterm_login = false;
                         $show_unpause_button = true;
                         $show_pause_button = false;
                         $show_application_ha = false;
                         $private_image_enabled = false;
                     }
                     break;
                 case 1:
                     if ($resource->state === 'active' && $state === 'active') {
                         $cloudappliance_state = "active";
                         $sshterm_login = true;
                         $show_application_ha = true;
                         $show_pause_button = true;
                         $private_image_enabled = true;
                     } else {
                         $cloudappliance_state = 'busy';
                         $sshterm_login = false;
                         $show_application_ha = false;
                         $show_pause_button = false;
                         $private_image_enabled = false;
                     }
                     break;
             }
             $kernel = $this->openqrm->kernel();
             if (isset($appliance->kernelid) && $appliance->kernelid !== '') {
                 $kernel->get_instance_by_id($appliance->kernelid);
             }
             $image_size = '';
             $image = $this->openqrm->image();
             if (isset($appliance->imageid) && $appliance->imageid !== '') {
                 $image->get_instance_by_id($appliance->imageid);
                 // image disk size
                 $this->cloudimage->get_instance_by_image_id($image->id);
                 $image_size = $this->cloudimage->disk_size;
             }
             $virtualization = $this->openqrm->virtualization();
             if (isset($appliance->virtualization) && $appliance->virtualization !== '') {
                 $virtualization->get_instance_by_id($appliance->virtualization);
             }
             // prepare actions
             $cloudappliance_action = "";
             $plugin_action = "";
             // sshterm login
             if ($sshterm_enabled) {
                 if ($sshterm_login && isset($sshterm_login_ip)) {
                     // get the parameters from the plugin config file
                     $OPENQRM_PLUGIN_SSHTERM_CONFIG_FILE = $this->openqrm->get('basedir') . "/plugins/sshterm/etc/openqrm-plugin-sshterm.conf";
                     $store = openqrm_parse_conf($OPENQRM_PLUGIN_SSHTERM_CONFIG_FILE);
                     extract($store);
                     $sshterm_window = 'window' . str_replace('.', '', $sshterm_login_ip);
                     $sshterm_login_url = "https://{$sshterm_login_ip}:{$OPENQRM_PLUGIN_WEBSHELL_PORT}";
                     $a = $this->response->html->a();
                     $a->label = $this->lang['appliances']['plugin_ssh'];
                     $a->handler = "";
                     $a->css = 'plugin console';
                     $a->href = '#';
                     $a->handler = 'onclick="sshwindow = window.open(\'' . $sshterm_login_url . '\',\'' . $sshterm_window . '\', \'location=0,status=0,scrollbars=yes,resizable=yes,width=973,height=500,left=100,top=100,screenX=400,screenY=100\'); sshwindow.focus(); return false;"';
                     $plugin_action .= $a->get_string();
                 }
             }
             // application ha
             /*
             				if ($show_application_ha) {
             					$lcmc_gui="lcmc/lcmc-gui.php";
             					$icon_size = "width='21' height='21'";
             					$icon_title = $this->lang['appliances']['plugin_ha'];
             					$lcmc_url = "<a style=\"text-decoration:none\" href=\"#\" onClick=\"javascript:window.open('$lcmc_gui','','location=0,status=0,scrollbars=1,width=1024,height=768,left=50,top=20,screenX=50,screenY=20');\">
             						<image border=\"0\" alt=\"".$icon_title."\" title=\"".$icon_title."\" src=\"../img/ha.png\">
             						</a>";
             					$plugin_action .= $lcmc_url;
             				}
             */
             // regular actions
             if ($show_pause_button) {
                 // pause
                 $a = $this->response->html->a();
                 $a->title = $this->lang['appliances']['action_pause'];
                 $a->label = $this->lang['appliances']['action_pause'];
                 $a->handler = "";
                 $a->css = 'pause';
                 $a->href = $this->response->get_url($this->actions_name, 'pause') . '&' . $this->identifier_name . '[]=' . $this->cloudappliance->id;
                 $cloudappliance_action .= $a->get_string();
                 // restart
                 $a = $this->response->html->a();
                 $a->title = $this->lang['appliances']['action_restart'];
                 $a->label = $this->lang['appliances']['action_restart'];
                 $a->handler = "";
                 $a->css = 'restart';
                 $a->href = $this->response->get_url($this->actions_name, 'restart') . '&' . $this->identifier_name . '[]=' . $this->cloudappliance->id;
                 $cloudappliance_action .= $a->get_string();
             }
             if ($show_unpause_button) {
                 // pause
                 $a = $this->response->html->a();
                 $a->title = $this->lang['appliances']['action_unpause'];
                 $a->label = $this->lang['appliances']['action_unpause'];
                 $a->handler = "";
                 $a->css = 'start';
                 $a->href = $this->response->get_url($this->actions_name, 'unpause') . '&' . $this->identifier_name . '[]=' . $this->cloudappliance->id;
                 $cloudappliance_action .= $a->get_string();
             }
             if ($collectd_graph_enabled) {
                 // system stats
                 $data = $this->openqrm->get('basedir') . '/plugins/collectd/data/' . $appliance->name;
                 if (file_exists($data)) {
                     $a = $this->response->html->a();
                     $a->label = $this->lang['appliances']['plugin_collectd'];
                     $a->handler = "";
                     $a->css = 'plugin collectd';
                     $a->href = $this->response->get_url($this->actions_name, 'statistics') . '&appliance_id=' . $appliance->id;
                     $plugin_action .= $a->get_string();
                 }
             }
             // private images
             if ($private_image_enabled && $private_image_config_enabled) {
                 $a = $this->response->html->a();
                 $a->label = $this->lang['appliances']['action_private_image'];
                 $a->title = $this->lang['appliances']['action_private_image'];
                 $a->handler = "";
                 $a->css = 'private';
                 $a->href = $this->response->get_url($this->actions_name, 'image_private') . '&appliance_id=' . $appliance->id;
                 $cloudappliance_action .= $a->get_string();
             }
             // noVNC
             if (!strcmp($this->cloudconfig->get_value_by_key('allow_vnc_access'), "true") && $show_pause_button) {
                 $a = $this->response->html->a();
                 $a->label = $this->lang['appliances']['plugin_novnc'];
                 $a->handler = "";
                 $a->css = 'plugin novnc';
                 $a->href = 'api.php?action=novnc&appliance_id=' . $appliance->id;
                 $a->target = '_blank';
                 $plugin_action .= $a->get_string();
             }
             if ($cloudappliance_state === 'active' || $cloudappliance_state === 'paused') {
                 // appliance update
                 $a = $this->response->html->a();
                 $a->title = $this->lang['appliances']['action_update'];
                 $a->label = $this->lang['appliances']['action_update'];
                 $a->handler = "";
                 $a->css = 'edit';
                 $a->href = $this->response->get_url($this->actions_name, 'appliance_update') . '&' . $this->identifier_name . '=' . $this->cloudappliance->id;
                 $cloudappliance_action .= $a->get_string();
                 // deprovision
                 $a = $this->response->html->a();
                 $a->title = $this->lang['appliances']['action_deprovision'];
                 $a->label = $this->lang['appliances']['action_deprovision'];
                 $a->handler = "";
                 $a->css = 'remove';
                 $a->href = $this->response->get_url($this->actions_name, 'deprovision') . '&' . $this->identifier_name . '[]=' . $this->cloudappliance->id;
                 $cloudappliance_action .= $a->get_string();
             }
             $disk = intval($image_size);
             if ($disk >= 1000) {
                 $disk = round($disk / 1000, 2, PHP_ROUND_HALF_DOWN) . ' GB';
             } else {
                 $disk = $disk . ' MB';
             }
             $config_column = '<b>' . $this->lang['appliances']['id'] . '</b> ' . $this->cloudrequest->id . '<br>';
             $config_column .= '<b>' . $this->lang['create']['hostname'] . '</b> ' . $appliance->name . '<br>';
             $config_column .= '<b>' . $this->lang['create']['type'] . '</b> ' . $virtualization->name . '<br>';
             $config_column .= '<b>' . $this->lang['create']['cpu'] . '</b> ' . $str_cpu . '<br>';
             $config_column .= '<b>' . $this->lang['create']['ram'] . '</b> ' . $str_ram . '<br>';
             $config_column .= '<b>' . $this->lang['create']['kernel'] . '</b> ' . $kernel->name . '<br>';
             $config_column .= '<b>' . $this->lang['create']['disk'] . '</b> ' . $disk . '<br>';
             $config_column .= '<b>' . $this->lang['create']['image'] . '</b> ' . $image->name . '<br>';
             $config_column .= '<b>IP</b> ' . $appliance_resources_str;
             $comment = $appliance->comment . '<hr>' . $plugin_action;
             if ($cloudappliance_state === 'busy') {
                 $comment = $this->lang['appliances']['error_command_running'];
                 $comment = $appliance->comment . '<hr><div class="busy_appliance">&#160;</div>';
             }
             #$comment .= '<textarea id="'.$this->cloudrequest->id.'" style="height:60px;width:95%;font-size:10px;"></textarea><script>get_state("'.$this->cloudrequest->id.'");</script>';
             $ta[] = array('id' => $this->cloudappliance->id, 'state' => '<span class="pill ' . $cloudappliance_state . '">' . $cloudappliance_state . '</span>', 'name' => $appliance->name, 'type' => $virtualization->name, 'cpu' => $this->cloudrequest->cpu_req, 'ram' => $this->cloudrequest->ram_req, 'disk' => $image_size, 'kernel' => $kernel->name, 'image' => $image->name, 'config' => $config_column, 'comment' => $comment, 'action' => $cloudappliance_action);
             $app_count++;
         } else {
             $this->cloudrequest->get_instance_by_id($reqid);
             $state = $this->cloudrequest->getstatus($this->cloudrequest->id);
             if ($state !== 'done') {
                 $kernel = $this->openqrm->kernel();
                 if (isset($this->cloudrequest->kernel_id) && $this->cloudrequest->kernel_id !== '') {
                     $kernel->get_instance_by_id($this->cloudrequest->kernel_id);
                 }
                 $image = $this->openqrm->image();
                 if (isset($this->cloudrequest->image_id) && $this->cloudrequest->image_id !== '') {
                     $image->get_instance_by_id($this->cloudrequest->image_id);
                 }
                 $virtualization = $this->openqrm->virtualization();
                 if (isset($this->cloudrequest->resource_type_req) && $this->cloudrequest->resource_type_req !== '') {
                     $virtualization->get_instance_by_id($this->cloudrequest->resource_type_req);
                 }
                 $disk = intval($this->cloudrequest->disk_req);
                 if ($disk >= 1000) {
                     $disk = round($disk / 1000, 2, PHP_ROUND_HALF_DOWN) . ' GB';
                 } else {
                     $disk = $disk . ' MB';
                 }
                 $config_column = '<b>' . $this->lang['appliances']['id'] . '</b> ' . $this->cloudrequest->id . '<br>';
                 $config_column .= '<b>' . $this->lang['create']['hostname'] . '</b> ' . $this->cloudrequest->appliance_hostname . '<br>';
                 $config_column .= '<b>' . $this->lang['create']['type'] . '</b> ' . $virtualization->name . '<br>';
                 $config_column .= '<b>' . $this->lang['create']['cpu'] . '</b> ' . $str_cpu . '<br>';
                 $config_column .= '<b>' . $this->lang['create']['ram'] . '</b> ' . $str_ram . '<br>';
                 $config_column .= '<b>' . $this->lang['create']['kernel'] . '</b> ' . $kernel->name . '<br>';
                 $config_column .= '<b>' . $this->lang['create']['disk'] . '</b> ' . $disk . '<br>';
                 $config_column .= '<b>' . $this->lang['create']['image'] . '</b> ' . $image->name . '<br>';
                 $config_column .= '<b>IP</b>';
                 $comment = '';
                 if (isset($this->lang['appliances']['info_' . $state])) {
                     $comment = $this->lang['appliances']['info_' . $state];
                 }
                 $ta[] = array('id' => $this->cloudrequest->id, 'state' => '<span class="pill ' . $state . '">' . $state . '</span>', 'name' => $this->cloudrequest->appliance_hostname, 'type' => $virtualization->name, 'cpu' => $this->cloudrequest->cpu_req, 'ram' => $this->cloudrequest->ram_req, 'disk' => $this->cloudrequest->disk_req, 'kernel' => $kernel->name, 'image' => $image->name, 'config' => $config_column, 'comment' => $comment, 'action' => '');
                 $app_count++;
             }
         }
     }
     // redirect if $ta is empty
     if (count($ta) > 0) {
         $table = $this->response->html->tablebuilder('cloud_table', $this->response->get_array($this->actions_name, 'appliances'));
         $table->css = 'htmlobject_table';
         $table->limit = 10;
         $table->id = 'cloud_appliances';
         $table->head = $h;
         $table->sort = 'state';
         $table->autosort = true;
         $table->sort_link = false;
         $table->actions_name = $this->actions_name;
         $table->form_action = $this->response->html->thisfile;
         $table->form_method = 'GET';
         $table->max = $app_count;
         $table->body = $ta;
         return $table;
     } else {
         $this->response->redirect($this->response->get_url($this->actions_name, 'create', $this->message_param, $this->lang['appliances']['msg_no_appliances_to_manage']));
     }
 }
Exemple #2
0
 function CloudApplianceGetDetails($method_parameters)
 {
     global $event;
     global $RootDir;
     $parameter_array = explode(',', $method_parameters);
     $mode = $parameter_array[0];
     $username = $parameter_array[1];
     $password = $parameter_array[2];
     $ca_id = $parameter_array[3];
     // check all user input
     for ($i = 0; $i <= 3; $i++) {
         if (!$this->check_param($parameter_array[$i])) {
             $event->log("cloudsoap->CloudApplianceGetDetails", $_SERVER['REQUEST_TIME'], 2, "cloud-soap-server.php", "Not allowing user-intput with special-characters : {$parameter_array[$i]}", "", "", 0, 0, 0);
             return;
         }
     }
     // check parameter count
     $parameter_count = count($parameter_array);
     if ($parameter_count != 4) {
         $event->log("cloudsoap->CloudApplianceGetDetails", $_SERVER['REQUEST_TIME'], 2, "cloud-soap-server.php", "Wrong parameter count {$parameter_count} ! Exiting.", "", "", 0, 0, 0);
         return;
     }
     // check authentication
     if (!$this->check_user($mode, $username, $password)) {
         $event->log("cloudsoap->CloudApplianceGetDetails", $_SERVER['REQUEST_TIME'], 2, "cloud-soap-server.php", "User authentication failed (mode {$mode})", "", "", 0, 0, 0);
         return;
     }
     $cr_appliance = new cloudappliance();
     $cr_appliance->get_instance_by_id($ca_id);
     // get the request to check for the user
     $cr = new cloudrequest();
     $cr->get_instance_by_id($cr_appliance->cr_id);
     $cl_user = new clouduser();
     $cl_user->get_instance_by_id($cr->cu_id);
     switch ($mode) {
         case 'user':
             if (strcmp($username, $cl_user->name)) {
                 $event->log("cloudsoap->CloudApplianceGetDetails", $_SERVER['REQUEST_TIME'], 2, "cloud-soap-server.php", "Cloud User {$username} is trying to get Details of Cloud User {$cl_user->name}!", "", "", 0, 0, 0);
                 return;
             }
             break;
     }
     $event->log("cloudsoap->CloudApplianceGetDetails", $_SERVER['REQUEST_TIME'], 5, "cloud-soap-server.php", "Providing details for Cloud appliance {$ca_id}", "", "", 0, 0, 0);
     $cloudappliance_details = array();
     // create the array to return
     $cloudappliance_details['id'] = $ca_id;
     // appliance details
     $appliance = new appliance();
     $appliance->get_instance_by_id($cr_appliance->appliance_id);
     $cloudappliance_details['appliance_name'] = $appliance->name;
     $cloudappliance_details['appliance_state'] = $appliance->state;
     $cloudappliance_details['appliance_comment'] = $appliance->comment;
     // resource details
     $resource = new resource();
     $resource->get_instance_by_id($appliance->resources);
     $cloudappliance_details['resource_id'] = $resource->id;
     $cloudappliance_details['resource_type'] = $resource->capabilities;
     $cloudappliance_details['resource_int_ip'] = $resource->ip;
     $cloudappliance_details['resource_uptime'] = $resource->uptime;
     $cloudappliance_details['resource_cpumodel'] = $resource->cpumodel;
     $cloudappliance_details['resource_cpunumber'] = $resource->cpunumber;
     $cloudappliance_details['resource_cpuspeed'] = $resource->cpuspeed;
     $cloudappliance_details['resource_load'] = $resource->load;
     $cloudappliance_details['resource_memtotal'] = $resource->memtotal;
     $cloudappliance_details['resource_memused'] = $resource->memused;
     $cloudappliance_details['resource_swaptotal'] = $resource->swaptotal;
     $cloudappliance_details['resource_swapused'] = $resource->swapused;
     // image details
     $image = new image();
     $image->get_instance_by_id($appliance->imageid);
     $cloudappliance_details['image_name'] = $image->name;
     $cloud_image = new cloudimage();
     $cloud_image->get_instance_by_image_id($image->id);
     $cloudappliance_details['disk_size'] = $cloud_image->disk_size;
     // kernel details
     $kernel = new kernel();
     $kernel->get_instance_by_id($appliance->kernelid);
     $cloudappliance_details['kernel_name'] = $kernel->name;
     // cloud-appliance details
     $cloudappliance_details['cloud_appliance_state'] = $cr_appliance->state;
     $cloudappliance_details['cloud_appliance_cr_id'] = $cr_appliance->cr_id;
     // finding the external ip
     $appliance_resources = $appliance->resources;
     if ($appliance_resources >= 0) {
         // an appliance with a pre-selected resource
         // ip-mgmt enabled ? if yes try to get the external ip
         $cloud_ip_mgmt_config = new cloudconfig();
         $cloud_ip_mgmt = $cloud_ip_mgmt_config->get_value(26);
         // ip-mgmt enabled ?
         if (!strcmp($cloud_ip_mgmt, "true")) {
             if (file_exists($RootDir . "/plugins/ip-mgmt/.running")) {
                 require_once $RootDir . "/plugins/ip-mgmt/class/ip-mgmt.class.php";
                 $ip_mgmt = new ip_mgmt();
                 $ip_mgmt_id = $ip_mgmt->get_id_by_appliance($cr_appliance->appliance_id, 1);
                 if ($ip_mgmt_id > 0) {
                     $ipmgmt_config_arr = $ip_mgmt->get_config_by_id($ip_mgmt_id);
                     if (!strlen($ipmgmt_config_arr[0]['ip_mgmt_address'])) {
                         $event->log("cloudsoap->CloudApplianceGetDetails", $_SERVER['REQUEST_TIME'], 2, "cloud-soap-server.php", "Failed to get the external ip address for appliance id " . $cr_appliance->appliance_id . ". Falling back to internal ip!", "", "", 0, 0, 0);
                     } else {
                         $appliance_ip = $ipmgmt_config_arr[0]['ip_mgmt_address'];
                     }
                 } else {
                     $resource->get_instance_by_id($appliance->resources);
                     $appliance_ip = $resource->ip;
                 }
             } else {
                 // use internal ip
                 $event->log("cloudsoap->CloudApplianceGetDetails", $_SERVER['REQUEST_TIME'], 2, "cloud-soap-server.php", "IP-Mgmt is not enabled/available on this openQRM Cloud!", "", "", 0, 0, 0);
                 $resource->get_instance_by_id($appliance->resources);
                 $appliance_ip = $resource->ip;
             }
         } else {
             // in case no external ip was given to the appliance we show the internal ip
             $resource->get_instance_by_id($appliance->resources);
             $appliance_ip = $resource->ip;
         }
     } else {
         // an appliance with resource auto-select enabled
         $appliance_ip = "auto-select";
     }
     $cloudappliance_details['cloud_appliance_ip'] = $appliance_ip;
     return $cloudappliance_details;
 }
    function login()
    {
        $form = $this->response->get_form($this->actions_name, 'login');
        $cloud_cloudappliance_id_arr = $this->response->html->request()->get($this->identifier_name);
        $show_ip_mgmt = false;
        if (!strcmp($this->cloudconfig->get_value_by_key('ip-management'), "true")) {
            $show_ip_mgmt = true;
        }
        if (!strcmp($this->cloudconfig->get_value_by_key('show_sshterm_login'), "true")) {
            // is sshterm plugin enabled + started ?
            if (file_exists($this->rootdir . "/plugins/sshterm/.running")) {
                // get the parameters from the plugin config file
                $OPENQRM_PLUGIN_SSHTERM_CONFIG_FILE = $this->OPENQRM_SERVER_BASE_DIR . "/openqrm/plugins/sshterm/etc/openqrm-plugin-sshterm.conf";
                $store = openqrm_parse_conf($OPENQRM_PLUGIN_SSHTERM_CONFIG_FILE);
                extract($store);
                foreach ($cloud_cloudappliance_id_arr as $key => $cloudappliance_id) {
                    $this->cloudappliance->get_instance_by_id($cloudappliance_id);
                    $this->appliance->get_instance_by_id($this->cloudappliance->appliance_id);
                    $this->cloudrequest->get_instance_by_id($this->cloudappliance->cr_id);
                    if ($this->cloudrequest->cu_id != $this->clouduser->id) {
                        // not request of the authuser
                        exit(1);
                    }
                    // here we check which ip to send to the user
                    // check ip-mgmt
                    $sshterm_login_ip = '';
                    if ($show_ip_mgmt) {
                        if (file_exists($this->rootdir . "/plugins/ip-mgmt/.running")) {
                            require_once $this->rootdir . "/plugins/ip-mgmt/class/ip-mgmt.class.php";
                            $ip_mgmt = new ip_mgmt();
                            $appliance_first_nic_ip_mgmt_id = $ip_mgmt->get_id_by_appliance($this->cloudappliance->appliance_id, 1);
                            if ($appliance_first_nic_ip_mgmt_id > 0) {
                                $appliance_ip_mgmt_config_arr = $ip_mgmt->get_instance('id', $appliance_first_nic_ip_mgmt_id);
                                if (isset($appliance_ip_mgmt_config_arr['ip_mgmt_address'])) {
                                    $sshterm_login_ip = $appliance_ip_mgmt_config_arr['ip_mgmt_address'];
                                }
                            }
                        }
                    }
                    if (!strlen($sshterm_login_ip)) {
                        // in case no external ip was given to the appliance we show the internal ip
                        $this->resourde->get_instance_by_id($this->appliance->resources);
                        $sshterm_login_ip = $this->resourde->ip;
                    }
                    if (!strlen($sshterm_login_ip)) {
                        continue;
                    }
                    $redirect_url = "https://{$sshterm_login_ip}:{$OPENQRM_PLUGIN_WEBSHELL_PORT}";
                    $left = 50 + $cloudappliance_id * 50;
                    $top = 100 + $cloudappliance_id * 50;
                    // add the javascript function to open an sshterm
                    ?>
								<script type="text/javascript">
								function open_sshterm (url) {
									sshterm_window = window.open(url, "<?php 
                    echo $sshterm_login_ip;
                    ?>
", "width=580,height=420,scrollbars=1,left=<?php 
                    echo $left;
                    ?>
,top=<?php 
                    echo $top;
                    ?>
");
									open_sshterm.focus();
								}
								open_sshterm("<?php 
                    echo $redirect_url;
                    ?>
");
								</script>
					<?php 
                }
            }
        }
        flush();
        $this->response->redirect($this->response->get_url($this->actions_name, 'appliances'));
        return $form;
    }