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;
     }
 }
Example #3
0
 /**
  *
  * @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() . '/';
     }
 }
Example #10
0
 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';
 }
Example #12
0
 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 '';
     }
 }
Example #13
0
 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);
 }
Example #14
0
 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'));
         }
     }
 }
Example #15
0
 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') . '&section=' . 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}\" />";
 }
Example #16
0
 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');
 }
Example #19
0
 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());
 }
Example #20
0
 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;
 }
Example #21
0
 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;
 }
Example #22
0
 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;
 }
Example #23
0
 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();
 }
Example #24
0
 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));
     }
 }
Example #25
0
 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;
         }
     }
 }
Example #26
0
 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();
 }
Example #28
0
 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();
     }
 }
Example #30
0
 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;
 }