/** * 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'); }
/** * 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'); }
/** * 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; }
/** * 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; }
/** * @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')); }