summaryrefslogblamecommitdiffstats
path: root/application/modules/ipxe/controllers/ResourceController.php
blob: 0c96a36307eb09f8fa6bab93983f1df9308f1b87 (plain) (tree)
1
2
3
     

                                                     



























































                                                                                                                      


                                      
                                                  
            
                                                 

        

































































































































                                                                                                                        








 
<?php
/*
 * Copyright (c) 2011 - OpenSLX GmbH, RZ Uni Freiburg
* This program is free software distributed under the GPL version 2.
* See http://gpl.openslx.org/
*
* If you have any feedback please consult http://feedback.openslx.org/ and
* send your suggestions, praise, or complaints to feedback@openslx.org
*
* General information about OpenSLX can be found at http://openslx.org/
*/

class Ipxe_ResourceController extends Zend_Controller_Action {

  private $session;

  public function init() {

    $this->_helper->layout->disableLayout();
    $this->_helper->viewRenderer->setNoRender();

    $this->session = new Application_Model_Session();
    $sessionMapper = new Application_Model_SessionMapper();

    //TODO Error Messages if something failed
    $alphaID = $this->_request->getParam('alpha');

    if(isset($alphaID)) {
      $alphasessionID = $alphaID;
      $result = $sessionMapper->findBy(array('alphasessionID' => $alphasessionID), true);
# print_a($result);
      $this->session = $this->session->setOptions($result[0]);
      $this->session->setID($result[0]['sessionID']);
    }

    $bootmenuntryID = $this->_request->getParam('bme');

    if(isset($bootmenuntryID) && isset($this->session)) {
      //TODO check if allowed
      $bootmenuentriesMapper = new Application_Model_BootMenuEntriesMapper();
      $bootmenuentry = new Application_Model_BootMenuEntries();
      $bootmenuentriesMapper->find($bootmenuntryID, $bootmenuentry);

      $this->session->setBootmenuentryID($bootmenuntryID);
      $this->session->setBootosID($bootmenuentry->getBootosID());
      $sessionMapper->save($this->session);
    }
  }

