public function processInput($postData) { if (isset($postData['redirectAuth'])) { $authMethods = Kwf_Registry::get('userModel')->getAuthMethods(); if (!isset($authMethods[$postData['redirectAuth']])) { throw new Kwf_Exception_NotFound(); } $auth = $authMethods[$postData['redirectAuth']]; if (!$auth instanceof Kwf_User_Auth_Interface_Redirect) { throw new Kwf_Exception_NotFound(); } $formValues = array(); foreach ($auth->getLoginRedirectFormOptions() as $option) { if ($option['type'] == 'select') { $formValues[$option['name']] = $postData[$option['name']]; } } $redirectBackUrl = Kwf_Setup::getBaseUrl() . '/'; $f = new Kwf_Filter_StrongRandom(); $state = 'activate-' . $postData['redirectAuth'] . '-' . $f->filter(null) . '-' . $postData['code'] . '-' . $redirectBackUrl; //save state in namespace to validate it later $ns = new Kwf_Session_Namespace('kwf-login-redirect'); $ns->state = $state; $url = $auth->getLoginRedirectUrl($this->_getRedirectBackUrl(), $state, $formValues); header("Location: " . $url); exit; } }
public static function afterStart() { static $validatorsRegistered = false; if (!$validatorsRegistered) { if (isset($_SESSION['__KWF']['VALID'])) { self::_processValidators(); } //sessions timeout after 15-20 minutes of inactivity //this is in addition to gc_maxlifetime (which isn't reliable enough) $sessionTimeout = 20 * 60; if (!isset($_SESSION['kwfTimeout'])) { $_SESSION['kwfTimeout'] = time() + $sessionTimeout; } else { if ($_SESSION['kwfTimeout'] - time() < 0) { $_SESSION = array(); $_SESSION['kwfTimeout'] = time() + $sessionTimeout; Zend_Session::regenerateId(); } else { if ($_SESSION['kwfTimeout'] - time() < $sessionTimeout - 5 * 60) { //extend timeout every 5 minutes (not in every request for better performance) $_SESSION['kwfTimeout'] = time() + $sessionTimeout; } } } if (!isset($_SESSION['__KWF']['VALID'])) { Zend_Session::registerValidator(new Kwf_Session_Validator_HttpHost()); if (Kwf_Setup::getBaseUrl()) { Zend_Session::registerValidator(new Kwf_Session_Validator_BasePath()); } Zend_Session::registerValidator(new Kwf_Session_Validator_RemoteAddr()); } $validatorsRegistered = true; } }
/** * * @param string * @param string * @param string * @param string * @param int Kann gesetzt werden wenn wir in diesem web auf das bild nicht direkten zugriff haben * sondern nur für ein anderes web die url generieren */ public static function getUrl($class, $id, $type, $filename, $time = null) { if ($filename instanceof Kwf_Uploads_Row) { $filename = $filename->filename . '.' . $filename->extension; } if ($filename == '.') { $filename = ''; } //Replace Slashes and Backslashes with an underscore //Otherwise we would get a wrong url //e.g. $filename = foo/bar.png -> /media/FooModel/1/default/ab123/1234/foo/bar.png $filename = str_replace('/', '_', $filename); $filename = str_replace('\\', '_', $filename); $checksumType = $type; if (substr($type, 0, strlen(Kwf_Media::DONT_HASH_TYPE_PREFIX)) == Kwf_Media::DONT_HASH_TYPE_PREFIX) { $checksumType = Kwf_Media::DONT_HASH_TYPE_PREFIX; } $class = rawurlencode($class); $checksum = self::getChecksum($class, $id, $checksumType, rawurlencode($filename)); $prefix = Kwf_Setup::getBaseUrl(); if ($r = Kwf_Component_Data_Root::getInstance()) { if ($r->filename) { $prefix .= '/' . $r->filename; } } if (is_null($time)) { $cacheId = 'mtime-' . self::createCacheId($class, $id, $type); $time = Kwf_Media_MemoryCache::getInstance()->load($cacheId); if (!$time) { $time = time(); Kwf_Media_MemoryCache::getInstance()->save($time, $cacheId); } } return $prefix . '/media/' . $class . '/' . $id . '/' . $type . '/' . $checksum . '/' . $time . '/' . rawurlencode($filename); }
public static function output() { $baseUrl = Kwf_Setup::getBaseUrl(); $contents = "User-agent: *\n" . "Disallow: {$baseUrl}/admin/\n"; $contents .= "Sitemap: http" . (isset($_SERVER['HTTPS']) ? 's' : '') . "://" . $_SERVER['HTTP_HOST'] . $baseUrl . "/sitemap.xml\n"; Kwf_Media_Output::output(array('contents' => $contents, 'mimeType' => 'text/plain')); }
public static function output() { $baseUrl = Kwf_Setup::getBaseUrl(); $contents = "User-agent: *\n" . "Disallow: {$baseUrl}/admin/\n" . "Disallow: {$baseUrl}/kwf/util/kwc/render\n"; //used to load eg. lightbox content async, we don't want getting that indexed $contents .= "Sitemap: http" . (isset($_SERVER['HTTPS']) ? 's' : '') . "://" . $_SERVER['HTTP_HOST'] . $baseUrl . "/sitemap.xml\n"; Kwf_Media_Output::output(array('contents' => $contents, 'mimeType' => 'text/plain')); }
public function render($ignoreCli = false) { if (!Kwf_Registry::get('config')->setupFinished) { echo "<h1>" . Kwf_Config::getValue('application.name') . "</h1>\n"; echo "<a href=\"" . Kwf_Setup::getBaseUrl() . "/kwf/maintenance/setup\">[start setup]</a>\n"; exit; } parent::render($ignoreCli); }
public function indexAction() { Zend_Registry::set('db', false); Kwf_Test_SeparateDb::setDbFromCookie(); // setzt es nur wenn es das cookie wirklich gibt //FnF models setzen damit tests nicht in echte tabellen schreiben Kwf_Component_Cache::setInstance(Kwf_Component_Cache::CACHE_BACKEND_FNF); Kwf_Component_Cache_Memory::setInstance(new Kwf_Component_Cache_MemoryBlackHole()); /* if (class_exists('APCIterator')) { $prefix = Kwf_Cache::getUniquePrefix(); apc_delete_file(new APCIterator('user', '#^'.$prefix.'#')); } else { apc_clear_cache('user'); } */ Kwf_Component_Data_Root::setComponentClass($this->_getParam('root')); Zend_Registry::set('testRootComponentClass', $this->_getParam('root')); $root = Kwf_Component_Data_Root::getInstance(); $root->setFilename('kwf/kwctest/' . $this->_getParam('root')); $url = $this->_getParam('url'); $urlParts = explode('/', $url); if (is_array($urlParts) && $urlParts[0] == 'media') { if (sizeof($urlParts) != 7) { throw new Kwf_Exception_NotFound(); } $class = $urlParts[1]; $id = $urlParts[2]; $type = $urlParts[3]; $checksum = $urlParts[4]; // time() wäre der 5er, wird aber nur wegen browsercache benötigt $filename = $urlParts[6]; if ($checksum != Kwf_Media::getChecksum($class, $id, $type, $filename)) { throw new Kwf_Exception_AccessDenied('Access to file not allowed.'); } Kwf_Media_Output::output(Kwf_Media::getOutput($class, $id, $type)); } if ($url == 'kwf/util/kwc/render') { if (isset($_REQUEST['url'])) { $_REQUEST['url'] = str_replace('/' . $root->filename, '', $_REQUEST['url']); } Kwf_Util_Component::dispatchRender(); } $domain = 'http://' . Zend_Registry::get('config')->server->domain; $data = $root->getPageByUrl($domain . Kwf_Setup::getBaseUrl() . '/' . $url, null); if (!$data) { throw new Kwf_Exception_NotFound(); } $root->setCurrentPage($data); $contentSender = Kwc_Abstract::getSetting($data->componentClass, 'contentSender'); $contentSender = new $contentSender($data); $contentSender->sendContent(true); Kwf_Benchmark::shutDown(); Kwf_Benchmark::output(); exit; }
public static function redirect($url) { $url = (string) $url; if (!$url) { $url = '/'; } if (substr($url, 0, strlen(Kwf_Setup::getBaseUrl()) + 1) !== Kwf_Setup::getBaseUrl() . '/') { throw new Kwf_Exception('Invalid Url'); } header('Location: ' . $url); exit; }
public function indexAction() { $this->view->config = array('responsive' => Kwf_Config::getValue('kwc.responsive')); $this->view->xtype = 'kwf.component.preview'; $this->view->initialUrl = null; if (preg_match('#^https?://#', $this->_getParam('url'))) { $this->view->initialUrl = $this->_getParam('url'); } if (!$this->view->initialUrl) { $this->view->initialUrl = 'http://' . $_SERVER['HTTP_HOST'] . Kwf_Setup::getBaseUrl() . '/'; } }
public function image($image, $alt = '', $attributes = null) { if (!$image) { return ''; } $url = $this->_getImageUrl($image); if ($url == '') { return ''; } if (substr($url, 0, 8) == '/assets/') { if (Kwf_Setup::getBaseUrl()) { $url = Kwf_Setup::getBaseUrl() . $url; } $subroot = null; if ($this->_getView() && $this->_getView()->component) { $subroot = $this->_getView()->component->getSubroot(); } $ev = new Kwf_Events_Event_CreateAssetUrl(get_class($this), $url, $subroot); Kwf_Events_Dispatcher::fireEvent($ev); $url = $ev->url; } $class = ''; if (is_string($attributes)) { $class = $attributes; } if (is_string($image)) { if (file_exists(str_replace('/images/', '/images/dpr2/', $this->_getAssetPath($image)))) { $class .= ' kwfReplaceImageDpr2'; } } $class = trim($class); if (!is_array($attributes)) { $attributes = array(); } if ($class != '') { $attributes['class'] = $class; } $size = $this->_getImageSize($image); if (!isset($attributes['width'])) { $attributes['width'] = $size['width']; } if (!isset($attributes['height'])) { $attributes['height'] = $size['height']; } $attr = ''; foreach ($attributes as $k => $i) { $attr .= ' ' . $k . '="' . $i . '"'; } return "<img src=\"{$url}\"{$attr} alt=\"{$alt}\" />"; }
public function indexAction() { $this->view->kwfVersion = Kwf_Config::getValue('application.kwf.name') . ' ' . trlKwf('Version') . ' ' . Kwf_Config::getValue('application.kwf.version'); $this->view->appVersion = Kwf_Config::getValue('application.name'); $this->view->baseUrl = Kwf_Setup::getBaseUrl(); $this->view->defaultDbName = Kwf_Config::getValue('application.id'); $this->view->possibleConfigSections = array(); $cfg = new Kwf_Config_Ini('config.ini'); foreach ($cfg as $k => $i) { $this->view->possibleConfigSections[] = array($k, $k); } $this->view->assetsPackage = Kwf_Assets_Package_Maintenance::getInstance('Maintenance'); $this->view->viewport = 'Kwf.Maintenance.Viewport'; $this->view->xtype = 'kwf.maintenance.setup'; }
public function load($row) { $model = Kwc_Abstract::createOwnModel($this->_class); $componentId = $row->component_id . '-' . $row->id; if ($this->_subComponent) { $componentId .= $this->_subComponent; } $row = $model->getRow($componentId); if ($row && $row->kwf_upload_id) { $hashKey = Kwf_Util_Hash::hash($row->kwf_upload_id); return Kwf_Setup::getBaseUrl() . '/kwf/media/upload/preview?uploadId=' . $row->kwf_upload_id . '&hashKey=' . $hashKey . '&size=' . $this->_size; } else { return ''; } }
public function __get($var) { if ($var == 'url') { $c = $this; while ($c) { if (Kwf_Component_Abstract::getFlag($c->componentClass, 'hasHome') && $c->isPseudoPage) { return $c->_getPseudoPageUrl(); } $c = $c->parent; } $baseUrl = Kwf_Setup::getBaseUrl(); return $baseUrl . '/'; } return parent::__get($var); }
public function jsonDataAction() { $showLogout = true; $acl = $this->_getAcl(); $menus = $acl->getMenuConfig($this->_getAuthData()); if (empty($menus) && $this->_getUserRole() == 'guest') { $menu = array(); $menu['type'] = 'commandDialog'; $menu['menuConfig']['text'] = trlKwf('Login'); $menu['commandClass'] = 'Kwf.User.Login.Dialog'; $menus[] = $menu; $showLogout = false; } $model = Kwf_Registry::get('userModel')->getEditModel(); if ($this->_getAuthData() && $model->getRowByKwfUser($this->_getAuthData())) { foreach ($acl->getAllResources() as $resource) { if ($resource instanceof Kwf_Acl_Resource_UserSelf && $acl->isAllowedUser($this->_getAuthData(), $resource, 'view')) { $this->view->userSelfControllerUrl = $resource->getControllerUrl(); break; } } } $authData = $this->_getAuthData(); $this->view->menus = $menus; $this->view->showLogout = $showLogout; $this->view->userId = $authData ? $authData->id : null; $this->view->fullname = $authData ? $authData->__toString() : ''; $role = Zend_Registry::get('userModel')->getAuthedChangedUserRole(); $this->view->changeUser = $acl->isAllowed($role, 'kwf_user_changeuser', 'view'); $this->view->frontendUrls = array(); if (Kwf_Registry::get('acl')->has('kwf_component_pages')) { foreach (Kwc_Abstract::getComponentClasses() as $c) { if (Kwc_Abstract::hasSetting($c, 'baseProperties') && in_array('domain', Kwc_Abstract::getSetting($c, 'baseProperties'))) { $domains = Kwf_Component_Data_Root::getInstance()->getComponentsBySameClass($c, array('ignoreVisible' => true)); foreach ($domains as $domain) { if ($acl->getComponentAcl()->isAllowed($authData, $domain)) { $this->view->frontendUrls[] = array('href' => Kwf_Setup::getBaseUrl() . '/admin/component/preview?url=' . urlencode($domain->getAbsoluteUrl(true)), 'text' => $domain->name); } } } } if (!$this->view->frontendUrls) { $this->view->frontendUrls[] = array('href' => Kwf_Setup::getBaseUrl() . '/admin/component/preview', 'text' => trlKwf('Frontend')); } } }
public function image($image, $alt = '', $attributes = null) { if (!$image) { return ''; } $url = $this->_getImageUrl($image); if ($url == '') { return ''; } if (Kwf_Config::getValue('assetsCacheUrl') && substr($url, 0, 8) == '/assets/') { $url = Kwf_Config::getValue('assetsCacheUrl') . '?web=' . Kwf_Config::getValue('application.id') . '§ion=' . Kwf_Setup::getConfigSection() . '&url=' . substr($url, 1); } else { if (Kwf_Setup::getBaseUrl() && substr($url, 0, 8) == '/assets/') { $url = Kwf_Setup::getBaseUrl() . $url; } } $class = ''; if (is_string($attributes)) { $class = $attributes; } if (is_string($image)) { if (file_exists(str_replace('/images/', '/images/dpr2/', $this->_getAssetPath($image)))) { $class .= ' kwfReplaceImageDpr2'; } } $class = trim($class); if (!is_array($attributes)) { $attributes = array(); } if ($class != '') { $attributes['class'] = $class; } $size = $this->_getImageSize($image); if (!isset($attributes['width'])) { $attributes['width'] = $size['width']; } if (!isset($attributes['height'])) { $attributes['height'] = $size['height']; } $attr = ''; foreach ($attributes as $k => $i) { $attr .= ' ' . $k . '="' . $i . '"'; } return "<img src=\"{$url}\"{$attr} alt=\"{$alt}\" />"; }
public function testIt() { $mimeTypes = array('text/javascript', 'text/css'); $p = new Kwf_Assets_Package_TestPackage('Kwf_EyeCandy_SwitchDisplay_Fade'); foreach ($mimeTypes as $mimeType) { foreach ($p->getFilteredUniqueDependencies($mimeType) as $dep) { $dep->warmupCaches(); } } $cmd = "phantomjs --web-security=false ../vendor/bower_components/qunit-phantomjs-runner/runner.js "; $cmd .= "http://" . Kwf_Config::getValue('server.domain') . Kwf_Setup::getBaseUrl() . "/kwf/test/kwf_eye-candy_switch-display_fade_test 20"; $cmd .= " 2>&1"; $out = array(); exec($cmd, $out, $retVar); $out = implode("\n", $out); if ($retVar) { $this->fail("qunit test failed: " . $out); } }
public function indexAction() { $this->view->applicationName = Kwf_Config::getValue('application.name'); $this->view->brandingKoala = Kwf_Config::getValue('application.branding.koala'); $this->view->brandingVividPlanet = Kwf_Config::getValue('application.branding.vividPlanet'); $this->view->pages = Kwf_Registry::get('acl')->has('kwf_component_pages'); $this->view->baseUrl = Kwf_Setup::getBaseUrl(); $this->view->favicon = Kwf_View_Ext::getFavicon(); try { $t = new Kwf_Util_Model_Welcome(); $row = $t->getRow(1); } catch (Zend_Db_Statement_Exception $e) { //wenn tabelle nicht existiert fehler abfangen $row = null; } if ($row && ($fileRow = $row->getParentRow('LoginImage'))) { $this->view->image = Kwf_Media::getUrlByRow($row, 'LoginImageLarge', 'login'); $this->view->imageSize = Kwf_Media_Image::calculateScaleDimensions($fileRow->getImageDimensions(), Kwf_Util_Model_Welcome::getImageDimensions('LoginImageLarge')); } else { $this->view->image = false; } if (Kwf_Registry::get('config')->allowUntagged === true) { if (file_exists('.git') && Kwf_Util_Git::web()->getActiveBranch() != 'production') { $this->view->untagged = true; } if (file_exists(KWF_PATH . '/.git') && Kwf_Util_Git::kwf()->getActiveBranch() != 'production/' . Kwf_Registry::get('config')->application->id) { $this->view->untagged = true; } } $this->view->contentScript = $this->getHelper('viewRenderer')->getViewScript('login'); $this->view->lostPasswordLink = $this->getFrontController()->getRouter()->assemble(array('controller' => 'login', 'action' => 'lost-password'), 'kwf_user'); $this->view->redirects = array(); $users = Zend_Registry::get('userModel'); foreach ($users->getAuthMethods() as $k => $auth) { if ($auth instanceof Kwf_User_Auth_Interface_Redirect && $auth->showInBackend()) { $url = $this->getFrontController()->getRouter()->assemble(array('controller' => 'backend-login', 'action' => 'redirect'), 'kwf_user'); $label = $auth->getLoginRedirectLabel(); $this->view->redirects[] = array('url' => $url, 'authMethod' => $k, 'redirect' => $_SERVER['REQUEST_URI'], 'name' => Kwf_Trl::getInstance()->trlStaticExecute($label['name']), 'icon' => isset($label['icon']) ? '/assets/' . $label['icon'] : false, 'formOptions' => Kwf_User_Auth_Helper::getRedirectFormOptionsHtml($auth->getLoginRedirectFormOptions())); } } parent::indexAction(); }
public static function writeMaintenanceBootstrapSelf($output = true) { if (!is_writable('.') || !is_writable('bootstrap.php')) { return; } if (file_exists('bootstrap.php.backup')) { throw new Kwf_Exception("maintenance bootstrap already written"); } $offlineBootstrap = "<?php\n"; $offlineBootstrap .= "\$requestUri = isset(\$_SERVER['REQUEST_URI']) ? \$_SERVER['REQUEST_URI'] : null;\n"; if (Kwf_Setup::getBaseUrl()) { $offlineBootstrap .= "if (\$requestUri !== null) {\n"; $offlineBootstrap .= " if (substr(\$requestUri, 0, " . strlen(Kwf_Setup::getBaseUrl()) . ") != '" . Kwf_Setup::getBaseUrl() . "') {\n"; $offlineBootstrap .= " throw new Exception('Invalid baseUrl');\n"; $offlineBootstrap .= " }\n"; $offlineBootstrap .= " \$requestUri = substr(\$requestUri, " . strlen(Kwf_Setup::getBaseUrl()) . ");\n"; $offlineBootstrap .= "}\n"; } $offlineBootstrap .= "if (PHP_SAPI == 'cli' || (\n substr(\$requestUri, 0, 14) == '/kwf/util/apc/' ||\n \$requestUri == '/kwf/json-progress-status' ||\n substr(\$requestUri, 0, 8) == '/assets/' ||\n substr(\$requestUri, 0, 10) == '/check.php'\n )) {\n"; $offlineBootstrap .= " require('bootstrap.php.backup');\n"; $offlineBootstrap .= "} else {\n"; $offlineBootstrap .= " header(\"HTTP/1.0 503 Service Unavailable\");\n"; $offlineBootstrap .= " header(\"Content-Type: text/html; charset=utf-8\");\n"; if (file_exists('views/maintenance.php')) { //dynamic maintenance page $offlineBootstrap .= " include('views/maintenance.php');\n"; } else { $view = new Kwf_View(); $html = $view->render('maintenance.tpl'); $html = str_replace("\\", "\\\\", $html); $html = str_replace("\"", "\\\"", $html); $offlineBootstrap .= " echo \"" . $html . "\";\n"; } $offlineBootstrap .= "}\n"; rename('bootstrap.php', 'bootstrap.php.backup'); file_put_contents('bootstrap.php', $offlineBootstrap); if ($output) { echo "\nwrote offline bootstrap.php\n\n"; } Kwf_Util_ClearCache::clearOptcode(getcwd() . '/bootstrap.php'); }
protected function _init() { $this->setDispatcher(new Kwf_Controller_Dispatcher()); $this->setControllerDirectory('controllers'); $this->returnResponse(true); $this->setParam('disableOutputBuffering', true); $this->addControllerDirectory(KWF_PATH . '/Kwf/Controller/Action/Welcome', 'kwf_controller_action_welcome'); $this->addControllerDirectory(KWF_PATH . '/Kwf/Controller/Action/User', 'kwf_controller_action_user'); $this->addControllerDirectory(KWF_PATH . '/Kwf/Controller/Action/Error', 'kwf_controller_action_error'); $this->addControllerDirectory(KWF_PATH . '/Kwf/Controller/Action/Pool', 'kwf_controller_action_pool'); $this->addControllerDirectory(KWF_PATH . '/Kwf/Controller/Action/Debug', 'kwf_controller_action_debug'); $this->addControllerDirectory(KWF_PATH . '/Kwf/Controller/Action/Cli', 'kwf_controller_action_cli'); $this->addControllerDirectory(KWF_PATH . '/Kwf/Controller/Action/Cli/Web', 'kwf_controller_action_cli_web'); $this->addControllerDirectory(KWF_PATH . '/Kwf/Controller/Action/Media', 'kwf_controller_action_media'); $this->addControllerDirectory(KWF_PATH . '/Kwf/Controller/Action/Spam', 'kwf_controller_action_spam'); $this->addControllerDirectory(KWF_PATH . '/Kwf/Controller/Action/Enquiries', 'kwf_controller_action_enquiries'); $this->addControllerDirectory(KWF_PATH . '/Kwf/Controller/Action/Redirects', 'kwf_controller_action_redirects'); $this->addControllerDirectory(KWF_PATH . '/Kwf/Controller/Action/Maintenance', 'kwf_controller_action_maintenance'); $this->addControllerDirectory(KWF_PATH . '/Kwf/Controller/Action/Trl', 'kwf_controller_action_trl'); if (file_exists('controllers/Cli')) { $this->addControllerDirectory('controllers/Cli', 'cli'); } $this->addControllerDirectory(KWF_PATH . '/Kwf/Controller/Action/Component', 'kwf_controller_action_component'); if (is_dir('controllers')) { //automatically add controller directories from web based on existing directories in filesystem in web $iterator = new DirectoryIterator('controllers'); $filter = new Zend_Filter_Word_CamelCaseToDash(); foreach ($iterator as $fileinfo) { if (!$fileinfo->isDot() && $fileinfo->isDir() && $fileinfo->getBasename() != 'Cli') { $this->addControllerDirectory($fileinfo->getPathname(), strtolower($filter->filter($fileinfo->getBasename()))); } } } $plugin = new Zend_Controller_Plugin_ErrorHandler(); $plugin->setErrorHandlerModule('kwf_controller_action_error'); if (PHP_SAPI == 'cli') { $plugin->setErrorHandlerController('cli'); } $this->registerPlugin($plugin); $this->setBaseUrl(Kwf_Setup::getBaseUrl()); }
public function getPageByUrl($url, $acceptLanguage, &$exactMatch = true) { $parsedUrl = parse_url($url); if (!isset($parsedUrl['path'])) { return null; } if (!isset($parsedUrl['host'])) { throw new Kwf_Exception("Host is missing in url '{$url}'"); } if (substr($parsedUrl['host'], 0, 4) == 'dev.') { $parsedUrl['host'] = 'www.' . substr($parsedUrl['host'], 4); } foreach ($this->getPlugins('Kwf_Component_PluginRoot_Interface_PreResolveUrl') as $p) { $parsedUrl = $p->preFormatPath($parsedUrl); } $cacheUrl = $parsedUrl['host'] . $parsedUrl['path']; if ($ret = Kwf_Component_Cache_Url_Abstract::getInstance()->load($cacheUrl)) { $exactMatch = true; } else { $path = $this->getComponent()->formatPath($parsedUrl); if (is_null($path)) { return null; } $baseUrl = Kwf_Setup::getBaseUrl(); if ($baseUrl) { if (substr($path, 0, strlen($baseUrl)) != $baseUrl) { return null; } else { $path = substr($path, strlen($baseUrl)); } } $path = trim($path, '/'); $ret = $this->getComponent()->getPageByUrl($path, $acceptLanguage); if ($ret && rawurldecode($ret->url) == $parsedUrl['path']) { //nur cachen wenn kein redirect gemacht wird $exactMatch = true; if ($ret->isVisible()) { Kwf_Component_Cache_Url_Abstract::getInstance()->save($cacheUrl, $ret); } } else { $exactMatch = false; } } return $ret; }
private static function _getBaseUrlReplacements($extension, $contents) { $baseUrl = Kwf_Setup::getBaseUrl(); if (!$baseUrl) { return array(); } $ret = array(); if (preg_match_all('#url\\((\\s*[\'"]?)/assets/#', $contents, $m)) { foreach ($m[0] as $k => $i) { $ret[] = array('search' => $i, 'replace' => 'url(' . $m[1][$k] . '' . $baseUrl . '/assets/'); } } if ($extension == 'js' || $extension == 'defer.js') { if (preg_match_all('#([\'"])/(kwf|vkwf|admin|assets)/#', $contents, $m)) { foreach ($m[0] as $k => $i) { $ret[] = array('search' => $i, 'replace' => $m[1][$k] . $baseUrl . '/' . $m[2][$k] . '/'); } } } return $ret; }
public static function generateCode() { $preloadIncludePaths = array(); $namespaces = (require VENDOR_PATH . '/composer/autoload_namespaces.php'); $ret = array(); foreach ($namespaces as $ns => $dirs) { $preloadIncludePaths = array_merge($preloadIncludePaths, $dirs); } $ret = "<?php\n"; $ret .= "\$cwd = getcwd();\n"; $preloadClasses = array('Kwf_Benchmark', 'Kwf_Loader', 'Kwf_Debug'); $ret .= "if (!class_exists('Kwf_Loader', false)) {\n"; $ret .= self::_generatePreloadClassesCode($preloadClasses, $preloadIncludePaths); $ret .= "}\n"; $ret .= "Kwf_Benchmark::\$startTime = microtime(true);\n"; $ret .= "\n"; //override the default cache (/tmp) dir used by Zend_Cache_Backend to have the cache per web $ret .= "\$_SERVER['TMP'] = 'cache/zend';\n"; //only replace configured value to avoid spoofing //required eg. behind load balancers if (Kwf_Config::getValueArray('server.replaceVars.remoteAddr')) { $a = Kwf_Config::getValueArray('server.replaceVars.remoteAddr'); if (substr($a['if'], -2) == '.*') { $comparison = "substr(\$_SERVER['REMOTE_ADDR'], 0, " . (strlen($a['if']) - 1) . ") == '" . substr($a['if'], 0, -1) . "'"; } else { $comparison = "\$_SERVER['REMOTE_ADDR'] == '{$a['if']}'"; } $ret .= "\nif (isset(\$_SERVER['REMOTE_ADDR']) && {$comparison} && isset(\$_SERVER['{$a['replace']}'])) {\n"; $ret .= " \$_SERVER['REMOTE_ADDR'] = \$_SERVER['{$a['replace']}'];\n"; if (isset($a['removeTrailing'])) { $ret .= " if (substr(\$_SERVER['REMOTE_ADDR'], -" . strlen($a['removeTrailing']) . ") == '" . $a['removeTrailing'] . "') {\n"; $ret .= " \$_SERVER['REMOTE_ADDR'] = substr(\$_SERVER['REMOTE_ADDR'], 0, -" . strlen($a['removeTrailing']) . ");\n"; $ret .= " }\n"; } $ret .= "}\n"; } //try different values, if one spoofs this this is no security issue $ret .= "if (isset(\$_SERVER['HTTP_SSL_SESSION_ID'])) \$_SERVER['HTTPS'] = 'on';\n"; $ret .= "if (isset(\$_SERVER['HTTP_SESSION_ID_TAG'])) \$_SERVER['HTTPS'] = 'on';\n"; $ret .= "if (isset(\$_SERVER['HTTP_X_FORWARDED_PROTO']) && \$_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {\n"; $ret .= " \$_SERVER['HTTPS'] = 'on';\n"; $ret .= "}\n"; if (VENDOR_PATH == '../vendor') { $kwfPath = '..'; } else { $kwfPath = VENDOR_PATH . '/koala-framework/koala-framework'; } $ret .= "if (!defined('KWF_PATH')) define('KWF_PATH', '{$kwfPath}');\n"; $ret .= "if (!defined('VENDOR_PATH')) define('VENDOR_PATH', 'vendor');\n"; $ip = array(); foreach (include VENDOR_PATH . '/composer/include_paths.php' as $p) { if (VENDOR_PATH == '../vendor') { $cwd = getcwd(); $cwd = substr($cwd, 0, strrpos($cwd, '/')); self::_verifyPathInParentPath($p, $cwd); $p = '../' . substr($p, strlen($cwd) + 1); } else { self::_verifyPathInParentPath($p, getcwd()); $p = substr($p, strlen(getcwd()) + 1); } $ip[] = "'.\$cwd.'/" . $p; } $ip[] = '.'; foreach (Kwf_Config::getValueArray('includepath') as $t => $p) { if ($p) { $ip[] = $p; } } $ip = array_unique($ip); $ret .= "Kwf_Loader::setIncludePath('" . implode(PATH_SEPARATOR, $ip) . "');\n"; $ret .= "\n"; $ret .= "\n"; $ret .= "error_reporting(E_ALL & ~E_STRICT);\n"; $ret .= "set_error_handler(array('Kwf_Debug', 'handleError'), E_ALL & ~E_STRICT);\n"; $ret .= "set_exception_handler(array('Kwf_Debug', 'handleException'));\n"; $ret .= "\n"; $ret .= "\$requestUri = isset(\$_SERVER['REQUEST_URI']) ? \$_SERVER['REQUEST_URI'] : null;\n"; if (Kwf_Setup::getBaseUrl()) { $ret .= "if (\$requestUri !== null) {\n"; $ret .= " if (substr(\$requestUri, 0, " . strlen(Kwf_Setup::getBaseUrl()) . ") != '" . Kwf_Setup::getBaseUrl() . "') {\n"; $ret .= " echo 'Invalid baseUrl, expected \\'" . Kwf_Setup::getBaseUrl() . "\\'';\n"; $ret .= " exit;\n"; $ret .= " }\n"; $ret .= " \$requestUri = substr(\$requestUri, " . strlen(Kwf_Setup::getBaseUrl()) . ");\n"; $ret .= "}\n"; } $ret .= "\n"; if (Kwf_Config::getValue('debug.benchmark') || Kwf_Config::getValue('debug.benchmarklog')) { //vor registerAutoload aufrufen damit wir dort benchmarken können $ret .= "Kwf_Benchmark::enable();\n"; } else { $ret .= "if (isset(\$_REQUEST['KWF_BENCHMARK'])) {\n"; foreach (Kwf_Config::getValueArray('debug.benchmarkActivatorIp') as $activatorIp) { $ret .= " if (\$_SERVER['REMOTE_ADDR'] == '{$activatorIp}') Kwf_Benchmark::enable();\n"; } $ret .= "}\n"; } $ret .= "Kwf_Loader::registerAutoload();\n"; $ret .= "\n"; $ret .= "//here to be as fast as possible (and have no session)\n"; $ret .= "if (\$requestUri == '/kwf/json-progress-status'\n"; $ret .= ") {\n"; $ret .= " Kwf_Util_ProgressBar_DispatchStatus::dispatch();\n"; $ret .= "}\n"; $ret .= "\n"; $ret .= "//here to have less dependencies\n"; $ret .= "if (\$requestUri == '/kwf/check-config'\n"; $ret .= ") {\n"; $ret .= " Kwf_Util_Check_Config::dispatch();\n"; $ret .= "}\n"; $ret .= "if (PHP_SAPI == 'cli' && isset(\$_SERVER['argv'][1]) && \$_SERVER['argv'][1] == 'check-config') {\n"; $ret .= " Kwf_Util_Check_Config::dispatch();\n"; $ret .= "}\n"; $ret .= "\$ml = ini_get('memory_limit');\n"; $ret .= "if (strtoupper(substr(\$ml, -1)) == 'M') {\n"; $ret .= " if ((int)substr(\$ml, 0, -1) < 128) {\n"; $ret .= " ini_set('memory_limit', '128M');\n"; $ret .= " }\n"; $ret .= "}\n"; if (Kwf_Config::getValue('debug.error.log')) { $ret .= "ini_set('display_errors', false);\n"; } if (function_exists('mb_internal_encoding')) { $ret .= "mb_internal_encoding('UTF-8');\n"; } if (PHP_VERSION_ID < 50600) { if (function_exists('iconv_set_encoding')) { $ret .= "iconv_set_encoding('internal_encoding', 'utf-8');\n"; } } else { $ret .= "ini_set('default_charset', 'UTF-8');\n"; } $ret .= "umask(000); //nicht 002 weil wwwrun und kwcms in unterschiedlichen gruppen\n"; //this is *NOT* recommended but still works somehow $ret .= "if (get_magic_quotes_gpc()) Kwf_Util_UndoMagicQuotes::undoMagicQuotes();\n"; if (Kwf_Config::getValue('debug.firephp') || Kwf_Config::getValue('debug.querylog')) { $ret .= "if (PHP_SAPI != 'cli') {\n"; if (Kwf_Config::getValue('debug.firephp')) { $ret .= " require_once '" . Kwf_Config::getValue('externLibraryPath.firephp') . "/FirePHPCore/FirePHP.class.php';\n"; $ret .= " FirePHP::init();\n"; $ret .= " ob_start();\n"; } $ret .= "}\n"; } $ret .= "register_shutdown_function(array('Kwf_Setup', 'shutDown'));\n"; $ret .= "if (!class_exists('Kwf_Config', false)) {\n"; $preloadClasses = array('Kwf_Config', 'Kwf_Cache_Simple', 'Kwf_Cache_SimpleStatic'); $ret .= self::_generatePreloadClassesCode($preloadClasses, $preloadIncludePaths); $ret .= " if (substr(\$requestUri, 0, 8) != '/assets/') {\n"; $preloadClasses = array(); $preloadClasses[] = 'Zend_Registry'; $preloadClasses[] = 'Kwf_Registry'; $preloadClasses[] = 'Kwf_Trl'; $preloadClasses[] = 'Kwf_Util_SessionHandler'; $preloadClasses[] = 'Kwf_Util_Memcache'; $preloadClasses[] = 'Zend_Session'; $preloadClasses[] = 'Kwf_Benchmark_Counter'; $preloadClasses[] = 'Kwf_Benchmark_Counter_Apc'; if (Kwf_Component_Data_Root::getComponentClass()) { //only load component related classes if it is a component web $preloadClasses[] = 'Kwf_Component_Data'; $preloadClasses[] = 'Kwf_Component_Data_Root'; $preloadClasses[] = 'Kwf_Component_Settings'; $preloadClasses[] = 'Kwf_Component_Renderer_Abstract'; $preloadClasses[] = 'Kwf_Component_Renderer'; $preloadClasses[] = 'Kwf_Component_Cache'; $preloadClasses[] = 'Kwf_Component_Cache_Mysql'; $preloadClasses[] = 'Kwf_Component_Cache_Memory'; $preloadClasses[] = 'Kwf_Component_Abstract_ContentSender_Abstract'; $preloadClasses[] = 'Kwf_Component_Abstract_ContentSender_Default'; } $ret .= self::_generatePreloadClassesCode($preloadClasses, $preloadIncludePaths); $ret .= " } else {\n"; $preloadClasses = array(); $preloadClasses[] = 'Kwf_Assets_Loader'; $preloadClasses[] = 'Kwf_Media_Output'; $ret .= self::_generatePreloadClassesCode($preloadClasses, $preloadIncludePaths); $ret .= " }\n"; $ret .= "}\n"; Kwf_Cache_Simple::$backend = null; //unset to re-calculate $ret .= "Kwf_Cache_Simple::\$backend = '" . Kwf_Cache_Simple::getBackend() . "';\n"; if (Kwf_Config::getValue('server.memcache.host')) { $host = Kwf_Config::getValue('server.memcache.host'); if ($host == '%webserverHostname%') { if (PHP_SAPI == 'cli') { $host = Kwf_Util_Apc::callUtil('get-hostname', array(), array('returnBody' => true, 'skipCache' => true)); } else { $host = php_uname('n'); } } $ret .= "Kwf_Cache_Simple::\$memcacheHost = '" . $host . "';\n"; $ret .= "Kwf_Cache_Simple::\$memcachePort = '" . Kwf_Config::getValue('server.memcache.port') . "';\n"; } $configSection = call_user_func(array(Kwf_Setup::$configClass, 'getDefaultConfigSection')); $ret .= "Kwf_Setup::\$configSection = '" . $configSection . "';\n"; $ret .= "if (substr(\$requestUri, 0, 8) == '/assets/') {\n"; $ret .= " Kwf_Assets_Loader::load(\$requestUri);\n"; $ret .= "}\n"; if (Kwf_Config::getValue('debug.benchmarkCounter')) { //vor registerAutoload aufrufen damit wir dort benchmarken können $ret .= "Kwf_Benchmark::enableLog();\n"; } $ret .= "Zend_Registry::setClassName('Kwf_Registry');\n"; $ret .= "\$host = isset(\$_SERVER['HTTP_HOST']) ? \$_SERVER['HTTP_HOST'] : null;\n"; $ret .= "session_name('SESSION_" . Kwf_Config::getValue('application.id') . "');\n"; if (Kwf_Config::getValue('server.https') !== 'unknown') { $redirectHttpsCode = " if (\$_SERVER['REQUEST_METHOD'] != 'GET') {\n"; $redirectHttpsCode .= " header('HTTP/1.1 400 Bad Request');\n"; $redirectHttpsCode .= " echo 'Invalid protocol, https required';\n"; $redirectHttpsCode .= " exit;\n"; $redirectHttpsCode .= " }\n"; $redirectHttpsCode .= " \$redirect = 'https://'.\$_SERVER['HTTP_HOST'].\$_SERVER['REQUEST_URI'];\n"; $redirectHttpsCode .= " header('Location: '.\$redirect, true, 301);\n"; $redirectHttpsCode .= " Kwf_Benchmark::shutDown();\n"; $redirectHttpsCode .= " exit;\n"; $redirectHttpCode = str_replace('https', 'http', $redirectHttpsCode); $ret .= "if (PHP_SAPI != 'cli') {\n"; if (!Kwf_Config::getValue('server.https')) { $ret .= "if (isset(\$_SERVER['HTTPS'])) {\n"; $ret .= " {$redirectHttpCode}"; $ret .= "}\n"; } else { if ($domains = Kwf_Config::getValueArray('server.httpsDomains')) { $ret .= "\$domains = array("; foreach ($domains as $d) { $ret .= "'" . $d . "'=>true, "; } $ret .= ");\n"; $ret .= "\$supportsHttps = isset(\$_SERVER['HTTP_HOST']) && isset(\$domains[\$_SERVER['HTTP_HOST']]);\n"; $ret .= "if (\$supportsHttps != isset(\$_SERVER['HTTPS'])) {\n"; $ret .= " if (\$supportsHttps) {\n"; $ret .= " {$redirectHttpsCode}"; $ret .= " } else {\n"; $ret .= " {$redirectHttpCode}"; $ret .= " }\n"; $ret .= "}\n"; } else { $ret .= "if (!isset(\$_SERVER['HTTPS'])) {\n"; $ret .= "{$redirectHttpsCode}"; $ret .= "}\n"; } } $ret .= "}\n"; } $ret .= "session_set_cookie_params(\n"; $ret .= " 0,"; //lifetime $ret .= " '" . Kwf_Setup::getBaseUrl() . "/',"; //path $ret .= " null,"; //domain $ret .= " isset(\$_SERVER['HTTPS']),"; //secure $ret .= " true"; //httponly $ret .= ");\n"; $ret .= "\n"; //store session data in memcache if avaliable if ((Kwf_COnfig::getValue('server.memcache.host') || Kwf_Config::getValue('aws.simpleCacheCluster')) && Kwf_Setup::hasDb()) { $ret .= "\nif (PHP_SAPI != 'cli') Kwf_Util_SessionHandler::init();\n"; } //up here to have less dependencies or broken redirect $ret .= "\n"; $ret .= "if (substr(\$requestUri, 0, 14) == '/kwf/util/apc/'\n"; $ret .= ") {\n"; $ret .= " Kwf_Util_Apc::dispatchUtils();\n"; $ret .= "}\n"; // Falls redirectToDomain eingeschalten ist, umleiten if (Kwf_Config::getValue('server.redirectToDomain')) { $ret .= "if (\$host && substr(\$requestUri, 0, 17) != '/kwf/maintenance/' && substr(\$requestUri, 0, 8) != '/assets/') {\n"; $ret .= " \$redirect = false;\n"; if ($domains = Kwf_Config::getValueArray('kwc.domains')) { $ret .= " \$domainMatches = false;\n"; foreach ($domains as $domain) { $ret .= " if ('{$domain['domain']}' == \$host) \$domainMatches = true;\n"; } $ret .= " if (!\$domainMatches) {\n"; foreach ($domains as $domain) { if (isset($domain['pattern'])) { $ret .= "\n"; $ret .= " //pattern\n"; $ret .= " if (!\$domainMatches && preg_match('/{$domain['pattern']}/', \$host)) {\n"; $ret .= " \$domainMatches = true;\n"; if (isset($domain['noRedirectPattern'])) { $ret .= "\n"; $ret .= " //noRedirectPattern\n"; $ret .= " if (!preg_match('/{$domain['noRedirectPattern']}/', \$host)) {\n"; $ret .= " \$redirect = '{$domain['domain']}';\n"; $ret .= " }\n"; } else { $ret .= " \$redirect = '{$domain['domain']}';\n"; } $ret .= " }\n"; } } $ret .= " }\n"; $ret .= " if (!\$domainMatches) {\n"; $ret .= " \$redirect = '" . Kwf_Config::getValue('server.domain') . "';\n"; $ret .= " }\n"; } else { if (Kwf_Config::getValue('server.domain')) { $ret .= " if (\$host != '" . Kwf_Config::getValue('server.domain') . "') {\n"; if (Kwf_Config::getValue('server.noRedirectPattern')) { $ret .= " if (!preg_match('/" . Kwf_Config::getValue('server.noRedirectPattern') . "/', \$host)) {\n"; $ret .= " \$redirect = '" . Kwf_Config::getValue('server.domain') . "';\n"; $ret .= " }\n"; } else { $ret .= " \$redirect = '" . Kwf_Config::getValue('server.domain') . "';\n"; } $ret .= " }\n"; } } $ret .= " if (\$redirect) {\n"; $ret .= " \$target = Kwf_Model_Abstract::getInstance('Kwf_Util_Model_Redirects')\n"; $ret .= " ->findRedirectUrl('domainPath', \$host.\$_SERVER['REQUEST_URI']);\n"; $ret .= " if (!\$target) {\n"; $ret .= " \$target = Kwf_Model_Abstract::getInstance('Kwf_Util_Model_Redirects')\n"; $ret .= " ->findRedirectUrl('domain', \$host);\n"; $ret .= " }\n"; $ret .= " if (\$target) {\n"; $ret .= " header('Location: '.\$target, true, 301);\n"; $ret .= " } else {\n"; $ret .= " //redirect to main domain (server.domain)\n"; $ret .= " header('Location: http://'.\$redirect.\$_SERVER['REQUEST_URI'], true, 301);\n"; $ret .= " }\n"; $ret .= " exit;\n"; $ret .= " }\n"; $ret .= "}\n"; } if (Kwf_Config::getValue('preLogin')) { $ret .= "if (PHP_SAPI != 'cli' && Kwf_Setup::getRequestPath()!==false) {\n"; $ret .= " \$ignore = false;\n"; foreach (Kwf_Config::getValueArray('preLoginIgnore') as $i) { $ret .= " if (substr(\$_SERVER['REDIRECT_URL'], 0, " . strlen($i) . ") == '{$i}') \$ignore = true;\n"; } foreach (Kwf_Config::getValueArray('preLoginIgnoreIp') as $i) { if (substr($i, -1) == '*') { $i = substr($i, 0, -1); $ret .= " if (substr(\$_SERVER['REMOTE_ADDR'], 0, " . strlen($i) . ") == '{$i}') \$ignore = true;\n"; } else { if (substr($i, 0, 1) == '*') { $i = substr($i, 1); $ret .= " if (substr(\$_SERVER['REMOTE_ADDR'], -" . strlen($i) . ") == '{$i}') \$ignore = true;\n"; } else { $ret .= " if (\$_SERVER['REMOTE_ADDR'] == '{$i}') \$ignore = true;\n"; } } } $ret .= " if (!\$ignore && (empty(\$_SERVER['PHP_AUTH_USER'])\n"; $ret .= " || empty(\$_SERVER['PHP_AUTH_PW'])\n"; $ret .= " || \$_SERVER['PHP_AUTH_USER']!='" . Kwf_Config::getValue('preLoginUser') . "'\n"; $ret .= " || \$_SERVER['PHP_AUTH_PW']!='" . Kwf_Config::getValue('preLoginPassword') . "')\n"; $ret .= " ) {\n"; $ret .= " \$realm = 'Testserver';\n"; $ret .= " header('WWW-Authenticate: Basic realm=\"'.\$realm.'\"');\n"; $ret .= " throw new Kwf_Exception_AccessDenied();\n"; $ret .= " }\n"; $ret .= "}\n"; } if ($parameters = Kwf_Config::getValueArray('parameterToCookie')) { foreach ($parameters as $parameter) { $ret .= "if (isset(\$_GET['" . $parameter . "'])) setcookie('" . $parameter . "', \$_GET['" . $parameter . "'], 0, '/');\n"; } } if ($tl = Kwf_Config::getValue('debug.timeLimit')) { $ret .= "set_time_limit({$tl});\n"; } $ret .= "if (substr(\$requestUri, 0, 9) == '/kwf/pma/' || \$requestUri == '/kwf/pma') {\n"; $ret .= " Kwf_Util_Pma::dispatch();\n"; $ret .= "}\n"; $ret .= "if (isset(\$_GET['kwcPreview'])) {\n"; $ret .= " \$role = Kwf_Registry::get('userModel')->getAuthedUserRole();\n"; $ret .= " if (!Kwf_Registry::get('acl')->isAllowed(\$role, 'kwf_component_preview', 'view')) {\n"; $ret .= " header('Location: /admin/component/preview/redirect/?url='.urlencode(\$_SERVER['REQUEST_URI']));\n"; $ret .= " exit;\n"; $ret .= " }\n"; $ret .= " Kwf_Component_Data_Root::setShowInvisible(true);\n"; $ret .= "}\n"; return $ret; }
public static function dispatchUtils() { if ($_POST['password'] != self::_getHttpPassword()) { throw new Kwf_Exception_AccessDenied(); } $uri = $_SERVER['REQUEST_URI']; $baseUrl = Kwf_Setup::getBaseUrl(); if ($baseUrl && substr($uri, 0, strlen($baseUrl)) == $baseUrl) { $uri = substr($uri, strlen($baseUrl)); } if (substr($uri, 0, 25) == '/kwf/util/apc/clear-cache') { $s = microtime(true); if (isset($_REQUEST['deleteCacheSimple'])) { foreach (explode(',', $_REQUEST['deleteCacheSimple']) as $id) { Kwf_Cache_Simple::delete($id); } } if (isset($_REQUEST['clearCacheSimpleStatic'])) { foreach (explode(',', $_REQUEST['clearCacheSimpleStatic']) as $id) { Kwf_Cache_SimpleStatic::clear($id); } } if (isset($_REQUEST['deleteCacheSimpleStatic'])) { foreach (explode(',', $_REQUEST['deleteCacheSimpleStatic']) as $id) { Kwf_Cache_SimpleStatic::delete($id); } } if (isset($_REQUEST['cacheIds'])) { foreach (explode(',', $_REQUEST['cacheIds']) as $cacheId) { apc_delete($cacheId); } } if (isset($_REQUEST['files']) && function_exists('apc_delete_file')) { foreach (explode(',', $_REQUEST['files']) as $file) { @apc_delete_file($file); } } else { if (isset($_REQUEST['type']) && $_REQUEST['type'] == 'user') { if (extension_loaded('apcu')) { apc_clear_cache(); } else { apc_clear_cache('user'); } } else { if (!extension_loaded('apcu')) { apc_clear_cache('file'); } } } echo 'OK ' . round((microtime(true) - $s) * 1000) . ' ms'; exit; } else { if (substr($uri, 0, 24) == '/kwf/util/apc/save-cache') { $data = unserialize($_REQUEST['data']); if (apc_store($_REQUEST['id'], $data)) { echo 'OK'; } else { echo 'ERROR'; } exit; } else { if (substr($uri, 0, 31) == '/kwf/util/apc/get-counter-value') { $prefix = Kwf_Cache::getUniquePrefix() . 'bench-'; echo apc_fetch($prefix . $_GET['name']); exit; } else { if ($uri == '/kwf/util/apc/stats') { self::stats(); } else { if ($uri == '/kwf/util/apc/iterate') { self::iterate(); } else { if ($uri == '/kwf/util/apc/is-loaded') { if (extension_loaded('apc')) { echo 'OK1'; } else { echo 'OK0'; } exit; } else { if ($uri == '/kwf/util/apc/get-hostname') { echo php_uname('n'); exit; } } } } } } } throw new Kwf_Exception_NotFound(); }
public static function dispatchMedia() { $requestPath = self::getRequestPath(); if ($requestPath === false) { return; } $baseUrl = Kwf_Setup::getBaseUrl(); if ($baseUrl) { if (substr($requestPath, 0, strlen($baseUrl)) != $baseUrl) { throw new Kwf_Exception_NotFound(); } $requestPath = substr($requestPath, strlen($baseUrl)); } $urlParts = explode('/', substr($requestPath, 1)); if (is_array($urlParts) && $urlParts[0] == 'media') { if (sizeof($urlParts) != 7) { throw new Kwf_Exception_NotFound(); } $class = $urlParts[1]; $id = $urlParts[2]; $type = $urlParts[3]; $checksum = urlencode($urlParts[4]); // time() wäre der 5er, wird aber nur wegen browsercache benötigt $filename = $urlParts[6]; if ($checksum != Kwf_Media::getChecksum($class, $id, $type, $filename)) { throw new Kwf_Exception_NotFound(); } $class = rawurldecode($class); Kwf_Media_Output::output(Kwf_Media::getOutput($class, $id, $type)); } }
protected function _build($options) { if (!file_exists('build/assets')) { mkdir('build/assets'); } Kwf_Assets_BuildCache::getInstance()->building = true; Kwf_Assets_BuildCache::getInstance()->clean(); Kwf_Assets_BuildCache::getInstance()->save(time(), 'assetsVersion'); $langs = $this->_getAllLanguages(); $packages = $this->_getAllPackages(); $exts = array('js', 'defer.js', 'css', 'printcss'); echo "\ncalculating dependencies...\n"; $steps = count($packages) * count($exts); $c = new Zend_ProgressBar_Adapter_Console(); $c->setElements(array(Zend_ProgressBar_Adapter_Console::ELEMENT_PERCENT, Zend_ProgressBar_Adapter_Console::ELEMENT_BAR, Zend_ProgressBar_Adapter_Console::ELEMENT_TEXT)); $c->setTextWidth(50); $progress = new Zend_ProgressBar($c, 0, $steps); $countDependencies = 0; foreach ($packages as $p) { $depName = $p->getDependencyName(); foreach ($exts as $extension) { $progress->next(1, "{$depName} {$extension}"); $countDependencies += count($p->getFilteredUniqueDependencies(self::$_mimeTypeByExtension[$extension])); $cacheId = $p->getMaxMTimeCacheId(self::$_mimeTypeByExtension[$extension]); if (!$cacheId) { throw new Kwf_Exception("Didn't get cacheId for " . get_class($p)); } $maxMTime = $p->getMaxMTime(self::$_mimeTypeByExtension[$extension]); Kwf_Assets_BuildCache::getInstance()->save($maxMTime, $cacheId); //save generated caches for clear-cache-watcher $fileName = 'build/assets/package-max-mtime-' . $extension; if (!file_exists($fileName) || strpos(file_get_contents($fileName), $cacheId . "\n") === false) { file_put_contents($fileName, $cacheId . "\n", FILE_APPEND); } } } $progress->finish(); echo "compiling assets...\n"; $c = new Zend_ProgressBar_Adapter_Console(); $c->setElements(array(Zend_ProgressBar_Adapter_Console::ELEMENT_PERCENT, Zend_ProgressBar_Adapter_Console::ELEMENT_BAR, Zend_ProgressBar_Adapter_Console::ELEMENT_TEXT)); $c->setTextWidth(50); $progress = new Zend_ProgressBar($c, 0, $countDependencies); foreach ($packages as $p) { foreach ($exts as $extension) { foreach ($p->getFilteredUniqueDependencies(self::$_mimeTypeByExtension[$extension]) as $dep) { $progress->next(1, "{$dep}"); $dep->warmupCaches(); } } } $progress->finish(); echo "generating packages...\n"; $steps = count($packages) * count($langs) * count($exts) * 4; $c = new Zend_ProgressBar_Adapter_Console(); $c->setElements(array(Zend_ProgressBar_Adapter_Console::ELEMENT_PERCENT, Zend_ProgressBar_Adapter_Console::ELEMENT_BAR, Zend_ProgressBar_Adapter_Console::ELEMENT_TEXT)); $c->setTextWidth(50); $progress = new Zend_ProgressBar($c, 0, $steps); foreach ($packages as $p) { $depName = $p->getDependencyName(); foreach ($langs as $language) { foreach ($exts as $extension) { $packageContents = $p->getPackageContents(self::$_mimeTypeByExtension[$extension], $language); $maxMTime = $p->getMaxMTime(self::$_mimeTypeByExtension[$extension]); $progress->next(1, "{$depName} {$extension} {$language}"); $progress->next(1, "{$depName} {$extension} {$language} source"); $this->_buildPackageContents($packageContents, $maxMTime, $p, $extension, $language); $progress->next(1, "{$depName} {$extension} {$language} map"); $this->_buildPackageSourceMap($packageContents, $maxMTime, $p, $extension, $language); $progress->next(1, "{$depName} {$extension} {$language} url"); $urls = $p->getPackageUrls(self::$_mimeTypeByExtension[$extension], $language); if (Kwf_Setup::getBaseUrl()) { foreach ($urls as $k => $i) { $urls[$k] = substr($i, strlen(Kwf_Setup::getBaseUrl())); } } $cacheId = $p->getPackageUrlsCacheId(self::$_mimeTypeByExtension[$extension], $language); Kwf_Assets_BuildCache::getInstance()->save($urls, $cacheId); } } } Kwf_Assets_Cache::getInstance()->clean(); Kwf_Assets_BuildCache::getInstance()->building = false; $exts = array('js', 'defer.js', 'css'); foreach ($packages as $p) { $depName = $p->getDependencyName(); $language = $langs[0]; foreach ($exts as $extension) { $cacheId = Kwf_Assets_Dispatcher::getCacheIdByPackage($p, $extension, $language); $cacheContents = Kwf_Assets_BuildCache::getInstance()->load($cacheId); echo "{$depName} "; $h = new Kwf_View_Helper_FileSize(); echo "{$extension} size: " . $h->fileSize(strlen(gzencode($cacheContents['contents'], 9, FORCE_GZIP))); echo "\n"; } } $d = Kwf_Assets_Package_Default::getDefaultProviderList()->findDependency('Frontend'); foreach ($d->getFilteredUniqueDependencies('text/javascript') as $i) { if ($i instanceof Kwf_Assets_Dependency_File && $i->getType() == 'ext2') { echo "\n[WARNING] Frontend text/javascript contains ext2\n"; echo "To improve frontend performance all ext2 dependencies should be moved to defer\n\n"; break; } } }
public function toString($effects = array()) { $d = $this->_getIconAndType(); if ($effects) { $str = 'fx'; foreach ($effects as $effect) { $str .= '_' . $effect; } return Kwf_Setup::getBaseUrl() . '/assets/' . $str . '/' . $d['type'] . '/' . $d['icon']; } else { return Kwf_Setup::getBaseUrl() . '/assets/' . $d['type'] . '/' . $d['icon']; } }
public function validate() { return Kwf_Setup::getBaseUrl() === $this->getValidData(); }
protected function _getUrlType() { $prefixLen = strlen(Kwf_Setup::getBaseUrl()); if (!isset($_SERVER['REQUEST_URI'])) { if (php_sapi_name() == 'cli') { $urlType = 'cli'; } else { $urlType = 'unknown'; } } else { if (substr($_SERVER['REQUEST_URI'], $prefixLen, 8) == '/assets/') { $urlType = 'asset'; } else { if (substr($_SERVER['REQUEST_URI'], $prefixLen, 7) == '/media/') { $urlType = 'media'; } else { if (substr($_SERVER['REQUEST_URI'], $prefixLen, 7) == '/admin/') { $urlType = 'admin'; } else { if (substr($_SERVER['REQUEST_URI'], $prefixLen, 5) == '/kwf/') { $urlType = 'admin'; } else { $urlType = 'content'; } } } } } return $urlType; }
public function authAction() { $state = $this->_getParam('state'); if ($state) { //we got a state, validate it like it is a redirect-callback $this->forward('redirect-callback'); return; } $users = Zend_Registry::get('userModel'); foreach ($users->getAuthMethods() as $authMethod) { if ($authMethod instanceof Kwf_User_Auth_Interface_Redirect) { $user = $authMethod->getUserToLoginByParams($this->getRequest()->getParams()); if ($user) { break; } } } if ($user) { $users->loginUserRow($user, true); $redirect = $this->_getParam('redirect'); if (!$redirect) { $redirect = Kwf_Setup::getBaseUrl() . '/'; } Kwf_Util_Redirect::redirect($redirect); } else { throw new Kwf_Exception_AccessDenied(); } }
protected function _build($options) { if (!file_exists('build/assets')) { mkdir('build/assets'); } Kwf_Assets_BuildCache::getInstance()->building = true; Kwf_Assets_BuildCache::getInstance()->clean(); Kwf_Assets_BuildCache::getInstance()->save(time(), 'assetsVersion'); $langs = $this->getAllLanguages(); $packages = $this->getAllPackages(); $exts = array('js', 'defer.js', 'css'); echo "\ncalculating dependencies...\n"; $steps = count($packages) * count($exts); $c = new Zend_ProgressBar_Adapter_Console(); $c->setElements(array(Zend_ProgressBar_Adapter_Console::ELEMENT_PERCENT, Zend_ProgressBar_Adapter_Console::ELEMENT_BAR, Zend_ProgressBar_Adapter_Console::ELEMENT_TEXT)); $c->setTextWidth(50); $progress = new Zend_ProgressBar($c, 0, $steps); $countDependencies = 0; foreach ($packages as $p) { $depName = $p->getDependencyName(); foreach ($exts as $extension) { $progress->next(1, "{$depName} {$extension}"); $p->getFilteredUniqueDependencies(self::$_mimeTypeByExtension[$extension]); $cacheId = $p->getMaxMTimeCacheId(self::$_mimeTypeByExtension[$extension]); if (!$cacheId) { throw new Kwf_Exception("Didn't get cacheId for " . get_class($p)); } $maxMTime = $p->getMaxMTime(self::$_mimeTypeByExtension[$extension]); Kwf_Assets_BuildCache::getInstance()->save($maxMTime, $cacheId); //save generated caches for clear-cache-watcher $fileName = 'build/assets/package-max-mtime-' . $extension; if (!file_exists($fileName) || strpos(file_get_contents($fileName), $cacheId . "\n") === false) { file_put_contents($fileName, $cacheId . "\n", FILE_APPEND); } } $it = new RecursiveIteratorIterator(new Kwf_Assets_Dependency_Iterator_UniqueFilter(new Kwf_Assets_Dependency_Iterator_Recursive($p->getDependency(), Kwf_Assets_Dependency_Abstract::DEPENDENCY_TYPE_ALL)), RecursiveIteratorIterator::CHILD_FIRST); foreach ($it as $i) { $countDependencies++; } } $progress->finish(); echo "compiling assets...\n"; $c = new Zend_ProgressBar_Adapter_Console(); $c->setElements(array(Zend_ProgressBar_Adapter_Console::ELEMENT_PERCENT, Zend_ProgressBar_Adapter_Console::ELEMENT_BAR, Zend_ProgressBar_Adapter_Console::ELEMENT_TEXT)); $c->setTextWidth(50); $progress = new Zend_ProgressBar($c, 0, $countDependencies); foreach ($packages as $p) { $it = new RecursiveIteratorIterator(new Kwf_Assets_Dependency_Iterator_UniqueFilter(new Kwf_Assets_Dependency_Iterator_Recursive($p->getDependency(), Kwf_Assets_Dependency_Abstract::DEPENDENCY_TYPE_ALL)), RecursiveIteratorIterator::CHILD_FIRST); foreach ($it as $dep) { $progress->next(1, "{$dep}"); $dep->warmupCaches(); } } $progress->finish(); echo "generating packages...\n"; $steps = count($packages) * count($langs) * count($exts) * 4; $c = new Zend_ProgressBar_Adapter_Console(); $c->setElements(array(Zend_ProgressBar_Adapter_Console::ELEMENT_PERCENT, Zend_ProgressBar_Adapter_Console::ELEMENT_BAR, Zend_ProgressBar_Adapter_Console::ELEMENT_TEXT)); $c->setTextWidth(50); $progress = new Zend_ProgressBar($c, 0, $steps); foreach ($packages as $p) { $depName = $p->getDependencyName(); foreach ($langs as $language) { foreach ($exts as $extension) { $progress->next(1, "{$depName} {$extension} {$language}"); $packageContents = $p->getPackageContents(self::$_mimeTypeByExtension[$extension], $language); $maxMTime = $p->getMaxMTime(self::$_mimeTypeByExtension[$extension]); $progress->next(1, "{$depName} {$extension} {$language} source"); $this->_buildPackageContents($packageContents, $maxMTime, $p, $extension, $language); $progress->next(1, "{$depName} {$extension} {$language} map"); $this->_buildPackageSourceMap($packageContents, $maxMTime, $p, $extension, $language); $progress->next(1, "{$depName} {$extension} {$language} url"); $urls = $p->getPackageUrls(self::$_mimeTypeByExtension[$extension], $language); if (Kwf_Setup::getBaseUrl()) { foreach ($urls as $k => $i) { $urls[$k] = substr($i, strlen(Kwf_Setup::getBaseUrl())); } } $cacheId = $p->getPackageUrlsCacheId(self::$_mimeTypeByExtension[$extension], $language); Kwf_Assets_BuildCache::getInstance()->save($urls, $cacheId); } } } Kwf_Assets_Cache::getInstance()->clean(); Kwf_Assets_BuildCache::getInstance()->building = false; }