Example #1
0
    /**
     * Initiate shopware auth resource
     * database adapter by default
     *
     * @param Enlight_Event_EventArgs $args
     * @throws Exception
     * @return null|\Zend_Auth
     */
    public function onInitResourceBackendSession(Enlight_Event_EventArgs $args)
    {
        $options = $this->Application()->getOption('backendSession', array());

        if (!isset($options['cookie_path']) && $this->request !== null) {
            $options['cookie_path'] = rtrim($this->request->getBaseUrl(), '/') . '/backend/';
        }
        if (empty($options['gc_maxlifetime'])) {
            $backendTimeout = $this->Config()->get('backendTimeout', 60 * 90);
            $options['gc_maxlifetime'] = $backendTimeout;
        }
        $refererCheck = false; $clientCheck = false;
        if(is_bool($options['referer_check'])) {
            $refererCheck = $options['referer_check'];
            unset($options['referer_check']);
        }
        if(!empty($options['client_check'])) {
            $clientCheck = true;
        }
        unset($options['client_check']);

        Enlight_Components_Session::start($options);

        $referer = $this->request->getHeader('referer');
        if($refererCheck && $referer !== null
          && strpos($referer, 'http') === 0) {
            $referer = substr($referer, 0, strpos($referer, '/backend/'));
            $referer .= '/backend/';
            if(!isset($_SESSION['__SW_REFERER'])) {
                $_SESSION['__SW_REFERER'] = $referer;
            } elseif (strpos($referer, $_SESSION['__SW_REFERER']) !== 0) {
                Enlight_Components_Session::destroy();
                throw new Exception('Referer check for backend session failed');
            }
        }
        $client = $this->request->getHeader('userAgent');
        if($clientCheck && $client !== null) {
            if(!isset($_SESSION['__SW_CLIENT'])) {
                $_SESSION['__SW_CLIENT'] = $client;
            } elseif ($client !==  $_SESSION['__SW_CLIENT']) {
                Enlight_Components_Session::destroy();
                throw new Exception('Client check for backend session failed');
            }
        }

        return new Enlight_Components_Session_Namespace('ShopwareBackend');
    }
Example #2
0
 /**
  * Initiate shopware auth resource
  * database adapter by default
  *
  * @param Enlight_Event_EventArgs $args
  * @throws Exception
  * @return null|\Zend_Auth
  */
 public function onInitResourceBackendSession(Enlight_Event_EventArgs $args)
 {
     $options = $this->Application()->getOption('backendSession', array());
     if (!isset($options['cookie_path']) && $this->request !== null) {
         $options['cookie_path'] = rtrim($this->request->getBaseUrl(), '/') . '/backend/';
     }
     if (empty($options['gc_maxlifetime'])) {
         $backendTimeout = $this->Config()->get('backendTimeout', 60 * 90);
         $options['gc_maxlifetime'] = $backendTimeout;
     }
     $refererCheck = false;
     $clientCheck = false;
     if (is_bool($options['referer_check'])) {
         $refererCheck = $options['referer_check'];
         unset($options['referer_check']);
     }
     if (!empty($options['client_check'])) {
         $clientCheck = true;
     }
     unset($options['client_check']);
     if (!isset($options['save_handler']) || $options['save_handler'] == 'db') {
         // SW-4819 Add database backend support
         $config_save_handler = array('name' => 's_core_sessions_backend', 'primary' => 'id', 'modifiedColumn' => 'modified', 'dataColumn' => 'data', 'lifetimeColumn' => 'expiry');
         Enlight_Components_Session::setSaveHandler(new Enlight_Components_Session_SaveHandler_DbTable($config_save_handler));
     }
     Enlight_Components_Session::start($options);
     if ($refererCheck && ($referer = $this->request->getHeader('referer')) !== null && strpos($referer, 'http') === 0) {
         $referer = substr($referer, 0, strpos($referer, '/backend/'));
         $referer .= '/backend/';
         if (!isset($_SESSION['__SW_REFERER'])) {
             $_SESSION['__SW_REFERER'] = $referer;
         } elseif (strpos($referer, $_SESSION['__SW_REFERER']) !== 0) {
             Enlight_Components_Session::destroy();
             throw new Exception('Referer check for backend session failed');
         }
     }
     if ($clientCheck && ($client = $this->request->getHeader('userAgent')) !== null) {
         if (!isset($_SESSION['__SW_CLIENT'])) {
             $_SESSION['__SW_CLIENT'] = $client;
         } elseif ($client !== $_SESSION['__SW_CLIENT']) {
             Enlight_Components_Session::destroy();
             throw new Exception('Client check for backend session failed');
         }
     }
     return new Enlight_Components_Session_Namespace('ShopwareBackend');
 }
