summaryrefslogblamecommitdiffstats
path: root/application/modules/ipxe/controllers/AuthController.php
blob: 27feff75f59a83cf84effa725b9f8032ef552db2 (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_AuthController extends Zend_Controller_Action {
  protected $session;
  protected $sessionMapper;
  protected $error;

  public function init() {
    $this->_helper->layout->disableLayout();
    $this->_helper->viewRenderer->setNoRender();
    $this->db = Zend_Db_Table::getDefaultAdapter();

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

    $alphaID = $this->_request->getParam('alpha');

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

  public function serialAction() {
    $serialnumber = $this->_request->getParam('serialnumber');
    $mac = $this->_request->getParam('mac');

    if(isset($serialnumber)) {
      // Create a session
      $n = new Pbs_Session();

      $bootisomapper = new Application_Model_BootIsoMapper();
      $bootiso = new Application_Model_BootIso();

      $results = $bootisomapper->findBy(array('serialnumber' => $serialnumber), true);

      if(isset($results)) {
        $bootiso->setOptions($results[0]);
        $bootiso->setID($results[0]['bootisoID']);
        $groupID = $bootiso->getGroupID();

        $client = new Application_Model_Client();
        $client->setGroupID($groupID);
        $client->setMacadress($mac);
        $client->setCreated(time());
        $client = $n->createClient($client);
        $clientID = $client->getID();

        $this->session->setBootisoID($bootiso->getID());
        $this->session->setClientID($clientID);
        $this->session->setTime(time());
        $this->session->setIp($_SERVER['REMOTE_ADDR']);
        $this->session = $n->createSession($this->session);
      } else {
        $this->error = "serial";
      }
    } else {
      $this->error = "serial";
    }

    header('Content-Type: text/plain');

    $result = "#!ipxe\n";
    if(isset($this->session)) {
      $result .= "set filename http://".$_SERVER['HTTP_HOST']."/ipxe/resource/getvesamenuconfig/alpha/".$this->session->getAlphasessionID()."/error/".$this->error."\n";
      $result .= ":start\n";
      $result .= "chain http://".$_SERVER['HTTP_HOST']."/ipxe/vesamenu.c32 \${filename}\n";
      $result .= "goto start\n";
    } else {
      $result .= "chain http://".$_SERVER['HTTP_HOST']."/ipxe/vesamenu.c32 http://".$_SERVER['HTTP_HOST']."/ipxe/resource/getvesamenuconfig/serialnumber/$serialnumber/mac/$mac/error/$this->error\n";
    }
    header("Content-Length: ".(strlen($result)));
    echo $result;

  }

  public function loginAction() {
    $alpha = $this->_request->getParam('alpha');
    $login = $this->_request->getParam('login');

    if (isset($login)) {
      header('Content-Type: text/plain');
      $result = "#!ipxe\n";
      $result .= "clear username\n";
      $result .= "clear password\n";
      $result .= "login\n";
      $result .= "isset \${username} || set username null\n";
      $result .= "chain http://\${username:uristring}:\${password:uristring}@".$_SERVER['HTTP_HOST']."/ipxe/auth/login/alpha/".$alpha."\n";
      header("Content-Length: ".(strlen($result)));
      echo $result;
      exit;
    }

    if(!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW'])) {
      header('WWW-Authenticate: Basic realm=""');
      header('HTTP/1.0 401 Unauthorized');
      $result = "#!ipxe\n";
      $result .= "set filename http://".$_SERVER['HTTP_HOST']."/ipxe/resource/getvesamenuconfig/alpha/".$this->session->getAlphasessionID()."/error/login\n";
      header("Content-Length: ".(strlen($result)));
      echo $result;
      exit;
    }

    $email = $_SERVER['PHP_AUTH_USER'];
    $password = $_SERVER['PHP_AUTH_PW'];

    $auth = Zend_Auth::getInstance();
    $adapter = new Zend_Auth_Adapter_DbTable($this->db, 'pbs_person', 'email', 'password', 'MD5(CONCAT(?, password_salt))');
    $adapter->setIdentity($email);
    $adapter->setCredential($password);

    $result = $auth->authenticate($adapter);

    if (isset($this->session)) {
      if ($result->isValid()) {

        $personmapper = new Application_Model_PersonMapper();
        $result = $personmapper->findBy(array('email' => Zend_Auth::getInstance()->getIdentity()), true);
        $person = new Application_Model_Person($result[0]);
        $person->setID($result[0]['personID']);
        $date = new DateTime();
        $person->setLogindate($date->getTimestamp());
        $personmapper->save($person);

        $this->session->setPersonID($person->getID());
        $this->sessionMapper->save($this->session);

      } else {
        $this->error = "login";
      }
    } else {
      $this->error = "session";
    }


    header('Content-Type: text/plain');
    $result = "#!ipxe\n";
    $result .= "set filename http://".$_SERVER['HTTP_HOST']."/ipxe/resource/getvesamenuconfig/alpha/".$this->session->getAlphasessionID()."/error/".$this->error."\n";
    header("Content-Length: ".(strlen($result)));
    echo $result;
    exit;



  }

  public function logoutAction() {

    $alpha = $this->_request->getParam('alpha');

    if (isset($this->session)) {
      $this->session->setPersonID(null);
      $this->session->setMembershipID(null);
      $this->sessionMapper->save($this->session);
    } else {
      $this->error = "session";
    }

    header('Content-Type: text/plain');
    $result = "#!ipxe\n";
    $result .= "set filename http://".$_SERVER['HTTP_HOST']."/ipxe/resource/getvesamenuconfig/alpha/".$alpha."/error/".$this->error."\n";
    header("Content-Length: ".(strlen($result)));
    echo $result;
    exit;
    
    //$this->_redirect('/ipxe/resource/getvesamenuconfig/alpha/'.$alpha.'/error/'.$this->error);

  }

  public function switchgroupAction() {

    $alpha = $this->_request->getParam('alpha');

    if (isset($this->session)) {
      $this->session->setMembershipID(null);
      $this->sessionMapper->save($this->session);
    } else {
      $this->error = "session";
    }
    
    header('Content-Type: text/plain');
    $result = "#!ipxe\n";
    $result .= "set filename http://".$_SERVER['HTTP_HOST']."/ipxe/resource/getvesamenuconfig/alpha/".$alpha."/error/".$this->error."\n";
    header("Content-Length: ".(strlen($result)));
    echo $result;
    exit;
    
    //$this->_redirect('/ipxe/resource/getvesamenuconfig/alpha/'.$alpha.'/error/'.$this->error);
  }

  public function setgroupAction() {

    $alpha = $this->_request->getParam('alpha');
    $membershipID = $this->_request->getParam('membershipid');

    //TODO test if member of group
    if (isset($this->session)) {
      $this->session->setMembershipID($membershipID);
      $this->sessionMapper->save($this->session);
    } else {
      $this->error = "session";
    }
    
    header('Content-Type: text/plain');
    $result = "#!ipxe\n";
    $result .= "set filename http://".$_SERVER['HTTP_HOST']."/ipxe/resource/getvesamenuconfig/alpha/".$alpha."/error/".$this->error."\n";
    header("Content-Length: ".(strlen($result)));
    echo $result;
    exit;
    
    //$this->_redirect('/ipxe/resource/getvesamenuconfig/alpha/'.$alpha.'/error/'.$this->error);
  }





}