diff options
Diffstat (limited to 'application/controllers/ResourceController.php')
| -rw-r--r-- | application/controllers/ResourceController.php | 354 |
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; |
