_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $bootosID = $this->_request->getParam('bootosID'); $bootosID = $this->alphaID($bootosID, true, false, $this->pass[0]); $bootosID -= $this->startval; 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})', $HTTP_USER_AGENT) == 'IE') ? 'inline' : 'attachment'; header('Content-Disposition: ' . $content_disp . '; filename="initramfs.tar.gz"'); header('Pragma: no-cache'); header('Expires: 0'); // create the gzipped tarfile. chdir("../resources/bootos/$bootosID/initramfs/"); passthru( "tar cz ./"); } } public function getconfigAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $configID = $this->_request->getParam('configID'); $configID = $this->alphaID($configID, true, false, $this->pass[1]); $configID -= $this->startval; if(is_dir("../resources/config/$configID/config/") && is_numeric($configID)){ header('Content-Type: application/x-gzip'); $content_disp = ( ereg('MSIE ([0-9].[0-9]{1,2})', $HTTP_USER_AGENT) == 'IE') ? 'inline' : 'attachment'; header('Content-Disposition: ' . $content_disp . '; filename="config.tar.gz"'); header('Pragma: no-cache'); header('Expires: 0'); // create the gzipped tarfile. chdir("../resources/config/$configID/config/"); passthru( "tar cz ./"); } } public function getkernelAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $bootosID = $this->_request->getParam('bootosID'); $bootosID = $this->alphaID($bootosID, true, false, $this->pass[2]); $bootosID -= $this->startval; 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})', $HTTP_USER_AGENT) == 'IE') ? 'inline' : 'attachment'; header('Content-Disposition: ' . $content_disp . '; filename="kernel.tar.gz"'); header('Pragma: no-cache'); header('Expires: 0'); // create the gzipped tarfile. chdir("../resources/bootos/$bootosID/kernel/"); passthru( "tar cz ./"); } } public function getkclAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $bmeID = $this->_request->getParam('bootmenuentryID'); $bmeID = $this->alphaID($bmeID, true, false, $this->pass[3]); $bmeID -= $this->startval; if(is_numeric($bmeID)){ $bmemapper = new Application_Model_BootMenuEntriesMapper(); $bme = new Application_Model_BootMenuEntries(); $bmemapper->find($bmeID,$bme); if($bme->getKcl() != null){ header('Content-Type: text/html'); $content_disp = ( ereg('MSIE ([0-9].[0-9]{1,2})', $HTTP_USER_AGENT) == 'IE') ? 'inline' : 'attachment'; header('Content-Disposition: ' . $content_disp . '; filename="kcl.txt"'); header('Pragma: no-cache'); header('Expires: 0'); echo $bme->getKcl(); } } } public function getbootmenuentryAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $bmeID = $this->_request->getParam('bootmenuentryID'); if(is_numeric($bmeID)){ $bmemapper = new Application_Model_BootMenuEntriesMapper(); $bme = new Application_Model_BootMenuEntries(); $bootosmapper = new Application_Model_BootOsMapper(); $bootos = new Application_Model_BootOs(); $bmemapper->find($bmeID, $bme); if($bme->getBootosID() != null){ $bootos = $bootosmapper->find($bme->getBootosID()); $alpha_init_bootos = $this->alphaID($bootos->getID()+$this->startval, false, false, $this->pass[0]); $alpha_kernel_bootos = $this->alphaID($bootos->getID()+$this->startval, false, false, $this->pass[2]); $alpha_bmeID = $this->alphaID($bmeID+$this->startval, false, false, $this->pass[3]); $alpha_config = $this->alphaID($bme->getConfigID()+$this->startval, false, false, $this->pass[1]); $return_val = array( 'kernel' => $this->generateURL('getkernel', 'bootosID', $alpha_kernel_bootos), 'initramfs' => $this->generateURL('getinitramfs', 'bootosID', $alpha_init_bootos), 'kcl' => $this->generateURL('getkcl', 'bootmenuentryID', $alpha_bmeID), 'config' => $alpha_config ); echo json_encode($return_val); } } } function generateURL($action, $varname, $varvalue){ $path = '/resource/'. $action .'/' . $varname .'/' . $varvalue; $path = "http://" . $_SERVER['SERVER_NAME'] . $path; return $path; } /** * Translates a number to a short alhanumeric version * * Translated any number up to 9007199254740992 * to a shorter version in letters e.g.: * 9007199254740989 --> PpQXn7COf * * specifiying the second argument true, it will * translate back e.g.: * PpQXn7COf --> 9007199254740989 * * this function is based on any2dec && dec2any by * fragmer[at]mail[dot]ru * see: http://nl3.php.net/manual/en/function.base-convert.php#52450 * * If you want the alphaID to be at least 3 letter long, use the * $pad_up = 3 argument * * In most cases this is better than totally random ID generators * because this can easily avoid duplicate ID's. * For example if you correlate the alpha ID to an auto incrementing ID * in your database, you're done. * * The reverse is done because it makes it slightly more cryptic, * but it also makes it easier to spread lots of IDs in different * directories on your filesystem. Example: * $part1 = substr($alpha_id,0,1); * $part2 = substr($alpha_id,1,1); * $part3 = substr($alpha_id,2,strlen($alpha_id)); * $destindir = "/".$part1."/".$part2."/".$part3; * // by reversing, directories are more evenly spread out. The * // first 26 directories already occupy 26 main levels * * more info on limitation: * - http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/165372 * * if you really need this for bigger numbers you probably have to look * at things like: http://theserverpages.com/php/manual/en/ref.bc.php * or: http://theserverpages.com/php/manual/en/ref.gmp.php * but I haven't really dugg into this. If you have more info on those * matters feel free to leave a comment. * * @author Kevin van Zonneveld * @author Simon Franz * @author Deadfish * @copyright 2008 Kevin van Zonneveld (http://kevin.vanzonneveld.net) * @license http://www.opensource.org/licenses/bsd-license.php New BSD Licence * @version SVN: Release: $Id: alphaID.inc.php 344 2009-06-10 17:43:59Z kevin $ * @link http://kevin.vanzonneveld.net/ * * @param mixed $in String or long input to translate * @param boolean $to_num Reverses translation when true * @param mixed $pad_up Number or boolean padds the result up to a specified length * @param string $passKey Supplying a password makes it harder to calculate the original ID * * @return mixed string or long */ private function alphaID($in, $to_num = false, $pad_up = false, $passKey = null) { $index = "abcdefghijklmnopqrstuvwxyz0123456789"; if ($passKey !== null) { // Although this function's purpose is to just make the // ID short - and not so much secure, // with this patch by Simon Franz (http://blog.snaky.org/) // you can optionally supply a password to make it harder // to calculate the corresponding numeric ID for ($n = 0; $n 0) { $out -= pow($base, $pad_up); } } $out = sprintf('%F', $out); $out = substr($out, 0, strpos($out, '.')); } else { // Digital number -->> alphabet letter code if (is_numeric($pad_up)) { $pad_up--; if ($pad_up > 0) { $in += pow($base, $pad_up); } } $out = ""; for ($t = floor(log($in, $base)); $t >= 0; $t--) { $bcp = bcpow($base, $t); $a = floor($in / $bcp) % $base; $out = $out . substr($index, $a, 1); $in = $in - ($a * $bcp); } $out = strrev($out); // reverse } return $out; } }