Example #3
0
 /**
  * Invalidates a given $cacheId
  *
  * This sends a http-ban-request to the proxyUrl containing
  * the $cacheId in the x-shopware-invalidates http-header
  *
  * @param string $cacheId
  * @return bool
  */
 protected function invalidateCacheId($cacheId)
 {
     if (!$this->Config()->get('proxyPrune')) {
         return false;
     }
     $proxyUrl = $this->getProxyUrl($this->request);
     if ($proxyUrl === null) {
         return false;
     }
     if (!$this->request || $this->request->getHeader('Surrogate-Capability') === false) {
         return false;
     }
     try {
         $client = new Zend_Http_Client($proxyUrl, array('useragent' => 'Shopware/' . Shopware()->Config()->get('version'), 'timeout' => 5));
         $client->setHeaders('x-shopware-invalidates', $cacheId)->request('BAN');
     } catch (\Exception $e) {
         return false;
     }
     return true;
 }
Example #4
0
    /**
     * Refresh referrer log
     *
     * @param   \Enlight_Controller_Request_RequestHttp $request
     */
    public function refreshReferer($request)
    {
        $referer = $request->getHeader('Referer', $request->getParam('referer'));
        $partner = $request->getParam('partner', $request->getParam('sPartner'));

        if (empty($referer)
            || strpos($referer, 'http') !== 0
            || strpos($referer, $request->getHttpHost()) !== false
        ) {
            return;
        }

        Shopware()->Session()->sReferer = $referer;

        if ($partner !== null) {
            $referer .= '$' . $partner;
        }

        $sql = 'INSERT INTO s_statistics_referer (datum, referer) VALUES (NOW(), ?)';
        Shopware()->Db()->query($sql, array($referer));
    }
 /**
  * @param Request $request
  * @return bool
  */
 public function acceptsRequest(Request $request)
 {
     $firePhpVersion = $request->getHeader('X-FirePHP-Version');
     $userAgent = preg_match('{\\bFirePHP/\\d+\\.\\d+\\b}', $request->getHeader('User-Agent'));
     return $firePhpVersion || $userAgent;
 }
Example #6
0
    /**
     * @param Enlight_Event_EventArgs $eventArgs
     */
    public function onPostPersist(Enlight_Event_EventArgs $eventArgs)
    {
        if(empty($this->Config()->proxyBan)) {
            return;
        }
        if($this->proxyUrl === null || $this->request->getHeader('Surrogate-Capability') === false) {
            return;
        }

        $entity = $eventArgs->get('entity');
        if ($entity instanceof \Doctrine\ORM\Proxy\Proxy) {
            $entityName = get_parent_class($entity);
        } else {
            $entityName = get_class($eventArgs->getEntity());
        }

        $categoryIds = array();
        $articleIds = array();

        switch ($entityName) {
            case 'Shopware\Models\Article\Article':
                $articleIds[] = $entity->getId();
                foreach ($entity->getCategories() as $category) {
                    $categoryIds[] = $category->getId();
                }
                break;
            case 'Shopware\Models\Category\Category':
                $categoryIds[] = $entity->getId();
                break;
            case 'Shopware\Models\Banner\Banner':
                $categoryIds[] = $entity->getCategoryId();
                break;
        }

        $client = new Zend_Http_Client(null, array(
            'useragent' => 'Shopware/' . Shopware()->Config()->version,
            'timeout' => 5,
        ));

        try {
            foreach ($categoryIds as $categoryId) {
                $client->setUri(
                    $this->proxyUrl . urlencode('c-' . $categoryId)
                )->request('BAN');
            }
            foreach ($articleIds as $articleId) {
                $client->setUri(
                    $this->proxyUrl . urlencode('a-' . $articleId)
                )->request('BAN');
            }
        } catch(Exception $e) { }
    }
 /**
  * @param Request $request
  * @return bool
  */
 public function acceptsRequest(Request $request)
 {
     return (bool) preg_match('{\\bChrome/\\d+[\\.\\d+]*\\b}', $request->getHeader('User-Agent'));
 }