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());
}
Example #4
0
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;
}
Example #5
0
 * 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')) {
Example #6
0
        }
        $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');
Example #7
0
 * 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;
}
Example #8
0
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&amp;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;
}
Example #9
0
        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;
    }
}
Example #10
0
 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;
 }
Example #11
0
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;
}
Example #12
0
 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;
 }
Example #13
0
 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;
 }
Example #14
0
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;
}
Example #15
0
        $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);
Example #16
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();
 }
Example #18
0
 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;
 }
Example #19
0
 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;
 }
Example #20
0
 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;
 }
Example #21
0
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;
}
Example #22
0
    $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();
Example #23
0
 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;
 }
Example #24
0
            $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;
Example #25
0
 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;
 }