public static function create_from_server_report($server_id_, $xml_input_) { $server = Abstract_Server::load($server_id_); if ($server === false) { return; } $external_name = $server->getExternalName(); $dom = new DomDocument('1.0', 'utf-8'); $dom->loadXML($xml_input_); if (!is_object($dom)) { return null; } $node = $dom->getElementsByTagName('cpu'); if ($node->length > 0) { $cpu = round($node->item(0)->getAttribute('load'), 2); } else { $cpu = -1; } $node = $dom->getElementsByTagName('ram'); if ($node->length > 0) { $total = (double) $server->ram_total; $used = (double) $node->item(0)->getAttribute('used'); if ($total > 0) { $ram = round($used / $total * 100, 2); } else { $ram = 0; } } else { $ram = -1; } $sessions = $dom->getElementsByTagName('session'); $apps_link = application_desktops_to_ids(); $sessions_infos = array(); $applications_infos = array(); /* the interesting <session> nodes of the xml are like: <session id="ID" mode="MODE" status="STATUS" user="******"> <instance application="APP_ID" id="ApS_ID"/> </session> */ foreach ($sessions as $session) { $sessid = $session->getAttribute('id'); $sessions_infos[$sessid] = $session->getAttribute('user'); foreach ($session->childNodes as $instance_node) { if ($instance_node->tagName == 'instance') { $desktop = $instance_node->getAttribute('application'); if (!array_key_exists($desktop, $apps_link)) { continue; } $id = $apps_link[$desktop]; if (!array_key_exists($id, $applications_infos)) { $applications_infos[$id] = array(); } $applications_infos[$id][] = $sessid; } } } $data = self::infos2Xml($sessions_infos, $applications_infos); $report = new self(time(), $server_id_, $server->fqdn, $external_name, $cpu, $ram, $data); return $report; }
private function compute_load() { $server = Abstract_Server::load($this->fqdn); if ($server === false) { return; } if (!is_object($this->dom)) { return; } $node = $this->dom->getElementsByTagName('cpu'); if ($node->length > 0) { $this->cpu = round($node->item(0)->getAttribute('load'), 2); } else { $this->cpu = -1; } $node = $this->dom->getElementsByTagName('ram'); if ($node->length > 0) { $total = (double) $server->ram_total; $used = (double) $node->item(0)->getAttribute('used'); if ($total > 0) { $this->ram = round($used / $total * 100, 2); } else { $this->ram = 0; } } else { $this->ram = -1; } }
function do_create_task($fqdn_) { $server = Abstract_Server::load($fqdn_); if (!is_object($server)) { Logger::error('main', '(ajax/installable_applications) Server ' . $fqdn_ . ' not found'); header('Content-Type: text/xml; charset=utf-8'); $dom = new DomDocument('1.0', 'utf-8'); $node = $dom->createElement('usage'); $node->setAttribute('status', 'server not found'); $dom->appendChild($node); die($dom->saveXML()); } $task = new Task_available_applications('', $fqdn_); $manager = new Tasks_Manager(); $manager->add($task); header('Content-Type: text/xml; charset=utf-8'); $dom = new DomDocument('1.0', 'utf-8'); $node = $dom->createElement('task'); $node->setAttribute('id', $task->id); $dom->appendChild($node); die($dom->saveXML()); }
function download_log($where_, $name_, $server_ = NULL) { if ($where_ == 'sm') { header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=sessionmanager_' . $name_); $filename = SESSIONMANAGER_LOGS . '/main.log'; $fp = @fopen($filename, 'r'); if ($fp !== false) { while ($str = fgets($fp, 4096)) { echo $str; } } @fclose($fp); } elseif ($where_ == 'aps') { header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=slaveserver_' . $server_ . '.log'); $server = Abstract_Server::load($server_); if (!$server) { Logger::error('main', '(admin/logs) download_log() - cannot load Server \'' . $server_ . '\''); redirect(); } $buf = new Server_Logs($server); $buf->process(); while ($str = $buf->getContent()) { echo $str; } } die; }
* along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **/ require_once dirname(__FILE__) . '/../includes/core-minimal.inc.php'; function return_error($errno_, $errstr_) { header('Content-Type: text/xml; charset=utf-8'); $dom = new DomDocument('1.0', 'utf-8'); $node = $dom->createElement('error'); $node->setAttribute('id', $errno_); $node->setAttribute('message', $errstr_); $dom->appendChild($node); Logger::error('main', "(webservices/application_icon) return_error({$errno_}, {$errstr_})"); return $dom->saveXML(); } $server = Abstract_Server::load($_SERVER['REMOTE_ADDR']); if (!$server) { echo return_error(1, 'Server does not exist'); die; } if (!$server->isAuthorized()) { echo return_error(2, 'Server is not authorized'); die; } header('Content-Type: text/xml; charset=utf-8'); $dom = new DomDocument('1.0', 'utf-8'); $node = $dom->createElement('applications'); $applications = $server->getApplications(); if (is_array($applications)) { foreach ($applications as $app) { if (!$app->getAttribute('static')) {
} $application_node = $dom->createElement('application'); $application_node->setAttribute('id', $application->getAttribute('id')); $application_node->setAttribute('name', $application->getAttribute('name')); foreach ($application->getMimeTypes() as $mimetype) { $mimetype_node = $dom->createElement('mime'); $mimetype_node->setAttribute('type', $mimetype); $application_node->appendChild($mimetype_node); } $server_node->appendChild($application_node); } $session_node->appendChild($server_node); } elseif ($session->mode == Session::MODE_APPLICATIONS) { $defined_apps = array(); foreach ($session->servers[Server::SERVER_ROLE_APS] as $fqdn => $data) { $server = Abstract_Server::load($fqdn); if (!$server) { continue; } if (!is_array($server->roles) || !array_key_exists(Server::SERVER_ROLE_APS, $server->roles)) { continue; } $server_applications = $server->getApplications(); if (!is_array($server_applications)) { $server_applications = array(); } $available_applications = array(); foreach ($server_applications as $server_application) { $available_applications[] = $server_application->getAttribute('id'); } $server_node = $dom->createElement('server');
* You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **/ require_once dirname(__FILE__) . '/../includes/core-minimal.inc.php'; Logger::debug('main', 'Starting webservices/application.php'); if (!isset($_GET['id'])) { Logger::error('main', '(webservices/application) Missing parameter : id'); header('HTTP/1.1 400 Bad Request'); die('ERROR - NO $_GET[\'id\']'); } if (!isset($_GET['fqdn'])) { Logger::error('main', '(webservices/application) Missing parameter : fqdn'); die('ERROR - NO $_GET[\'fqdn\']'); } $buf = Abstract_Server::load($_GET['fqdn']); if (!$buf || !$buf->isAuthorized()) { Logger::error('main', '(webservices/application) Server not authorized : ' . $_GET['fqdn'] . ' == ' . @gethostbyname($_GET['fqdn']) . ' ?'); die('Server not authorized'); } Logger::debug('main', '(webservices/application) Security check OK'); $prefs = Preferences::getInstance(); if (!$prefs) { die_error('get Preferences failed', __FILE__, __LINE__); } $mods_enable = $prefs->get('general', 'module_enable'); if (!in_array('ApplicationDB', $mods_enable)) { Logger::error('main', '(webservices/application) Module ApplicationDB must be enabled'); header('HTTP/1.1 400 Bad Request'); die; }
function show_icon($id, $applicationDB) { $applicationsGroupDB = ApplicationsGroupDB::getInstance(); $app = $applicationDB->import($id); if (!is_object($app)) { return false; } // die_error('Unable to import application "'.$id.'"',__FILE__,__LINE__); if ($app->getAttribute('static')) { redirect('applications_static.php?action=manage&id=' . $app->getAttribute('id')); } $is_rw = $applicationDB->isWriteable(); $liaisons = Abstract_Liaison::load('ApplicationServer', $app->getAttribute('id'), NULL); $servers = array(); foreach ($liaisons as $liaison) { $server = Abstract_Server::load($liaison->group); if (!$server->isOnline()) { continue; } $servers[] = $server; } page_header(); echo '<div>'; echo '<h1><img src="media/image/cache.php?id=' . $app->getAttribute('id') . '" alt="" title="" /> ' . $app->getAttribute('name') . '</h1>'; echo '<table class="main_sub" border="0" cellspacing="1" cellpadding="3">'; echo '<tr class="title">'; echo '<th>' . _('Package') . '</th>'; echo '<th>' . _('Type') . '</th>'; // echo '<th>'._('Status').'</th>'; echo '<th>' . _('Description') . '</th>'; echo '<th>' . _('Executable') . '</th>'; echo '</tr>'; echo '<tr class="content1">'; echo '<td>' . $app->getAttribute('package') . '</td>'; echo '<td style="text-align: center;"><img src="media/image/server-' . $app->getAttribute('type') . '.png" alt="' . $app->getAttribute('type') . '" title="' . $app->getAttribute('type') . '" /><br />' . $app->getAttribute('type') . '</td>'; // echo '<td>'.$status.'</td>'; echo '<td>' . $app->getAttribute('description') . '</td>'; echo '<td>' . $app->getAttribute('executable_path') . '</td>'; echo '</tr>'; echo '</table>'; echo '<br />'; echo '<h2>' . _('Select an icon from an Application Server') . '</h2>'; echo '<table border="0" cellspacing="1" cellpadding="5">'; foreach ($servers as $server) { $ret = query_url($server->getBaseURL() . '/aps/application/icon/' . $app->getAttribute('id')); if (!$ret) { continue; } $imgfile = tempnam(NULL, 'ico'); @file_put_contents($imgfile, $ret); try { if (class_exists('Imagick')) { $imagick = new Imagick(); $imagick->readImage($imgfile); } else { if (file_exists($imgfile)) { @unlink($imgfile); } continue; } } catch (Exception $e) { if (file_exists($imgfile)) { @unlink($imgfile); } continue; } if (!file_exists($imgfile)) { continue; } echo '<tr>'; echo '<td style="width: 32px;"><img src="media/image/temp_icon.php?tempnam=' . basename($imgfile) . '" /></td><td><a href="servers.php?action=manage&fqdn=' . $server->getAttribute('fqdn') . '">' . $server->getAttribute('fqdn') . '</a></td><td><form action="actions.php" method="post"><input type="hidden" name="name" value="Application" /><input type="hidden" name="action" value="icon" /><input type="hidden" name="id" value="' . $app->getAttribute('id') . '" /><input type="hidden" name="server" value="' . $server->getAttribute('fqdn') . '" /><input type="submit" value="' . _('Select this icon') . '" /></form></td>'; echo '</tr>'; } echo '</table>'; echo '<br />'; echo '<h2>' . _('Upload an icon') . '</h2>'; echo '<table border="0" cellspacing="1" cellpadding="5">'; echo '<tr>'; echo '<td>'; echo '<form action="actions.php" method="post" enctype="multipart/form-data" >'; // form A echo '<input type="hidden" name="name" value="Application" />'; echo '<input type="hidden" name="action" value="icon" />'; echo '<input type="hidden" name="id" value="' . $app->getAttribute('id') . '" />'; echo '<input type="file" name="file_icon" /> '; echo '<input type="submit" value="' . _('Upload this icon') . '" />'; echo '</form>'; echo '</td>'; echo '</tr>'; echo '</table>'; echo '</div>'; page_footer(); die; }
return false; } if (!$node->hasAttribute('name')) { return false; } if (!$node->hasAttribute('status')) { return false; } return array('name' => $node->getAttribute('name'), 'status' => $node->getAttribute('status')); } $ret = parse_server_status_XML(@file_get_contents('php://input')); if (!$ret) { echo return_error(1, 'Server does not send a valid XML'); die; } $server = Abstract_Server::load($ret['name']); if (!$server) { echo return_error(2, 'Server does not exist'); die; } if (!$server->isAuthorized()) { echo return_error(3, 'Server is not authorized'); die; } $old_roles = $server->getAttribute('roles'); if ($ret['status'] == Server::SERVER_STATUS_ONLINE) { if (!$server->getConfiguration()) { echo return_error(4, 'Server does not send a valid configuration'); die; } }
public static function removeRole($fqdn_, $role_) { Logger::debug('main', "Starting Abstract_Server::removeRole for '{$fqdn_}' removing '{$role_}'"); if (substr($fqdn_, -1) == '.') { $fqdn_ = substr($fqdn_, 0, strlen($fqdn_) - 1); } $a_server = Abstract_Server::load($fqdn_); if (is_object($a_server) == false) { Logger::error('main', "Starting Abstract_Server::removeRole error failed to load server '{$fqdn_}'"); return false; } $roles = $a_server->getAttribute('roles'); if (is_array($roles) == false) { return false; } if (in_array($role_, $roles) == false) { return false; } switch ($role_) { case Server::SERVER_ROLE_APS: $prefs = Preferences::getInstance(); if (!$prefs) { die_error('get Preferences failed', __FILE__, __LINE__); } $slave_server_settings = $prefs->get('general', 'slave_server_settings'); $remove_orphan = (bool) $slave_server_settings['remove_orphan']; Abstract_Liaison::delete('ApplicationServer', NULL, $fqdn_); if ($remove_orphan) { $apps = $a_server->getApplications(); $applicationDB = ApplicationDB::getInstance(); // remove the orphan applications if (is_array($apps)) { foreach ($apps as $an_application) { if ($an_application->isOrphan()) { Logger::debug('main', "Abstract_Server::delete {$an_application} is orphan"); $applicationDB->remove($an_application); } } } } $tm = new Tasks_Manager(); $tm->load_from_server($fqdn_); foreach ($tm->tasks as $a_task) { $tm->remove($a_task->id); } break; case Server::SERVER_ROLE_FS: if (Preferences::moduleIsEnabled('ProfileDB')) { $profiledb = ProfileDB::getInstance(); $folders = $profiledb->importFromServer($fqdn_); foreach ($folders as $a_folder) { $profiledb->remove($a_folder->id); } } if (Preferences::moduleIsEnabled('SharedFolderDB')) { $sharedfolderdb = SharedFolderDB::getInstance(); $folders = $sharedfolderdb->importFromServer($fqdn_); foreach ($folders as $a_folder) { $profiledb->remove($a_folder->id); } } break; // case Server::SERVER_ROLE_GATEWAY: // break; } return true; }
function action_del_sharedfolder($sharedfolder_id) { $sharedfolderdb = SharedFolderDB::getInstance(); $sharedfolder = $sharedfolderdb->import($sharedfolder_id); if (!$sharedfolder) { popup_error(_('Unable to delete this shared folder')); return false; } $a_server = Abstract_Server::load($sharedfolder->server); if (!$a_server) { popup_error(sprintf(_("Unable to delete shared folder on file server '%s'"), $sharedfolder->server)); return false; } if ($sharedfolder->isUsed()) { popup_error(sprintf(_("Unable to delete shared folder '%s' because it is currently being used"), $sharedfolder->name)); return false; } $ret = $a_server->deleteNetworkFolder($sharedfolder->id); if (!$ret) { popup_error(sprintf(_("Unable to delete shared folder on file server '%s'"), $sharedfolder->server)); return false; } $buf = $sharedfolderdb->remove($sharedfolder); if (!$buf) { popup_error(_('Unable to delete this shared folder')); return false; } popup_info(_('Shared folder successfully deleted')); return true; }
public function prepareAPSAccess($session_) { $remote_desktop_settings = $this->user->getSessionSettings('remote_desktop_settings'); $default_settings = $this->user->getSessionSettings('session_settings_defaults'); $prepare_servers = array(); # No_desktop option management if (isset($this->no_desktop) && $this->no_desktop === true) { if ($authorize_no_desktop === true) { $no_desktop_process = 1; } else { Logger::warning('main', 'SessionManagement::prepareAPSAccess - Cannot apply no_desktop parameter because policy forbid it'); } } if ($default_settings['use_known_drives'] == 1) { $use_known_drives = 'true'; } $profile_mode = $default_settings['profile_mode']; $use_local_ime = $session_->settings['use_local_ime']; $desktop_icons = $remote_desktop_settings['desktop_icons']; $need_valid_profile = $default_settings['start_without_profile'] == 0; $user_login_aps = $session_->settings['aps_access_login']; $user_password_aps = $session_->settings['aps_access_password']; $user_login_fs = $session_->settings['fs_access_login']; $user_password_fs = $session_->settings['fs_access_password']; $remote_desktop_settings = $this->user->getSessionSettings('remote_desktop_settings'); $allow_external_applications = array_key_exists('allow_external_applications', $remote_desktop_settings) && $remote_desktop_settings['allow_external_applications'] == 1; if (isset($this->language)) { $locale = locale2unix($this->language); } else { $locale = $this->user->getLocale(); } if (isset($this->timezone) && $this->timezone != '') { $timezone = $this->timezone; } if ($session_->mode == Session::MODE_DESKTOP) { $have_external_apps = false; if (array_key_exists(Server::SERVER_ROLE_APS, $session_->servers)) { $have_external_apps |= count($session_->servers[Server::SERVER_ROLE_APS]) > 1; } if (array_key_exists(Server::SERVER_ROLE_WEBAPPS, $session_->servers)) { $have_external_apps |= count($session_->servers[Server::SERVER_ROLE_WEBAPPS]) > 0; } if ($session_->mode == Session::MODE_DESKTOP && $allow_external_applications && $have_external_apps) { $external_apps_token = new Token(gen_unique_string()); $external_apps_token->type = 'external_apps'; $external_apps_token->link_to = $session_->id; $external_apps_token->valid_until = 0; Abstract_Token::save($external_apps_token); } $prepare_servers[] = $session_->server; } if ($session_->mode == Session::MODE_APPLICATIONS || $session_->mode == Session::MODE_DESKTOP && $allow_external_applications) { foreach ($session_->servers[Server::SERVER_ROLE_APS] as $server_id => $data) { if ($session_->mode == Session::MODE_DESKTOP && $allow_external_applications && $server_id == $session_->server) { continue; } $prepare_servers[] = $server_id; } } $count_prepare_servers = 0; foreach ($prepare_servers as $prepare_server) { $count_prepare_servers++; $server = Abstract_Server::load($prepare_server); if (!$server) { continue; } if (!array_key_exists(Server::SERVER_ROLE_APS, $server->getRoles())) { continue; } $server_applications = $server->getApplications(); if (!is_array($server_applications)) { $server_applications = array(); } $available_applications = array(); foreach ($server_applications as $server_application) { $available_applications[] = $server_application->getAttribute('id'); } $dom = new DomDocument('1.0', 'utf-8'); $session_node = $dom->createElement('session'); $session_node->setAttribute('id', $session_->id); $session_node->setAttribute('mode', $session_->mode == Session::MODE_DESKTOP && $count_prepare_servers == 1 ? Session::MODE_DESKTOP : Session::MODE_APPLICATIONS); // OvdShell Configuration $shell_node = $dom->createElement('shell'); $session_node->appendChild($shell_node); if (isset($external_apps_token)) { $setting_node = $dom->createElement('setting'); $setting_node->setAttribute('name', 'external_apps_token'); $setting_node->setAttribute('value', $external_apps_token->id); $shell_node->appendChild($setting_node); } if (isset($this->start_apps) && is_array($this->start_apps)) { $start_apps = $this->start_apps; $applicationDB = ApplicationDB::getInstance(); foreach ($start_apps as $start_app) { $app = $applicationDB->import($start_app['id']); if (!is_object($app)) { Logger::error('main', 'SessionManagement::prepareAPSAccess - No such application for id \'' . $start_app['id'] . '\''); throw_response(SERVICE_NOT_AVAILABLE); } $apps = $session_->getPublishedApplications(); $ok = false; foreach ($apps as $user_app) { if ($user_app->getAttribute('id') == $start_app['id']) { $ok = true; break; } } if ($ok === false) { Logger::error('main', 'SessionManagement::prepareAPSAccess - Application not available for user \'' . $user->getAttribute('login') . '\' id \'' . $start_app['id'] . '\''); return false; } } } foreach (array('no_desktop_process', 'use_known_drives', 'profile_mode', 'use_local_ime') as $parameter) { if (!isset(${$parameter})) { continue; } $setting_node = $dom->createElement('setting'); $setting_node->setAttribute('name', $parameter); $setting_node->setAttribute('value', ${$parameter}); $shell_node->appendChild($setting_node); } foreach (array('desktop_icons', 'locale', 'timezone', 'need_valid_profile') as $parameter) { if (!isset(${$parameter})) { continue; } $parameter_node = $dom->createElement('parameter'); $parameter_node->setAttribute('name', $parameter); $parameter_node->setAttribute('value', ${$parameter}); $session_node->appendChild($parameter_node); } $scripts = $this->user->scripts(); if (is_array($scripts)) { $scripts_node = $dom->createElement('scripts'); foreach ($scripts as $script) { $script_node = $dom->createElement('script'); $script_node->setAttribute('id', $script->getAttribute('id')); $script_node->setAttribute('type', $script->getAttribute('type')); $script_node->setAttribute('name', $script->getAttribute('name')); $scripts_node->appendChild($script_node); } $shell_node->appendChild($scripts_node); } $user_node = $dom->createElement('user'); $user_node->setAttribute('login', $user_login_aps); $user_node->setAttribute('password', $user_password_aps); $user_node->setAttribute('displayName', $this->user->getAttribute('displayname')); $session_node->appendChild($user_node); if (array_key_exists(Server::SERVER_ROLE_FS, $session_->servers)) { foreach ($session_->servers[Server::SERVER_ROLE_FS] as $server_id => $netfolders) { $fs_server = Abstract_Server::load($server_id); foreach ($netfolders as $netfolder) { $uri = 'cifs://' . $fs_server->getExternalName() . '/' . $netfolder['dir']; $netfolder_node = $dom->createElement($netfolder['type']); $netfolder_node->setAttribute('rid', $netfolder['rid']); $netfolder_node->setAttribute('uri', $uri); if ($netfolder['type'] == 'profile') { $netfolder_node->setAttribute('profile_mode', $profile_mode); } if ($netfolder['type'] == 'sharedfolder') { $netfolder_node->setAttribute('name', $netfolder['name']); $netfolder_node->setAttribute('mode', $netfolder['mode']); } $netfolder_node->setAttribute('login', $user_login_fs); $netfolder_node->setAttribute('password', $user_password_fs); $session_node->appendChild($netfolder_node); } } } foreach ($this->forced_sharedfolders as $share) { $sharedfolder_node = $dom->createElement('sharedfolder'); $sharedfolder_node->setAttribute('rid', $share['rid']); $sharedfolder_node->setAttribute('uri', $share['uri']); $sharedfolder_node->setAttribute('name', $share['name']); if (array_key_exists('login', $share) && array_key_exists('password', $share)) { $sharedfolder_node->setAttribute('login', $share['login']); $sharedfolder_node->setAttribute('password', $share['password']); } $session_node->appendChild($sharedfolder_node); } // Pass custom shared folders to the server foreach (Plugin::dispatch('getSharedFolders', $server) as $plugin => $results) { foreach ($results as $sharedfolder) { $sharedfolder_ok = true; $sharedfolder_node = $dom->createElement('sharedfolder'); foreach (array('uri', 'name', 'rid') as $key) { if (array_key_exists($key, $sharedfolder)) { $sharedfolder_node->setAttribute($key, $sharedfolder[$key]); } else { Logger::error('main', 'SharedFolder is missing ' . $key . ' parameter in ' . $plugin); $sharedfolder_ok = false; } } foreach (array('login', 'password') as $key) { if (array_key_exists($key, $sharedfolder)) { $sharedfolder_node->setAttribute($key, $sharedfolder[$key]); } } if (($have_login = array_key_exists('login', $sharedfolder)) != array_key_exists('password', $sharedfolder) && $have_login) { Logger::error('main', 'SharedFolder login and password are both required if one is present in ' . $plugin); $sharedfolder_ok = false; } if ($sharedfolder_ok) { $session_node->appendChild($sharedfolder_node); } } } foreach ($session_->getPublishedApplications() as $application) { if ($application->getAttribute('type') != $server->getAttribute('type')) { continue; } if (!in_array($application->getAttribute('id'), $available_applications)) { continue; } $application_node = $dom->createElement('application'); $application_node->setAttribute('id', $application->getAttribute('id')); $application_node->setAttribute('name', $application->getAttribute('name')); if (!$application->getAttribute('static')) { $application_node->setAttribute('mode', 'local'); } else { $application_node->setAttribute('mode', 'static'); } $session_node->appendChild($application_node); } if (isset($start_apps) && is_array($start_apps)) { $start_node = $dom->createElement('start'); foreach ($start_apps as $start_app) { $application_node = $dom->createElement('application'); $application_node->setAttribute('app_id', $start_app['id']); if (array_key_exists('arg', $start_app) && !is_null($start_app['arg'])) { $application_node->setAttribute('arg', $start_app['arg']); } if (array_key_exists('file', $start_app)) { $file_node = $dom->createElement('file'); $file_node->setAttribute('type', $start_app['file']['type']); $file_node->setAttribute('location', $start_app['file']['location']); $file_node->setAttribute('path', $start_app['file']['path']); $application_node->appendChild($file_node); } $start_node->appendChild($application_node); } $session_node->appendChild($start_node); } $dom->appendChild($session_node); $this->appendToSessionCreateXML($dom); $xml = $dom->saveXML(); $session_create_xml = query_url_post_xml($server->getBaseURL() . '/aps/session/create', $xml); $ret = $this->parseSessionCreate($session_create_xml); if (!$ret) { Logger::critical('main', 'SessionManagement::prepareAPSAccess - Unable to create Session \'' . $session->id . '\' for User \'' . $session->user_login . '\' on Server \'' . $server->fqdn . '\', aborting'); $session->orderDeletion(true, Session::SESSION_END_STATUS_ERROR); return false; } } return true; }
public function orderDisonnect() { Logger::debug('main', 'Starting Session::orderDisonnect for \'' . $this->id . '\''); $servers = array(); if ($this->mode == self::MODE_DESKTOP) { array_push($servers, $this->server); } else { if (!array_key_exists(Server::SERVER_ROLE_APS, $this->servers)) { Logger::error('main', 'Unable to disconnect session because not using any ApS servers'); return false; } $servers = array_keys($this->servers[Server::SERVER_ROLE_APS]); } $ret = true; foreach ($servers as $server_id) { $server = Abstract_Server::load($server_id); if (!$server) { Logger::error('main', 'Session::orderDisonnect Unable to load server \'' . $server_id . '\''); $ret = false; } $res = $server->orderSessionDisconnect($this->id); if (!$res) { $ret = false; } } return $ret; }
function checkup_liaison($type_, $element_, $group_) { switch ($type_) { case 'ApplicationServer': $applicationDB = ApplicationDB::getInstance(); $buf = $applicationDB->import($element_); if (!is_object($buf)) { return 'Application "' . $element_ . '" does not exist'; } $buf = Abstract_Server::load($group_); if (!$buf) { return 'Server "' . $group_ . '" does not exist'; } break; case 'AppsGroup': $applicationDB = ApplicationDB::getInstance(); $buf = $applicationDB->import($element_); if (!is_object($buf)) { return 'Application "' . $element_ . '" does not exist'; } $applicationsGroupDB = ApplicationsGroupDB::getInstance(); $buf = $applicationsGroupDB->import($group_); if (!is_object($buf)) { return 'ApplicationsGroup "' . $group_ . '" does not exist'; } break; case 'ApplicationMimeType': $applicationDB = ApplicationDB::getInstance(); $buf = $applicationDB->import($element_); if (!is_object($buf)) { return 'Application "' . $element_ . '" does not exist'; } break; case 'ServerSession': $buf = Abstract_Server::load($element_); if (!$buf) { return 'Server "' . $element_ . '" does not exist'; } $buf = Abstract_Session::load($group_); if (!$buf) { return 'Session "' . $group_ . '" does not exist'; } break; case 'UserGroupSharedFolder': $sharedfolderdb = SharedFolderDB::getInstance(); $userGroupDB = UserGroupDB::getInstance(); $buf = $userGroupDB->import($element_); if (!is_object($buf)) { return 'UserGroup "' . $element_ . '" does not exist'; } $buf = $sharedfolderdb->import($group_); if (!$buf) { return 'SharedFolder "' . $group_ . '" does not exist'; } break; case 'UserProfile': $profiledb = ProfileDB::getInstance(); $userDB = UserDB::getInstance(); $buf = $userDB->import($element_); if (!is_object($buf)) { return 'User "' . $element_ . '" does not exist'; } $buf = $profiledb->import($group_); if (!$buf) { return 'Profile "' . $group_ . '" does not exist'; } break; case 'UsersGroup': $userDB = UserDB::getInstance(); $buf = $userDB->import($element_); if (!is_object($buf)) { return 'User "' . $element_ . '" does not exist'; } $userGroupDB = UserGroupDB::getInstance(); $buf = $userGroupDB->import($group_); if (!is_object($buf)) { return 'UserGroup "' . $group_ . '" does not exist'; } break; case 'UsersGroupApplicationsGroup': $userGroupDB = UserGroupDB::getInstance(); $buf = $userGroupDB->import($element_); if (!is_object($buf)) { return 'UserGroup "' . $element_ . '" does not exist'; } $applicationsGroupDB = ApplicationsGroupDB::getInstance(); $buf = $applicationsGroupDB->import($group_); if (!is_object($buf)) { return 'ApplicationsGroup "' . $group_ . '" does not exist'; } break; case 'UsersGroupCached': $userDB = UserDB::getInstance(); $buf = $userDB->import($element_); if (!is_object($buf)) { return 'User "' . $element_ . '" does not exist'; } $userGroupDB = UserGroupDB::getInstance(); $buf = $userGroupDB->import($group_); if (!is_object($buf)) { return 'UserGroup "' . $group_ . '" does not exist'; } break; } return true; }
$server->locked = false; } $server->external_name = $server->fqdn; $server->max_sessions = 20; /* if (! $server->isAuthorized()) { echo return_error(1, 'Server is not authorized'); die(); } if (! $server->isOnline()) { echo return_error(2, 'Server is not OK'); die(); } if (! $server->isOK()) { echo return_error(3, 'Server is not online'); die(); } */ Abstract_Server::save($server); } else { $server = Abstract_Server::load($server_name); } header('Content-Type: text/xml; charset=utf-8'); $dom = new DomDocument('1.0', 'utf-8'); $node = $dom->createElement('server'); $node->setAttribute('name', $server->fqdn); $dom->appendChild($node); echo $dom->saveXML(); exit(0);
function parse_monitoring_XML($xml_) { if (!$xml_ || strlen($xml_) == 0) { return false; } $dom = new DomDocument('1.0', 'utf-8'); $buf = @$dom->loadXML($xml_); if (!$buf) { return false; } if (!$dom->hasChildNodes()) { return false; } $server_node = $dom->getElementsByTagName('server')->item(0); if (is_null($server_node)) { return false; } if (!$server_node->hasAttribute('name')) { return false; } if (!Abstract_Server::exists($server_node->getAttribute('name'))) { die; } // An unknown Server should not send monitoring, so we reject it... $server = Abstract_Server::load($server_node->getAttribute('name')); if (!$server) { return false; } if (!$server->isAuthorized()) { return false; } $ret = array('server' => $server_node->getAttribute('name')); $cpu_node = $dom->getElementsByTagName('cpu')->item(0); if (is_null($cpu_node)) { return false; } if (!$cpu_node->hasAttribute('load')) { return false; } $ret['cpu_load'] = $cpu_node->getAttribute('load'); $ram_node = $dom->getElementsByTagName('ram')->item(0); if (is_null($ram_node)) { return false; } if (!$ram_node->hasAttribute('used')) { return false; } $ret['ram_used'] = $ram_node->getAttribute('used'); $role_nodes = $dom->getElementsByTagName('role'); foreach ($role_nodes as $role_node) { if (!$role_node->hasAttribute('name')) { return false; } switch ($role_node->getAttribute('name')) { case 'ApplicationServer': $ret['sessions'] = array(); $session_nodes = $dom->getElementsByTagName('session'); foreach ($session_nodes as $session_node) { $ret['sessions'][$session_node->getAttribute('id')] = array('id' => $session_node->getAttribute('id'), 'server' => $_SERVER['REMOTE_ADDR'], 'status' => $session_node->getAttribute('status'), 'instances' => array()); $childnodes = $session_node->childNodes; foreach ($childnodes as $childnode) { if ($childnode->nodeName != 'instance') { continue; } $ret['sessions'][$session_node->getAttribute('id')]['instances'][$childnode->getAttribute('id')] = $childnode->getAttribute('application'); } $token = $session_node->getAttribute('id'); if (Abstract_ReportSession::exists($session_node->getAttribute('id'))) { $report = Abstract_ReportSession::load($session_node->getAttribute('id')); if (is_object($report)) { $report->update($session_node); } } } $sri = new ServerReportItem($ret['server'], $xml_); $sri->save(); break; case 'FileServer': $size_node = $dom->getElementsByTagName('size')->item(0); if (is_null($size_node)) { break; } $ret['disk_size'] = array('total' => NULL, 'free' => NULL); if ($size_node->hasAttribute('total')) { $ret['disk_size']['total'] = $size_node->getAttribute('total'); } if ($size_node->hasAttribute('free')) { $ret['disk_size']['free'] = $size_node->getAttribute('free'); } $ret['shares'] = array(); $share_nodes = $dom->getElementsByTagName('share'); foreach ($share_nodes as $share_node) { $ret['shares'][$share_node->getAttribute('id')] = array('id' => $share_node->getAttribute('id'), 'status' => $share_node->getAttribute('status'), 'users' => array()); $user_nodes = $share_node->getElementsByTagName('user'); foreach ($user_nodes as $user_node) { $ret['shares'][$share_node->getAttribute('id')]['users'][] = $user_node->getAttribute('login'); } } break; } } return $ret; }
private static function session2Xml($session_) { $dom = new DomDocument('1.0', 'utf-8'); $dom->formatOutput = true; $session_node = $dom->createElement('session'); $dom->appendChild($session_node); $session_node->setAttribute('id', $session_->id); $session_node->setAttribute('mode', $session_->mode); $user_node = $dom->createElement('user'); $session_node->appendChild($user_node); $user_node->setAttribute('login', $session_->user_login); $user_node->setAttribute('display_name', $session_->user_displayname); // Begin session servers part $servers_node = $dom->createElement('servers'); $session_node->appendChild($servers_node); $storage_resources = array(); foreach ($session_->servers as $role => $servers) { foreach ($servers as $server_id => $data) { $server_node = $dom->createElement('server'); $servers_node->appendChild($server_node); $server_node->setAttribute('id', $server_id); $server_node->setAttribute('role', $role); if ($session_->mode == Session::MODE_DESKTOP && $session_->server == $server_id) { $server_node->setAttribute('desktop_server', 'true'); } if (array_key_exists('dump', $data)) { foreach ($data['dump'] as $name => $dump) { $node = $dom->createElement('dump'); $node->setAttribute('name', $name); $server_node->appendChild($node); $textNode = $dom->createTextNode($dump); $node->appendChild($textNode); } } $server = Abstract_Server::load($server_id); if (!$server || $server->getAttribute('registered') === false) { continue; } $server_node->setAttribute('fqdn', $server->fqdn); $server_node->setAttribute('type', $server->type); if ($role == Server::SERVER_ROLE_FS) { foreach ($data as $i => $info) { $storage_resource = array('rid' => $info['rid'], 'type' => $info['type'], 'server_id' => $server_id, 'server_name' => $server->getDisplayName()); if ($info['type'] == 'sharedfolder') { $storage_resource['name'] = $info['name']; $storage_resource['mode'] = $info['mode']; } $storage_resources[$storage_resource['rid']] = $storage_resource; } } } } // Finish session servers part // Start storage part $storages_node = $dom->createElement('storages'); $session_node->appendChild($storages_node); foreach ($storage_resources as $storage_rid => $storage) { $node = $dom->createElement('storage'); $storages_node->appendChild($node); foreach ($storage as $k => $v) { $node->setAttribute($k, $v); } } // Finish storage part $applications = $dom->createElement('published_applications'); $session_node->appendChild($applications); foreach ($session_->getPublishedApplications() as $application_id => $application) { $app_node = $dom->createElement('application'); $applications->appendChild($app_node); $app_node->setAttribute('id', $application_id); $app_node->setAttribute('name', $application->getAttribute('name')); } $apps_instances_node = $dom->createElement('applications_instances'); $session_node->appendChild($apps_instances_node); foreach ($session_->getClosedApplications() as $instance_id => $instance) { $node = $dom->createElement('instance'); $apps_instances_node->appendChild($node); $node->setAttribute('id', $instance_id); $node->setAttribute('application', $instance['application']); $node->setAttribute('server', $instance['server']); $node->setAttribute('start', $instance['start']); $node->setAttribute('stop', $instance['stop']); } foreach ($session_->getRunningApplications() as $instance_id => $instance) { $node = $dom->createElement('instance'); $apps_instances_node->appendChild($node); $node->setAttribute('id', $instance_id); $node->setAttribute('application', $instance['application']); $node->setAttribute('server', $instance['server']); $node->setAttribute('start', $instance['start']); $node->setAttribute('stop', time()); } return $dom->saveXML(); }
public function remove($sharedfolder_id_) { Logger::debug('main', "SharedFolderDB::internal::remove({$sharedfolder_id_})"); $sharedfolder = $this->import($sharedfolder_id_); if (is_object($sharedfolder) == false) { Logger::error('main', "SharedFolderDB::internal::remove({$sharedfolder_id_}) failed, unable to import sharedfolder"); return false; } Abstract_Liaison::delete('UserGroupSharedFolder', NULL, $sharedfolder->id); $SQL = SQL::getInstance(); $SQL->DoQuery('DELETE FROM @1 WHERE @2 = %3 LIMIT 1', $SQL->prefix . self::$table, 'id', $sharedfolder->id); $server = Abstract_Server::load($sharedfolder->server); $server->deleteNetworkFolder($sharedfolder->id, true); return true; }
public function getDesktopServer($type_ = 'any') { if (!$this->user) { Logger::error('main', 'SessionManagement::getDesktopServer("' . $type_ . '") - User is not authenticated, aborting'); throw_response(AUTH_FAILED); } $allowed_servers = array(); $remote_desktop_settings = $this->user->getSessionSettings('remote_desktop_settings'); if (array_key_exists('allowed_desktop_servers', $remote_desktop_settings)) { $allowed_servers = $remote_desktop_settings['allowed_desktop_servers']; } $this->desktop_server = false; switch ($type_) { case Server::SERVER_TYPE_LINUX: case Server::SERVER_TYPE_WINDOWS: $user_applications = $this->user->applications($type_, true); $usable_servers = array(); foreach ($this->servers[Server::SERVER_ROLE_APS] as $fqdn => $data) { $server = Abstract_Server::load($fqdn); if (!$server) { continue; } if (count($allowed_servers) > 0) { if (!in_array($fqdn, $allowed_servers)) { Logger::info('main', 'SessionManagement::getDesktopServer("' . $type_ . '") - can\'t used server "' . $fqdn . '" as desktop server because not in allowed desktop servers list'); continue; } } if ($server->getAttribute('type') == $type_) { $usable_servers[$server->fqdn] = 0; $server_applications = $server->getApplications(); foreach ($server_applications as $server_application) { if (in_array($server_application, $user_applications)) { $usable_servers[$server->fqdn] += 1; } } } } break; case 'any': default: $user_applications = $this->user->applications(NULL, true); $usable_servers = array(); foreach ($this->servers[Server::SERVER_ROLE_APS] as $fqdn => $data) { $server = Abstract_Server::load($fqdn); if (!$server) { continue; } if (count($allowed_servers) > 0) { if (!in_array($fqdn, $allowed_servers)) { Logger::info('main', 'SessionManagement::getDesktopServer("' . $type_ . '") - can\'t used server "' . $fqdn . '" as desktop server because not in allowed desktop servers list'); continue; } } $usable_servers[$server->fqdn] = 0; $server_applications = $server->getApplications(); foreach ($server_applications as $server_application) { if (in_array($server_application, $user_applications)) { $usable_servers[$server->fqdn] += 1; } } } break; } arsort($usable_servers); if (count($usable_servers) > 0) { $this->desktop_server = array_shift(array_keys($usable_servers)); } if (!$this->desktop_server) { Logger::error('main', 'SessionManagement::getDesktopServer("' . $type_ . '") - No desktop server found for User "' . $this->user->getAttribute('login') . '", aborting'); return false; } return $this->desktop_server; }
public function orderAction($action_) { $server = Abstract_Server::load($this->server); if (!$server) { Logger::error('main', 'VDI_VM::orderAction unable to load Server \'' . $this->server . '\''); return false; } $dom = new DomDocument('1.0', 'utf-8'); $node = $dom->createElement('vm'); $node->setAttribute('id', $this->id); $node->setAttribute('action', $action_); $dom->appendChild($node); $xml = $dom->saveXML(); $xml = query_url_post_xml($server->getBaseURL() . '/hypervisor/vm/manage', $xml); if (!$xml) { $server->isUnreachable(); Logger::error('main', 'VDI_VM::orderAction server \'' . $server->fqdn . '\' is unreachable'); return false; } $dom = new DomDocument('1.0', 'utf-8'); $buf = @$dom->loadXML($xml); if (!$buf) { return false; } if (!$dom->hasChildNodes()) { return false; } $node = $dom->getElementsByTagname('vm')->item(0); if (is_null($node)) { return false; } $status = $node->getAttribute('status'); if ($status != 'OK') { Logger::error('main', 'VDI_VM::orderAction failed'); return false; } return true; }
function show_manage($fqdn) { $server = Abstract_Server::load($fqdn); if (!$server || $server->getAttribute('registered') === false) { redirect('servers.php'); } $server_online = $server->isOnline(); if ($server_online) { $buf = $server->getMonitoring(); if ($buf === false) { popup_error(sprintf(_('Cannot get server monitoring for \'%s\''), $server->getAttribute('fqdn'))); } Abstract_Server::save($server); } $buf_status = $server->getAttribute('status'); if ($buf_status == 'down') { $status_error_msg = _('Warning: server is offline'); } elseif ($buf_status == 'broken') { $status_error_msg = _('Warning: server is broken'); } $server_lock = $server->getAttribute('locked'); if ($server_lock) { $switch_button = _('Switch to production'); $switch_value = 0; } else { $switch_button = _('Switch to maintenance'); $switch_value = 1; } ksort($server->roles); $var = array(); foreach ($server->roles as $role => $bool) { $ret = server_display_role_preparation($role, $server); if (!is_bool($ret)) { $var[$role] = $ret; } else { Logger::debug('main', 'server_display_role_preparation failed for server ' . $server->fqdn . ' role ' . $role); } } $can_do_action = isAuthorized('manageServers'); page_header(); echo '<script type="text/javascript" src="media/script/ajax/servers.js" charset="utf-8"></script>'; echo '<div id="servers_div">'; echo '<h1>' . $server->fqdn . '</h1>'; // if ($server_online === false) // echo '<h2><p class="msg_error centered">'.$status_error_msg.'</p></h2>'; echo '<div class="section">'; echo '<h2>' . _('Monitoring') . '</h2>'; echo '<table class="main_sub" border="0" cellspacing="1" cellpadding="3">'; echo '<tr class="title">'; echo '<th>' . _('Type') . '</th><th>' . _('Version') . '</th><th>' . _('Status') . '</th>'; echo '<th>' . _('Details') . '</th>'; if ($server_online) { echo '<th>' . _('Monitoring') . '</th>'; } echo '</tr>'; echo '<tr class="content1">'; echo '<td style="text-align: center;"><img src="media/image/server-' . $server->stringType() . '.png" alt="' . $server->stringType() . '" title="' . $server->stringType() . '" /><br />' . $server->stringType() . '</td>'; echo '<td>' . $server->stringVersion() . '</td>'; echo '<td>' . $server->stringStatus() . '</td>'; echo '<td>' . _('CPU') . '; : ' . $server->getAttribute('cpu_model') . ' (' . $server->getAttribute('cpu_nb_cores') . ' '; echo $server->getAttribute('cpu_nb_cores') > 1 ? _('cores') : _('core'); echo ')<br />' . _('RAM') . ' : ' . round($server->getAttribute('ram_total') / 1024) . ' ' . _('MB') . '</td>'; if ($server_online) { echo '<td>'; echo _('CPU usage') . ': ' . $server->getCpuUsage() . '%<br />'; echo display_loadbar($server->getCpuUsage()); echo _('RAM usage') . ': ' . $server->getRamUsage() . '%<br />'; echo display_loadbar($server->getRamUsage()); foreach ($server->roles as $role => $enabled) { if ($enabled === false) { continue; } switch ($role) { case 'aps': echo _('Sessions usage') . ': ' . $server->getSessionUsage() . '%<br />'; echo display_loadbar($server->getSessionUsage() > 100 ? 100 : $server->getSessionUsage()); break; case 'fs': echo _('Disk usage') . ': ' . $server->getDiskUsage() . '%<br />'; echo display_loadbar($server->getDiskUsage() > 100 ? 100 : $server->getDiskUsage()); break; } } echo '</td>'; } echo '</tr>'; echo '</table>'; echo '</div>'; echo '<div class="section">'; echo '<h2>' . _('Configuration') . '</h2>'; echo '<table>'; echo '<tr><td>'; echo _('Redirection name for this server') . ': '; echo '</td><td>'; if ($can_do_action) { echo '<form action="actions.php" method="post">'; echo '<input type="hidden" name="name" value="Server" />'; echo '<input type="hidden" name="fqdn" value="' . $server->fqdn . '" />'; echo '<input type="hidden" name="action" value="external_name" />'; } echo '<input type="text" name="external_name" value="' . $server->getAttribute('external_name') . '" />'; if ($can_do_action) { echo ' <input type="submit" value="' . _('change') . '" />'; echo '</form>'; } echo "</td></tr>\n"; if ($can_do_action) { if ($server_online || $switch_value == 1) { echo '<tr><td></td><td>'; echo '<form action="actions.php" method="post">'; echo '<input type="hidden" name="name" value="Server" />'; echo '<input type="hidden" name="checked_servers[]" value="' . $server->fqdn . '" />'; echo '<input type="hidden" name="action" value="maintenance" />'; if ($switch_value == 0) { echo '<input type="hidden" name="to_production" value="to_production"/>'; } else { echo '<input type="hidden" name="to_maintenance" value="to_maintenance"/>'; } echo '<input'; if ($switch_value == 0) { echo ' style="background: #05a305; color: #fff; font-weight: bold;"'; } echo ' type="submit" value="' . $switch_button . '"/>'; echo '</form>'; echo '</td></tr>'; } if ($server_lock || !$server_online) { echo '<tr><td></td><td>'; echo '<form action="actions.php" method="get" onsubmit="return confirm(\'' . _('Are you sure you want to delete this server?') . '\');">'; echo '<input type="hidden" name="name" value="Server" />'; echo '<input type="hidden" name="action" value="del" />'; echo '<input type="hidden" name="checked_servers[]" value="' . $server->fqdn . '" />'; echo '<input type="submit" value="' . _('Delete') . '" />'; echo '</form>'; echo '</td></tr>'; } } echo '</table>'; echo '</div>'; foreach ($server->roles as $role => $bool) { if (array_key_exists($role, $var)) { echo '<div>'; // div role echo '<fieldset class="role">'; echo '<legend>' . sprintf(_('Role: %s'), strtoupper($role)) . '</legend>'; echo server_display_role($role, $server, $var[$role]); echo '</fieldset>'; echo '</div>'; } } page_footer(); die; }
$application_node = $dom->getElementsByTagName('application')->item(0); if (is_null($application_node)) { return false; } if (!$application_node->hasAttribute('id')) { return false; } $ret['application']['id'] = $application_node->getAttribute('id'); return $ret; } $ret = parse_icon_XML(@file_get_contents('php://input')); if (!$ret) { echo return_error(1, 'Server does not send a valid XML'); die; } $server = Abstract_Server::load($ret['server']); if (!$server) { echo return_error(2, 'Server does not exist'); die; } if (!$server->isAuthorized()) { echo return_error(3, 'Server is not authorized'); die; } $applicationDB = ApplicationDB::getInstance(); $app = $applicationDB->import($ret['application']['id']); if (!is_object($app)) { echo return_error(4, 'No such application "' . $ret['application']['id'] . '"'); die; } $path = $app->getIconPath();
public function get_AllInfos() { $server = Abstract_Server::load($this->server); if (!is_object($server)) { Logger::error('apt-get', 'TASK::get_AllInfos for task ' . $this->id . ' returned an error (unknown server ' . $this->server . ')'); return false; } $infos = array(); foreach (array('stdout', 'stderr') as $elem) { $infos[$elem] = query_url_no_error($server->getBaseURL() . '/aps/debian/' . $this->job_id . '/' . $elem); } return $infos; }
$application_node = $dom->createElement('application'); $application_node->setAttribute('id', $application->getAttribute('id')); $application_node->setAttribute('name', $application->getAttribute('name')); foreach ($application->getMimeTypes() as $mimetype) { $mimetype_node = $dom->createElement('mime'); $mimetype_node->setAttribute('type', $mimetype); $application_node->appendChild($mimetype_node); } $server_node->appendChild($application_node); } $session_node->appendChild($server_node); } } if (array_key_exists(Server::SERVER_ROLE_WEBAPPS, $session->servers)) { foreach ($session->servers[Server::SERVER_ROLE_WEBAPPS] as $server_id => $data) { $server = Abstract_Server::load($server_id); if (!$server) { throw_response(INTERNAL_ERROR); } if (!array_key_exists(Server::SERVER_ROLE_WEBAPPS, $server->getRoles())) { throw_response(INTERNAL_ERROR); } $server_node = $dom->createElement('webapp-server'); $server_node->setAttribute('type', 'webapps'); $server_node->setAttribute('base-url', $server->getBaseURL()); $server_node->setAttribute('webapps-url', $session->settings['webapps-url']); $server_node->setAttribute('login', $user_login_webapps); $server_node->setAttribute('password', $user_password_webapps); foreach ($session->getPublishedApplications() as $application) { if ($application->getAttribute('type') != 'webapp') { continue;
public function orderDeletion($request_servers_ = true, $reason_ = NULL) { Logger::debug('main', 'Starting Session::orderDeletion for \'' . $this->id . '\''); $total = count($this->servers[Server::SERVER_ROLE_APS]); $destroyed = 0; if (!is_null($reason_)) { $report_session = Abstract_ReportSession::load($this->id); if (is_object($report_session)) { $report_session->stop_why = $reason_; Abstract_ReportSession::update($report_session); } } if ($request_servers_) { foreach ($this->servers[Server::SERVER_ROLE_APS] as $fqdn => $data) { $session_server = Abstract_Server::load($fqdn); if (!$session_server) { Logger::error('main', 'Session::orderDeletion Unable to load server \'' . $fqdn . '\''); return false; } if (is_array($session_server->roles)) { if (array_key_exists(Server::SERVER_ROLE_APS, $session_server->roles)) { $buf = $session_server->orderSessionDeletion($this->id); if (!$buf) { Logger::warning('main', 'Session::orderDeletion Session \'' . $this->id . '\' already destroyed on server \'' . $fqdn . '\''); $this->setServerStatus($fqdn, Session::SESSION_STATUS_DESTROYED); $destroyed++; } else { $this->setServerStatus($fqdn, Session::SESSION_STATUS_DESTROYING); } } } } } else { $destroyed = $total; } if ($destroyed == $total) { $this->setStatus(Session::SESSION_STATUS_DESTROYED, $reason_); } else { $this->setStatus(Session::SESSION_STATUS_DESTROYING, $reason_); } return true; }