  public function getvesamenuconfigAction() {

    header('Content-Type: text/html');
    $content_disp = ( ereg('MSIE ([0-9].[0-9]{1,2})', $_SERVER['HTTP_USER_AGENT']) == 'IE') ? 'inline' : 'attachment';
    header('Content-Disposition:  ' . $content_disp . '; filename="vesamenu.conf"');
    header('Pragma: no-cache');
    header('Expires: 0');

    $vesamenuView = new Zend_View();
    $vesamenuView->addScriptPath(APPLICATION_PATH.'/modules/ipxe/views/scripts/resource/');

    $vesamenuView->host = $_SERVER['HTTP_HOST'];
    $vesamenuView->error = $this->_request->getParam('error');

    if(isset($_SERVER['HTTPS']))
    {
    	if ($_SERVER['HTTPS'] == 'on')
    		$vesamenuView->httpmode = 'https';
    	else
    		$vesamenuView->httpmode = 'http';
    }
        
    if (isset($this->session)) {
      $vesamenuView->alphaID = $this->session->getAlphasessionID();

      if ($this->session->getPersonID() != null) {
        $personMapper = new Application_Model_PersonMapper();
        $person = $personMapper->find($this->session->getPersonID());
        $vesamenuView->name = $person->getName();
        $vesamenuView->firstname = $person->getFirstname();
        $vesamenuView->loggedin = true;
      } else {
        $vesamenuView->loggedin = false;
      }

      if($this->session->getMembershipID() != null) {
        $groupMapper = new Application_Model_GroupMapper();
        $membershipMapper = new Application_Model_MembershipMapper();
        $membership = $membershipMapper->find($this->session->getMembershipID());
        $vesamenuView->group = $groupMapper->find($membership->getGroupID())->getTitle();
        $_SESSION['userIDs']['membershipID'] = $this->session->getMembershipID();
        $_SESSION['userIDs']['groupID'] = $membership->getGroupID();
      }

      if ($this->session->getPersonID() != null && $this->session->getMembershipID() == null ) {
        $groupMapper = new Application_Model_GroupMapper();
        $roleMapper = new Application_Model_RoleMapper();
        $membershipMapper = new Application_Model_MembershipMapper();
        $memberships = $membershipMapper->findBy(array('personID' => $this->session->getPersonID()), true);

        if(isset($memberships)) {
          foreach($memberships as $membership) {
            $group = $groupMapper->find($membership['groupID']);
            $role = $roleMapper->find($membership['roleID']);
            $membershipList[] = array(
                                  'membershipID' => $membership['membershipID'],
                                  'group' => $group->getTitle(),
                                  'role' => $role->getTitle()
                                );
          }
          $vesamenuView->memberships = $membershipList;
        } else {
          $vesamenuView->memberships = null;
        }

        $vesamenuView->action = "selectmembership";

      }

      // Request Bootmenu
      $_SESSION['alphasessionID'] = $this->session->getAlphasessionID();
      $pbsFilter = new Pbs_Filter();
      $bootmenuID = $pbsFilter->evaluate();

      if($bootmenuID != null) {
        $bootmenuMapper = new Application_Model_BootMenuMapper();
        $bm = $bootmenuMapper->find($bootmenuID);
        $vesamenuView->title = $bm->getTitle();
        $vesamenuView->startcounter = $bm->getStartcounter();

        $bootmenuentriesMapper = new Application_Model_BootMenuEntriesMapper();
        $res = $bootmenuentriesMapper->findBy(array('bootmenuID' => $bootmenuID), false);
        $vesamenuView->bmelist = $res;
      } else {
        $vesamenuView->bmelist = null;
      }
    } else {
      $vesamenuView->serialnumber = $this->_request->getParam('serialnumber');
      $vesamenuView->mac = $this->_request->getParam('mac');
      if($vesamenuView->error == "serial") {
        $vesamenuView->error = "serial";
      } else {
        $vesamenuView->error = "session";
      }
    }

    $vesamenu = $vesamenuView->render('getvesamenu.phtml');

    header("Content-Length: ".(strlen($vesamenu)));

    echo $vesamenu;
  }

  public function getkernelAction() {

    //TODO session & bme error
    $bootosID = $this->session->getBootosID();

    if(is_dir("../resources/bootos/$bootosID/kernel/") && is_numeric($bootosID)) {

      header('Content-Type: application/x-gzip');
      $content_disp = ( ereg('MSIE ([0-9].[0-9]{1,2})', $_SERVER['HTTP_USER_AGENT']) == 'IE') ? 'inline' : 'attachment';
      header('Content-Disposition:  ' . $content_disp . '; filename="kernel"');
      header('Pragma: no-cache');
      header('Expires: 0');

      // create the gzipped tarfile.
      chdir("../resources/bootos/$bootosID/kernel/");
      $kernelname = array_pop(scandir("./"));

      header("Content-Length: ".filesize(getcwd()."/".$kernelname));

      passthru( "cat ". $kernelname);
    } else {
      header('HTTP/1.0 404 Not Found');
    }
  }

  public function getinitramfsAction() {

    $bootosID = $this->session->getBootosID();

    if(is_dir("../resources/bootos/$bootosID/initramfs/") && is_numeric($bootosID)) {

      header('Content-Type: application/x-gzip');
      $content_disp = ( ereg('MSIE ([0-9].[0-9]{1,2})', $_SERVER['HTTP_USER_AGENT']) == 'IE') ? 'inline' : 'attachment';
      header('Content-Disposition:  ' . $content_disp . '; filename="initramfs"');
      header('Pragma: no-cache');
      header('Expires: 0');

      // create file.
      chdir("../resources/bootos/$bootosID/initramfs/");
      $initname = array_pop(scandir("./"));

      header("Content-Length: ".filesize(getcwd()."/".$initname));

      passthru( "cat ".$initname);
    } else {
      header('HTTP/1.0 404 Not Found');
    }
  }


}