summaryrefslogtreecommitdiffstats
path: root/application/controllers/ResourceController.php
diff options
context:
space:
mode:
Diffstat (limited to 'application/controllers/ResourceController.php')
-rw-r--r--application/controllers/ResourceController.php354
1 files changed, 282 insertions, 72 deletions
diff --git a/application/controllers/ResourceController.php b/application/controllers/ResourceController.php
index 2af7f92..e94d9c7 100644
--- a/application/controllers/ResourceController.php
+++ b/application/controllers/ResourceController.php
@@ -16,56 +16,53 @@ class ResourceController extends Zend_Controller_Action
private $thisSession;
private $page;
private $membership;
+ private $rightrolesMapper;
public function init()
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
-
+
$session = new Application_Model_Session();
$sm = new Application_Model_SessionMapper();
-
+
//TODO Error Messages if something failed
$alpha = $this->_request->getParam('alpha');
$apikey = $this->_request->getParam('apikey');
-
+
if($apikey != ""){
$membershipMapper = new Application_Model_MembershipMapper();
$this->membership = new Application_Model_Membership();
- $rightrolesMapper = new Application_Model_RightRolesMapper();
- $rightroles = new Application_Model_RightRoles();
+ $this->rightrolesMapper = new Application_Model_RightRolesMapper();
+ $rightroles = new Application_Model_RightRoles();
@list($this->membership) = $membershipMapper->findBy(array('apikey' => $apikey));
if($this->membership == null){
- header('HTTP/1.0 401 Member not found');
- die();
- }
- @list($rightroles) = $rightrolesMapper->findBy(array('rightID' => '55', 'roleID' => $this->membership->getRoleID()));
- if($rightroles == null){
- header('HTTP/1.0 403 No Right to Create Bootos');
+ header('HTTP/1.0 401 Member not found');
die();
}
+
}
elseif($alpha == "0"){
$bootmenuentryID = $this->_request->getParam('bootmenuentryID');
$this->page = $this->_request->getParam('page');
if(!is_numeric($bootmenuentryID))
- $this->_redirect('/user/bootmenu/index/page/'.$this->page.'/json/error');
-
+ $this->_redirect('/user/bootmenu/index/page/'.$this->page.'/json/error');
+
$bootmenuentry = new Application_Model_BootMenuEntries();
$bootmenuentryMapper = new Application_Model_BootMenuEntriesMapper();
$bootosMapper = new Application_Model_BootOsMapper();
$bootmenuentryMapper->find($bootmenuentryID, $bootmenuentry);
-
+
$session->setBootosID($bootmenuentry->getBootosID())
->setBootmenuentryID($bootmenuentry->getID())
->setTime(time())
->setMembershipID($bootosMapper->find($bootmenuentry->getBootmenuID())->getMembershipID())
->setIp($_SERVER['REMOTE_ADDR'])
->setAlphasessionID('0');
-
- $this->thisSession = $session;
-
+
+ $this->thisSession = $session;
+
}
elseif($alpha != ""){
$alphasessionID = $alpha;
@@ -79,46 +76,137 @@ class ResourceController extends Zend_Controller_Action
public function indexAction()
{
-
-
+
+
}
-
+
public function addbootosAction()
{
+
+ @list($rightroles) = $this->rightrolesMapper->findBy(array('rightID' => '55', 'roleID' => $this->membership->getRoleID()));
+ if($rightroles == null){
+ header('HTTP/1.0 403 No Right to Create Bootos');
+ die();
+ }
+
$apikey = $this->_request->getParam('apikey');
if($apikey == ""){
- header('HTTP/1.0 400 No API-Key');
+ header('HTTP/1.0 400 No API-Key');
die();
}
$params = $this->_request->getParams();
- if(!isset($params['title'])){
- header('HTTP/1.0 400 Title must be set');
+ $source = $_SERVER['REMOTE_ADDR'];
+
+ if($params['title'] == '' || $params['distro'] == '' || $params['distroversion'] == '' || $params['share'] == '' || $source == ''){
+ header('HTTP/1.0 400 Title, Distro, Distroversion and Share must be set');
die();
}
+
- $bootos = new Application_Model_BootOs();
+ if($_FILES['config']['size'] == 0 && $_FILES['config']['name'] != '' || $_FILES['kernel']['size'] == 0 && $_FILES['kernel']['name'] != ''|| $_FILES['init']['size'] == 0 && $_FILES['init']['name'] != ''){
+ header('HTTP/1.0 400 File must be larger than 0 bytes');
+ die();
+ }
+
$bootosMapper = new Application_Model_BootOsMapper();
+ $groupID = $this->membership->getGroupID();
+
+ @list($bootos) = $bootosMapper->findBy(array('groupid' => $groupID, 'title' => $params['title'], 'distro' => $params['distro'], 'distroversion' => $params['distroversion'], 'source' => $source, 'share' => $params['share']));
+ if($bootos != null){
+ header('HTTP/1.0 400 Bootos already exists');
+ die();
+ }
+ $bootos = new Application_Model_BootOs();
$bootos->setOptions($params);
- $bootos->setGroupID($this->membership->getGroupID());
- $bootos->setSource($_SERVER['REMOTE_ADDR']);
+ $bootos->setGroupID($groupID);
+ $bootos->setSource($source);
$bootos->setPath_config($_FILES['config']['name']);
$bootos->setPath_init($_FILES['init']['name']);
$bootos->setPath_kernel($_FILES['kernel']['name']);
$bootos->setCreated(time());
$bootos->setPublic('-1');
$bootosID = $bootosMapper->save($bootos);
+
+ $initpath = "../resources/bootos/".$bootosID."/initramfs/";
+ $kernelpath = "../resources/bootos/".$bootosID."/kernel/";
+ $configpath = "../resources/bootos/".$bootosID."/config/";
+
+ mkdir($initpath ,0777, true);
+ mkdir($kernelpath ,0777, true);
+ mkdir($configpath ,0777, true);
+
+ if(isset($_FILES['config'])){
+ move_uploaded_file($_FILES['config']['tmp_name'], $configpath."default.tgz");
+ }
+ if(isset($_FILES['kernel'])){
+ move_uploaded_file($_FILES['kernel']['tmp_name'], $kernelpath."kernel");
+ }
+ if(isset($_FILES['init'])){
+ move_uploaded_file($_FILES['init']['tmp_name'], $initpath."initramfs");
+ }
+
+ header('HTTP/1.0 201 Bootos created');
+
+ }
+
+ public function editbootosAction()
+ {
+
+ @list($rightroles) = $this->rightrolesMapper->findBy(array('rightID' => '58', 'roleID' => $this->membership->getRoleID()));
+ if($rightroles == null){
+ header('HTTP/1.0 403 No Right to Edit Bootos');
+ die();
+ }
+
+ $apikey = $this->_request->getParam('apikey');
+ if($apikey == ""){
+ header('HTTP/1.0 400 No API-Key');
+ die();
+ }
+
+ $params = $this->_request->getParams();
+ $source = $_SERVER['REMOTE_ADDR'];
+
+ if($params['title'] == '' || $params['distro'] == '' || $params['distroversion'] == '' || $params['share'] == '' || $source == ''){
+ header('HTTP/1.0 400 Title, Distro, Distroversion and Share must be set');
+ die();
+ }
- print_a($bootos);
- $initpath = "../resources/bootos/".$bootosID."/initramfs/";
- $kernelpath = "../resources/bootos/".$bootosID."/kernel/";
- $configpath = "../resources/bootos/".$bootosID."/config/";
-
- mkdir($initpath ,0777, true);
- mkdir($kernelpath ,0777, true);
- mkdir($configpath ,0777, true);
+ $bootos = new Application_Model_BootOs();
+ $bootosMapper = new Application_Model_BootOsMapper();
+ $groupID = $this->membership->getGroupID();
+
+ @list($bootos) = $bootosMapper->findBy(array('groupid' => $groupID, 'title' => $params['title'], 'distro' => $params['distro'], 'distroversion' => $params['distroversion'], 'source' => $source, 'share' => $params['share']));
+
+ if($bootos == null){
+ header('HTTP/1.0 400 Bootos not found');
+ die();
+ }
+ $bootosID = $bootos->getID();
+
+ $bootos->setOptions($params);
+ $bootos->setID($bootosID);
+ $bootos->setGroupID($groupID);
+ $bootos->setSource($_SERVER['REMOTE_ADDR']);
+ $bootos->setPath_config($_FILES['config']['name']);
+ $bootos->setPath_init($_FILES['init']['name']);
+ $bootos->setPath_kernel($_FILES['kernel']['name']);
+ $bootos->setCreated(time());
+ $bootos->setPublic('-1');
+
+ $bootosMapper->save($bootos);
+
+ $initpath = "../resources/bootos/".$bootosID."/initramfs/";
+ $kernelpath = "../resources/bootos/".$bootosID."/kernel/";
+ $configpath = "../resources/bootos/".$bootosID."/config/";
+
+ mkdir($initpath ,0777, true);
+ mkdir($kernelpath ,0777, true);
+ mkdir($configpath ,0777, true);
+
if(isset($_FILES['config'])){
move_uploaded_file($_FILES['config']['tmp_name'], $configpath."default.tgz");
}
@@ -128,8 +216,127 @@ class ResourceController extends Zend_Controller_Action
if(isset($_FILES['init'])){
move_uploaded_file($_FILES['init']['tmp_name'], $initpath."initramfs");
}
+
+ header('HTTP/1.0 201 Bootos edited');
+ }
+
+ public function addprebootAction()
+ {
- header('HTTP/1.0 201 Bootos created');
+ @list($rightroles) = $this->rightrolesMapper->findBy(array('rightID' => '40', 'roleID' => $this->membership->getRoleID()));
+ if($rightroles == null){
+ header('HTTP/1.0 403 No Right to Create Preboots');
+ die();
+ }
+
+ $apikey = $this->_request->getParam('apikey');
+ if($apikey == ""){
+ header('HTTP/1.0 400 No API-Key');
+ die();
+ }
+
+ $params = $this->_request->getParams();
+ $source = $_SERVER['REMOTE_ADDR'];
+
+ if($params['title'] == ''){
+ header('HTTP/1.0 400 Title must be set');
+ die();
+ }
+
+
+ if($_FILES['preboot']['size'] == 0 && $_FILES['preboot']['name'] != ''){
+ header('HTTP/1.0 400 File must be larger than 0 bytes');
+ die();
+ }
+
+ $prebootMapper = new Application_Model_PreBootMapper();
+ $groupID = $this->membership->getGroupID();
+
+ @list($preboot) = $prebootMapper->findBy(array('groupid' => $groupID, 'title' => $params['title']));
+ if($preboot != null){
+ header('HTTP/1.0 400 Preboot already exists');
+ die();
+ }
+
+ $preboot = new Application_Model_PreBoot();
+
+ $preboot->setOptions($params);
+ $preboot->setGroupID($groupID);
+ $preboot->setSource($source);
+ $preboot->setPath_preboot($_FILES['preboot']['name']);
+ $preboot->setCreated(time());
+
+ $prebootID = $prebootMapper->save($preboot);
+
+ $prebootpath = "../resources/bootmedium/".$prebootID."/";
+ mkdir($prebootpath ,0777, true);
+
+ if(isset($_FILES['preboot'])){
+ move_uploaded_file($_FILES['preboot']['tmp_name'], $prebootpath."preboot.zip");
+ }
+
+ header('HTTP/1.0 201 Preboot created');
+
+
+ }
+
+ public function editprebootAction()
+ {
+
+ @list($rightroles) = $this->rightrolesMapper->findBy(array('rightID' => '41', 'roleID' => $this->membership->getRoleID()));
+ if($rightroles == null){
+ header('HTTP/1.0 403 No Right to Edit Preboot');
+ die();
+ }
+
+ $apikey = $this->_request->getParam('apikey');
+ if($apikey == ""){
+ header('HTTP/1.0 400 No API-Key');
+ die();
+ }
+
+ $params = $this->_request->getParams();
+ $source = $_SERVER['REMOTE_ADDR'];
+
+ if($params['title'] == ''){
+ header('HTTP/1.0 400 Title must be set');
+ die();
+ }
+
+ if($_FILES['preboot']['size'] == 0 && $_FILES['preboot']['name'] != ''){
+ header('HTTP/1.0 400 File must be larger than 0 bytes');
+ die();
+ }
+
+ $prebootMapper = new Application_Model_PreBootMapper();
+ $groupID = $this->membership->getGroupID();
+ $preboot = new Application_Model_PreBoot();
+
+ @list($preboot) = $prebootMapper->findBy(array('groupid' => $groupID, 'title' => $params['title']));
+
+ if($preboot == null){
+ header('HTTP/1.0 400 Preboot not found');
+ die();
+ }
+
+ $prebootID = $preboot->getID();
+
+ $preboot->setOptions($params);
+ $preboot->setGroupID($groupID);
+ $preboot->setSource($source);
+ $preboot->setPath_preboot($_FILES['preboot']['name']);
+ $preboot->setCreated(time());
+
+ $prebootMapper->save($preboot);
+
+ $prebootpath = "../resources/bootmedium/".$prebootID."/";
+ mkdir($prebootpath ,0777, true);
+
+ if(isset($_FILES['preboot'])){
+ move_uploaded_file($_FILES['preboot']['tmp_name'], $prebootpath."preboot.zip");
+ }
+
+ header('HTTP/1.0 201 Preboot edited');
}
@@ -139,19 +346,19 @@ class ResourceController extends Zend_Controller_Action
$bootosID = $this->thisSession->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');
@@ -160,29 +367,30 @@ class ResourceController extends Zend_Controller_Action
public function getconfigAction()
{
-
+
$bootmenuentryID = $this->thisSession->getBootmenuentryID();
$bootmenuentry = new Application_Model_BootMenuEntries();
$bmm = new Application_Model_BootMenuEntriesMapper();
$bmm->find($bootmenuentryID,$bootmenuentry);
-
+
$configID = $bootmenuentry->getConfigID();
$bootosID = $this->thisSession->getBootosID();
if(is_dir("../resources/bootos/$bootosID/config/")){
-
+
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="default.tgz"');
header('Pragma: no-cache');
header('Expires: 0');
-
- if($this->thisSession->getMembershipID() != null){
- $path_userconf = "../resources/config/$configID/".$this->thisSession->getMembershipID()."/";
-
- if(!is_dir($path_userconf)){
+ if($this->thisSession->getMembershipID() != null){
+ if($configID == null)
+ $configID = 'default';
+ $path_userconf = "../resources/config/$bootosID/".$this->thisSession->getMembershipID()."/$configID/";
+ if(!is_dir($path_userconf)){
+
$person = new Application_Model_Person();
$personMapper = new Application_Model_PersonMapper();
$membershipMapper = new Application_Model_MembershipMapper();
@@ -190,7 +398,7 @@ class ResourceController extends Zend_Controller_Action
$person = $personMapper->find($personID);
$loginname = strtolower($person->getName());
$loginname = preg_replace("!\s!","",$loginname);
-
+
mkdir($path_userconf ,0777, true);
exec("tar -C $path_userconf -xvf ../resources/config/$configID/default.tgz");
exec("cp ../resources/config/loginfiles/* $path_userconf/rootfs/etc/");
@@ -204,71 +412,73 @@ class ResourceController extends Zend_Controller_Action
chdir($path_userconf);
passthru( "tar cz *");
}else {
- chdir("../resources/bootos/$bootosID/config/");
- passthru( "cat default.tgz");
- }
+ if($configID == null)
+ $configID = 'default';
+ chdir("../resources/config/$bootosID/$configID/");
+ passthru( "cat default.tgz");
+ }
}else{
header('HTTP/1.0 404 Not Found');
- }
+ }
}
public function getkernelAction()
{
-
+
$bootosID = $this->thisSession->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 getkclAction()
{
-
+
$bmeID = $this->thisSession->getBootmenuentryID();
if(is_numeric($bmeID)){
-
+
$bmemapper = new Application_Model_BootMenuEntriesMapper();
$bme = new Application_Model_BootMenuEntries();
$bootosmapper = new Application_Model_BootOsMapper();
$bmemapper->find($bmeID,$bme);
-
+
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="kcl.txt"');
header('Pragma: no-cache');
header('Expires: 0');
-
+
$kcl = $bootosmapper->find($bme->getBootosID())->getDefaultkcl();
-
- if($bme->getKcl() && $kcl != null){
+
+ if($bme->getKcl() && $kcl != null){
$result = $kcl . " alpha=" . $this->_request->getParam('alpha') . " file=http://".$_SERVER['HTTP_HOST']."/resource/getconfig/alpha/".$this->_request->getParam('alpha')."/file/default.tgz ".$bme->getKclappend();
}else{
$result = "alpha=" . $this->_request->getParam('alpha') . " file=http://".$_SERVER['HTTP_HOST']."/resource/getconfig/alpha/".$this->_request->getParam('alpha')."/file/default.tgz ".$bme->getKclappend();
}
-
+
header("Content-Length: ".(strlen($result)));
-
+
echo $result;
-
+
}
@@ -280,7 +490,7 @@ class ResourceController extends Zend_Controller_Action
// after selecting the BootOS it will be saved in session
// so getkclAction, getkernelAction, getconfigAction and getinitramfsAction
// can be called with session-identifier
-
+
$return_val =
array(
'info' => 'This function is for debugging purpose only',
@@ -289,20 +499,20 @@ class ResourceController extends Zend_Controller_Action
'kcl' => $this->generateURL('getkcl', 'alpha', $this->thisSession->getAlphasessionID(), "kcl.txt"),
'config' => $this->generateURL('getconfig', 'alpha', $this->thisSession->getAlphasessionID(), 'default.tgz')
);
-
+
$result = $return_val;
$result2 = "<table class='json'>";
$result2 .= "<tr><td><b>info</b>: </td><td>".$result['info']."</td></tr>";
$result2 .= "<tr><td><b>kernel</b>: </td><td><a href=".$result['kernel'].">".$result['kernel']."<a></td></tr>";
$result2 .= "<tr><td><b>initramfs</b>: </td><td><a href=".$result['initramfs'].">".$result['initramfs']."<a></td></tr>";
$result2 .= "<tr><td><b>kcl</b>: </td><td><a href=".$result['kcl'].">".$result['kcl']."<a></td></tr>";
- $result2 .= "<tr><td><b>config</b>: </td><td><a href=".$result['config'].">".$result['config']."<a></td></tr>";
- $result2 .= "</table>";
+ $result2 .= "<tr><td><b>config</b>: </td><td><a href=".$result['config'].">".$result['config']."<a></td></tr>";
+ $result2 .= "</table>";
echo $result2;
}
private function generateURL($action, $varname, $varvalue, $filename){
-
+
$path = '/resource/'. $action .'/' . $varname .'/' . $varvalue .'/bootmenuentryID/'.$this->thisSession->getBootmenuentryID().'/file/' . $filename ;
$path = "http://" . $_SERVER['SERVER_NAME'] . $path;
return $path;