_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(); $this->rightrolesMapper = new Application_Model_RightRolesMapper(); list($this->membership) = $membershipMapper->findBy(array('apikey' => $apikey)); if($this->membership == null){ 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'); } $bootmenuentry = new Application_Model_BootMenuEntries(); $bootmenuentryMapper = new Application_Model_BootMenuEntriesMapper(); $bootmenuMapper = new Application_Model_BootMenuMapper(); $bootmenuentryMapper->find($bootmenuentryID, $bootmenuentry); $session->setBootosID($bootmenuentry->getBootosID()) ->setBootmenuentryID($bootmenuentry->getID()) ->setTime(time()) ->setMembershipID('1') ->setIp($_SERVER['REMOTE_ADDR']) ->setAlphasessionID('0'); $this->thisSession = $session; } elseif($alpha != ""){ $alphasessionID = $alpha; $result = $sm->findBy(array('alphasessionID' => $alphasessionID),true); # print_a($result); $this->thisSession = $session->setOptions($result[0]); $this->thisSession->setID($result[0]['sessionID']); } } public function indexAction() { } //TODO Try/Catch + Metadata check 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'); 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(); } 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($groupID); $bootos->setSource($source); $bootos->setCreated(time()); $bootos->setPublic('-1'); $bootosID = $bootosMapper->save($bootos); $bootos->setID($bootosID); $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($_FILES['config']['name'] != ''){ move_uploaded_file($_FILES['config']['tmp_name'], $configpath."default.tgz"); } if($_FILES['kernel']['name'] != ''){ move_uploaded_file($_FILES['kernel']['tmp_name'], $kernelpath."kernel"); } if($_FILES['init']['name'] != ''){ move_uploaded_file($_FILES['init']['tmp_name'], $initpath."initramfs"); $newconfig = new Pbs_NewConfig(); $newconfig->createDefaultConfig($bootos); } 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(); } $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(); $bootossrc = $bootos->getSource(); $bootos->setOptions($params); $bootos->setID($bootosID); $bootos->setGroupID($groupID); $bootos->setSource($bootossrc); $bootos->setCreated(time()); $bootos->setPublic('-1'); $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($_FILES['config']['name'] != ''){ $bootos->setSource($_SERVER['REMOTE_ADDR']); move_uploaded_file($_FILES['config']['tmp_name'], $configpath."default.tgz"); } if($_FILES['kernel']['name'] != ''){ $bootos->setSource($_SERVER['REMOTE_ADDR']); move_uploaded_file($_FILES['kernel']['tmp_name'], $kernelpath."kernel"); } if($_FILES['init']['name'] != ''){ $bootos->setSource($_SERVER['REMOTE_ADDR']); move_uploaded_file($_FILES['init']['tmp_name'], $initpath."initramfs"); } $bootosMapper->save($bootos); header('HTTP/1.0 201 Bootos edited'); } public function addprebootAction() { 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'] == '' || $_FILES['preboot']['name'] == ''){ header('HTTP/1.0 400 Title and Preboot 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->setCreated(time()); $prebootID = $prebootMapper->save($preboot); $prebootpath = "../resources/bootmedium/".$prebootID."/"; mkdir($prebootpath ,0777, true); if($_FILES['preboot']['name'] != ''){ 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(); } $prebootsrc = $preboot->getSource(); $prebootID = $preboot->getID(); $preboot->setOptions($params); $preboot->setGroupID($groupID); $preboot->setSource($prebootsrc); $preboot->setCreated(time()); $prebootpath = "../resources/bootmedium/".$prebootID."/"; mkdir($prebootpath ,0777, true); if($_FILES['preboot']['name'] != ''){ $preboot->setSource($source); move_uploaded_file($_FILES['preboot']['tmp_name'], $prebootpath."preboot.zip"); } $prebootMapper->save($preboot); header('HTTP/1.0 201 Preboot edited'); } public function getinitramfsAction() { $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'); } } 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($configID == null){ chdir("../resources/bootos/$bootosID/config/"); passthru( "cat default.tgz"); }else{ $bootosuserMapper = new Application_Model_BootOsUserMapper(); $bootosuser = $bootosuserMapper->findBy(array('configID' => $configID)); $hash = md5(microtime(1)); $tmp_conf = "../resources/config/$hash"; mkdir($tmp_conf ,0777, true); exec("tar -C $tmp_conf -xf ../resources/bootos/$bootosID/config/default.tgz",$restul); exec("tar -C $tmp_conf/rootfs/ -xf ../resources/config/etc.tgz"); $username = ''; $userpassword = ''; if($this->thisSession->getMembershipID() != null){ $person = new Application_Model_Person(); $personMapper = new Application_Model_PersonMapper(); $membershipMapper = new Application_Model_MembershipMapper(); $personID = $membershipMapper->find($this->thisSession->getMembershipID())->getPersonID(); $person = $personMapper->find($personID); $username = strtolower($person->getName()); $username = preg_replace("!\s!","",$username); $userpassword = $person->getLoginPassword(); } foreach($bootosuser as $user){ if($user->getLogin() == '%username%'){ $loginname = $username; }else{ $loginname = $user->getLogin(); } if($user->getPassword() == '%password%'){ $password = $userpassword; }else{ $password = $user->getPassword(); } if($user->getHometypeID() == 2){ $homepath = $user->getHomepath(); }elseif($user->getHometypeID() == 1){ $homepath = "/media/openslx-stick/home/$loginname"; }else{ $homepath = "/home/$loginname"; } if($loginname != '' && $password != ''){ if($user->getHometypeID() == 1){ exec("echo 'modprobe usb_storage' >> $tmp_conf/initramfs/postinit.local"); exec("echo 'echo -n 'Mounting OpenSLX-Stick:'; while [ ! -d /dev/sdb1 ] \n do \n\t usleep 500000 \n\t mdev -s \n\t echo -n . \n done' >> $tmp_conf/initramfs/postinit.local"); exec("echo 'mkdir -p /media/openslx-stick' >> $tmp_conf/initramfs/postinit.local"); exec("echo 'mount /dev/sdb1 /media/openslx-stick' >> $tmp_conf/initramfs/postinit.local"); exec("echo 'if [ -d /media/openslx-stick/boot ]; then \n\t if [ ! -d '".escapeshellarg("'"."/media/openslx-stick/home/".$loginname."'")."' ]; then \n\t\t mkdir -p '".escapeshellarg("'"."/media/openslx-stick/home/".$loginname."'")."' \n\t\t chroot /mnt useradd -d '".escapeshellarg("'".$homepath."'")."' -s /bin/bash -p '".escapeshellarg("'".$password."'")."' '".escapeshellarg("'".$loginname."'")."' \n\t else \n\t\t chroot /mnt useradd -d '".escapeshellarg("'".$homepath."'")."' -s '/bin/bash' -p '".escapeshellarg("'".$password."'")."' '".escapeshellarg("'".$loginname."'")."' \n\t fi \n else \n\t chroot /mnt useradd -d '".escapeshellarg("'"."/home/".$loginname."'")."' -m -s '/bin/bash' -p '".escapeshellarg("'".$password."'")."' '".escapeshellarg("'".$loginname."'")."' \n fi' >> $tmp_conf/initramfs/postinit.local"); } else{ exec("echo 'chroot /mnt useradd -d '".escapeshellarg("'".$homepath."'")."' -m -s /bin/bash -p '".escapeshellarg("'".$password."'")."' '".escapeshellarg("'".$loginname."'")."'' >> $tmp_conf/initramfs/postinit.local",$restul); exec("echo 'chroot /mnt sed -e \"s/AutoLoginEnable=.*/AutoLoginEnable=true".'\n'."AutoLoginUser=kiosk/g\" /etc/kde4/kdm/kdmrc > /tmp/tmpkdmrc && rm /mnt/etc/kde4/kdm/kdmrc && mv /tmp/tmpkdmrc /mnt/etc/kde4/kdm/kdmrc' >> $tmp_conf/initramfs/postinit.local"); } } } // create the gzipped tarfile. chdir($tmp_conf); passthru( "tar cz *"); exec("rm -rf ../$hash"); } }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){ $result = $kcl . " alpha=" . $this->_request->getParam('alpha') . " file=http://".$_SERVER['HTTP_HOST']."/c/".$this->_request->getParam('alpha')."/default.tgz ".$bme->getKclappend(); }else{ $result = "alpha=" . $this->_request->getParam('alpha') . " file=http://".$_SERVER['HTTP_HOST']."/c/".$this->_request->getParam('alpha')."/default.tgz ".$bme->getKclappend(); } $result = trim($result); header("Content-Length: ".(strlen($result))); echo $result; } } public function getbootmenuentryAction() { // obsolete function (now only for debugging) // 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', 'kernel' => $this->generateURL('getkernel', 'alpha', $this->thisSession->getAlphasessionID(), "kernel"), 'initramfs' => $this->generateURL('getinitramfs', 'alpha', $this->thisSession->getAlphasessionID(), "initramfs"), 'kcl' => $this->generateURL('getkcl', 'alpha', $this->thisSession->getAlphasessionID(), "kcl.txt"), 'config' => $this->generateURL('getconfig', 'alpha', $this->thisSession->getAlphasessionID(), 'default.tgz') ); $result = $return_val; $result2 = ""; $result2 .= ""; $result2 .= ""; $result2 .= ""; $result2 .= ""; $result2 .= ""; $result2 .= "
info: ".$result['info']."
kernel: ".$result['kernel']."
initramfs: ".$result['initramfs']."
kcl: ".$result['kcl']."
config: ".$result['config']."
"; 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; } }