blob: ba10e5c981682ea2d5f02d7c8bcfe7910327b870 (
plain) (
tree)
|
|
<?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;
protected $httpmode;
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";
}
}
if(isset($_SERVER['HTTPS']))
{
if ($_SERVER['HTTPS'] == 'on')
$this->httpmode = 'https';
else
$this->httpmode = 'http';
}
}
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 ".$this->httpmode."://".$_SERVER['HTTP_HOST']."/ipxe/resource/getvesamenuconfig/alpha/".$this->session->getAlphasessionID()."/error/".$this->error."\n";
$result .= ":start\n";
$result .= "chain ".$this->httpmode."://".$_SERVER['HTTP_HOST']."/ipxe/vesamenu.c32 \${filename}\n";
$result .= "goto start\n";
} else {
$result .= "chain ".$this->httpmode."://".$_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 ".$this->httpmode."://\${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 ".$this->httpmode."://".$_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 ".$this->httpmode."://".$_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 ".$this->httpmode."://".$_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 ".$this->httpmode."://".$_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 ".$this->httpmode."://".$_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);
}
}
|