diff options
| author | Sebastian Schmelzer | 2012-01-11 14:36:35 +0100 |
|---|---|---|
| committer | Sebastian Schmelzer | 2012-01-11 14:36:35 +0100 |
| commit | fca04a6dab252eb9e8c0a92ce3b7e14b32e68d1e (patch) | |
| tree | 6e6aaf749f34db8c7c7153c23ef85c57187430bb /application/modules/ipxe/controllers/AuthController.php | |
| parent | API: mit addBootos kann man nun auch editieren (diff) | |
| download | pbs2-fca04a6dab252eb9e8c0a92ce3b7e14b32e68d1e.tar.gz pbs2-fca04a6dab252eb9e8c0a92ce3b7e14b32e68d1e.tar.xz pbs2-fca04a6dab252eb9e8c0a92ce3b7e14b32e68d1e.zip | |
format source files
Diffstat (limited to 'application/modules/ipxe/controllers/AuthController.php')
| -rw-r--r-- | application/modules/ipxe/controllers/AuthController.php | 425 |
1 files changed, 210 insertions, 215 deletions
diff --git a/application/modules/ipxe/controllers/AuthController.php b/application/modules/ipxe/controllers/AuthController.php index e6f1336..b59c146 100644 --- a/application/modules/ipxe/controllers/AuthController.php +++ b/application/modules/ipxe/controllers/AuthController.php @@ -1,218 +1,213 @@ -<?php +<? 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"; - } - - $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"; - } - - $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"; - } - - $this->_redirect('/ipxe/resource/getvesamenuconfig/alpha/'.$alpha.'/error/'.$this->error); - } - - - - - +* 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"; + } + + $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"; + } + + $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"; + } + + $this->_redirect('/ipxe/resource/getvesamenuconfig/alpha/'.$alpha.'/error/'.$this->error); + } + + + + + } |
