blob: cccd6ca54686cb2cea7be03529245af28de606f4 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
<?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 $membership;
public function init()
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$this->db = Zend_Db_Table::getDefaultAdapter();
}
public function errorAction()
{
$result = $this->_request->getParam('serialresult');
if($result != ""){
$pbsNotifier = new Pbs_Notifier();
echo $pbsNotifier->notify('serial',$result);
}
}
public function serialAction()
{
$serialnumber = $this->_request->getParam('serialnumber');
$mac = $this->_request->getParam('mac');
$login = $this->_request->getParam('login') == 'true';
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(count($results) == 0){
$this->_redirect('/ipxe/auth/error/serialresult/noserial');
}
$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();
$session = new Application_Model_Session();
$session->setBootisoID($bootiso->getID());
$session->setClientID($clientID);
$session->setTime(time());
$session->setIp($_SERVER['REMOTE_ADDR']);
$session = $n->createSession($session);
header('Content-Type: text/plain');
$result = "#!ipxe\n";
$result .= "imgfree\n";
if(!$login){
$result .= "login\n";
$result .= "chain http://\${username:uristring}:\${password:uristring}@".$_SERVER['HTTP_HOST']."/ipxe/auth/login/alpha/".$session->getAlphasessionID()."/login/true\n";
}else{
$result .= "chain http://".$_SERVER['HTTP_HOST']."/ipxe/vesamenu.c32 http://".$_SERVER['HTTP_HOST']."/ipxe/resource/getvesamenuconfig/alpha/".$session->getAlphasessionID()."/login/false\n";
}
header("Content-Length: ".(strlen($result)));
echo $result;
}
else{
$this->_redirect('/ipxe/auth/error/serialresult/noserial');
}
}
public function loginAction()
{
$alpha = $this->_request->getParam('alpha');
if(!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW'])){
header('WWW-Authenticate: Basic realm=""');
header('HTTP/1.0 401 Unauthorized');
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 ($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->_redirect("/ipxe/resource/getvesamenuconfig/alpha/".$alpha."/person/".$person->getID()."/login/true");
return;
} else {
echo "Wrong Email or Password.";
}
}
}
|