Version Notes
Supports Magento v1.6 and later
Download this release
Release Info
Developer | Chris Wells |
Extension | Nexcessnet_Turpentine |
Version | 0.5.5 |
Comparing to | |
See all releases |
Code changes from version 0.5.4 to 0.5.5
- app/code/community/Nexcessnet/Turpentine/Helper/Ban.php +9 -2
- app/code/community/Nexcessnet/Turpentine/Helper/Data.php +9 -0
- app/code/community/Nexcessnet/Turpentine/Helper/Varnish.php +4 -3
- app/code/community/Nexcessnet/Turpentine/Model/Dummy/Request.php +13 -2
- app/code/community/Nexcessnet/Turpentine/Model/Observer/Ban.php +11 -6
- app/code/community/Nexcessnet/Turpentine/Model/Observer/Esi.php +5 -3
- app/code/community/Nexcessnet/Turpentine/Model/Varnish/Configurator/Abstract.php +2 -2
- app/code/community/Nexcessnet/Turpentine/controllers/EsiController.php +11 -2
- app/code/community/Nexcessnet/Turpentine/controllers/Varnish/ManagementController.php +8 -2
- app/code/community/Nexcessnet/Turpentine/etc/config.xml +1 -1
- app/code/community/Nexcessnet/Turpentine/misc/uuid.c +2 -1
- app/code/community/Nexcessnet/Turpentine/misc/version-2.vcl +10 -15
- app/code/community/Nexcessnet/Turpentine/misc/version-3.vcl +10 -16
- app/design/adminhtml/default/default/template/turpentine/varnish_management.phtml +13 -15
- app/design/frontend/base/default/template/turpentine/ajax.phtml +38 -23
- package.xml +2 -1
app/code/community/Nexcessnet/Turpentine/Helper/Ban.php
CHANGED
@@ -30,9 +30,16 @@ class Nexcessnet_Turpentine_Helper_Ban extends Mage_Core_Helper_Abstract {
|
|
30 |
public function getProductBanRegex( $product ) {
|
31 |
$urlPatterns = array();
|
32 |
foreach( $this->getParentProducts( $product ) as $parentProduct ) {
|
33 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
}
|
35 |
-
$urlPatterns[] = $product->getUrlKey();
|
36 |
$pattern = sprintf( '(?:%s)', implode( '|', $urlPatterns ) );
|
37 |
return $pattern;
|
38 |
}
|
30 |
public function getProductBanRegex( $product ) {
|
31 |
$urlPatterns = array();
|
32 |
foreach( $this->getParentProducts( $product ) as $parentProduct ) {
|
33 |
+
if ( $parentProduct->getUrlKey() ) {
|
34 |
+
$urlPatterns[] = $parentProduct->getUrlKey();
|
35 |
+
}
|
36 |
+
}
|
37 |
+
if ( $product->getUrlKey() ) {
|
38 |
+
$urlPatterns[] = $product->getUrlKey();
|
39 |
+
}
|
40 |
+
if ( empty($urlPatterns) ) {
|
41 |
+
$urlPatterns[] = "##_NEVER_MATCH_##";
|
42 |
}
|
|
|
43 |
$pattern = sprintf( '(?:%s)', implode( '|', $urlPatterns ) );
|
44 |
return $pattern;
|
45 |
}
|
app/code/community/Nexcessnet/Turpentine/Helper/Data.php
CHANGED
@@ -292,6 +292,15 @@ class Nexcessnet_Turpentine_Helper_Data extends Mage_Core_Helper_Abstract {
|
|
292 |
foreach( $blockNode->xpath( './block | ./reference' ) as $childBlockNode ) {
|
293 |
$blockNames = array_merge( $blockNames,
|
294 |
$this->_getChildBlockNames( $childBlockNode ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
295 |
}
|
296 |
} else {
|
297 |
$blockNames = array();
|
292 |
foreach( $blockNode->xpath( './block | ./reference' ) as $childBlockNode ) {
|
293 |
$blockNames = array_merge( $blockNames,
|
294 |
$this->_getChildBlockNames( $childBlockNode ) );
|
295 |
+
if( $this->getLayout() instanceof Varien_Simplexml_Config ) {
|
296 |
+
foreach( $this->getLayout()->getNode()->xpath( sprintf(
|
297 |
+
'//reference[@name=\'%s\']', (string)$childBlockNode['name'] ) )
|
298 |
+
as $childBlockLayoutNode ) {
|
299 |
+
$blockNames = array_merge( $blockNames,
|
300 |
+
$this->_getChildBlockNames( $childBlockLayoutNode ) );
|
301 |
+
|
302 |
+
}
|
303 |
+
}
|
304 |
}
|
305 |
} else {
|
306 |
$blockNames = array();
|
app/code/community/Nexcessnet/Turpentine/Helper/Varnish.php
CHANGED
@@ -162,10 +162,11 @@ class Nexcessnet_Turpentine_Helper_Varnish extends Mage_Core_Helper_Abstract {
|
|
162 |
* @return boolean
|
163 |
*/
|
164 |
public function isBypassEnabled() {
|
165 |
-
$
|
166 |
-
|
|
|
167 |
|
168 |
-
return $
|
169 |
}
|
170 |
|
171 |
/**
|
162 |
* @return boolean
|
163 |
*/
|
164 |
public function isBypassEnabled() {
|
165 |
+
$bypassEnabled = (bool)Mage::getModel( 'core/cookie' )->get(
|
166 |
+
Mage::helper( 'turpentine/data' )->getBypassCookieName() ) ===
|
167 |
+
$this->getSecretHandshake();
|
168 |
|
169 |
+
return $bypassEnabled;
|
170 |
}
|
171 |
|
172 |
/**
|
app/code/community/Nexcessnet/Turpentine/Model/Dummy/Request.php
CHANGED
@@ -40,7 +40,18 @@ class Nexcessnet_Turpentine_Model_Dummy_Request extends
|
|
40 |
public function __construct( $uri=null ) {
|
41 |
$this->_initFakeSuperGlobals();
|
42 |
$this->_fixupFakeSuperGlobals( $uri );
|
43 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
}
|
45 |
|
46 |
/**
|
@@ -542,7 +553,7 @@ class Nexcessnet_Turpentine_Model_Dummy_Request extends
|
|
542 |
/**
|
543 |
* Check this request against the cms, standard, and default routers to fill
|
544 |
* the module/controller/action/route fields.
|
545 |
-
*
|
546 |
* TODO: This whole thing is a gigantic hack. Would be nice to have a
|
547 |
* better solution.
|
548 |
*
|
40 |
public function __construct( $uri=null ) {
|
41 |
$this->_initFakeSuperGlobals();
|
42 |
$this->_fixupFakeSuperGlobals( $uri );
|
43 |
+
try {
|
44 |
+
parent::__construct( $uri );
|
45 |
+
} catch( Exception $e ) {
|
46 |
+
Mage::helper( 'turpentine/debug' )
|
47 |
+
->logError( 'Bad URI given to dummy request: ' . $uri );
|
48 |
+
Mage::helper( 'turpentine/debug' )
|
49 |
+
->logBackTrace();
|
50 |
+
Mage::logException( $e );
|
51 |
+
if( Mage::helper( 'turpentine/esi' )->getEsiDebugEnabled() ) {
|
52 |
+
throw $e;
|
53 |
+
}
|
54 |
+
}
|
55 |
}
|
56 |
|
57 |
/**
|
553 |
/**
|
554 |
* Check this request against the cms, standard, and default routers to fill
|
555 |
* the module/controller/action/route fields.
|
556 |
+
*
|
557 |
* TODO: This whole thing is a gigantic hack. Would be nice to have a
|
558 |
* better solution.
|
559 |
*
|
app/code/community/Nexcessnet/Turpentine/Model/Observer/Ban.php
CHANGED
@@ -280,12 +280,17 @@ class Nexcessnet_Turpentine_Model_Observer_Ban extends Varien_Event_Observer {
|
|
280 |
implode( '|', array_unique( $productIds ) ) );
|
281 |
$patterns[] = sprintf( '/review/product/view/id/%d/',
|
282 |
$review->getEntityId() );
|
283 |
-
$
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
$
|
288 |
-
|
|
|
|
|
|
|
|
|
|
|
289 |
$urlPattern = implode( '|', $patterns );
|
290 |
|
291 |
$result = $this->_getVarnishAdmin()->flushUrl( $urlPattern );
|
280 |
implode( '|', array_unique( $productIds ) ) );
|
281 |
$patterns[] = sprintf( '/review/product/view/id/%d/',
|
282 |
$review->getEntityId() );
|
283 |
+
$productPatterns = array();
|
284 |
+
foreach ( $products as $p ) {
|
285 |
+
$urlKey = $p->getUrlModel()->formatUrlKey( $p->getName() );
|
286 |
+
if ( $urlKey ) {
|
287 |
+
$productPatterns[] = $urlKey;
|
288 |
+
}
|
289 |
+
}
|
290 |
+
if ( !empty($productPatterns) ) {
|
291 |
+
$productPatterns = array_unique( $productPatterns );
|
292 |
+
$patterns[] = sprintf( '(?:%s)', implode( '|', $productPatterns ) );
|
293 |
+
}
|
294 |
$urlPattern = implode( '|', $patterns );
|
295 |
|
296 |
$result = $this->_getVarnishAdmin()->flushUrl( $urlPattern );
|
app/code/community/Nexcessnet/Turpentine/Model/Observer/Esi.php
CHANGED
@@ -329,9 +329,11 @@ class Nexcessnet_Turpentine_Model_Observer_Esi extends Varien_Event_Observer {
|
|
329 |
foreach( $childBlocks as $blockName ) {
|
330 |
foreach( $layout->getUpdate()->getHandles() as $handle ) {
|
331 |
// check if this handle has any block or reference tags that
|
332 |
-
// refer to this block or a child block
|
333 |
-
|
334 |
-
|
|
|
|
|
335 |
$activeHandles[] = $handle;
|
336 |
}
|
337 |
}
|
329 |
foreach( $childBlocks as $blockName ) {
|
330 |
foreach( $layout->getUpdate()->getHandles() as $handle ) {
|
331 |
// check if this handle has any block or reference tags that
|
332 |
+
// refer to this block or a child block, unless the handle name
|
333 |
+
// is blank
|
334 |
+
if( $handle !== '' &&
|
335 |
+
$layoutXml->xpath( sprintf(
|
336 |
+
'//%s//*[@name=\'%s\']', $handle, $blockName ) ) ) {
|
337 |
$activeHandles[] = $handle;
|
338 |
}
|
339 |
}
|
app/code/community/Nexcessnet/Turpentine/Model/Varnish/Configurator/Abstract.php
CHANGED
@@ -549,10 +549,10 @@ if (req.http.User-Agent ~ "iP(?:hone|ad|od)|BlackBerry|Palm|Googlebot-Mobile|Mob
|
|
549 |
set req.http.X-Normalized-User-Agent = "msie";
|
550 |
} else if (req.http.User-Agent ~ "Firefox") {
|
551 |
set req.http.X-Normalized-User-Agent = "firefox";
|
552 |
-
} else if (req.http.User-Agent ~ "Safari") {
|
553 |
-
set req.http.X-Normalized-User-Agent = "safari";
|
554 |
} else if (req.http.User-Agent ~ "Chrome") {
|
555 |
set req.http.X-Normalized-User-Agent = "chrome";
|
|
|
|
|
556 |
} else if (req.http.User-Agent ~ "Opera") {
|
557 |
set req.http.X-Normalized-User-Agent = "opera";
|
558 |
} else {
|
549 |
set req.http.X-Normalized-User-Agent = "msie";
|
550 |
} else if (req.http.User-Agent ~ "Firefox") {
|
551 |
set req.http.X-Normalized-User-Agent = "firefox";
|
|
|
|
|
552 |
} else if (req.http.User-Agent ~ "Chrome") {
|
553 |
set req.http.X-Normalized-User-Agent = "chrome";
|
554 |
+
} else if (req.http.User-Agent ~ "Safari") {
|
555 |
+
set req.http.X-Normalized-User-Agent = "safari";
|
556 |
} else if (req.http.User-Agent ~ "Opera") {
|
557 |
set req.http.X-Normalized-User-Agent = "opera";
|
558 |
} else {
|
app/code/community/Nexcessnet/Turpentine/controllers/EsiController.php
CHANGED
@@ -137,8 +137,16 @@ class Nexcessnet_Turpentine_EsiController extends Mage_Core_Controller_Front_Act
|
|
137 |
Mage::register( $key, $value, true );
|
138 |
}
|
139 |
foreach( $esiData->getComplexRegistry() as $key => $data ) {
|
140 |
-
$value = Mage::getModel( $data['model'] )
|
141 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
142 |
}
|
143 |
$layout = Mage::getSingleton( 'core/layout' );
|
144 |
Mage::getSingleton( 'core/design_package' )
|
@@ -156,6 +164,7 @@ class Nexcessnet_Turpentine_EsiController extends Mage_Core_Controller_Front_Act
|
|
156 |
$esiData->getNameInLayout() ) ) );
|
157 |
if( $blockNode instanceof Varien_Simplexml_Element ) {
|
158 |
$nodesToGenerate = Mage::helper( 'turpentine/data' )
|
|
|
159 |
->getChildBlockNames( $blockNode );
|
160 |
Mage::getModel( 'turpentine/shim_mage_core_layout' )
|
161 |
->shim_generateFullBlock( $blockNode );
|
137 |
Mage::register( $key, $value, true );
|
138 |
}
|
139 |
foreach( $esiData->getComplexRegistry() as $key => $data ) {
|
140 |
+
$value = Mage::getModel( $data['model'] );
|
141 |
+
if( !is_object( $value ) ) {
|
142 |
+
Mage::helper( 'turpentine/debug' )->logWarn(
|
143 |
+
'Failed to register key/model: %s as %s(%s)',
|
144 |
+
$key, $data['model'], $data['id'] );
|
145 |
+
continue;
|
146 |
+
} else {
|
147 |
+
$value->load( $data['id'] );
|
148 |
+
Mage::register( $key, $value, true );
|
149 |
+
}
|
150 |
}
|
151 |
$layout = Mage::getSingleton( 'core/layout' );
|
152 |
Mage::getSingleton( 'core/design_package' )
|
164 |
$esiData->getNameInLayout() ) ) );
|
165 |
if( $blockNode instanceof Varien_Simplexml_Element ) {
|
166 |
$nodesToGenerate = Mage::helper( 'turpentine/data' )
|
167 |
+
->setLayout( $layout )
|
168 |
->getChildBlockNames( $blockNode );
|
169 |
Mage::getModel( 'turpentine/shim_mage_core_layout' )
|
170 |
->shim_generateFullBlock( $blockNode );
|
app/code/community/Nexcessnet/Turpentine/controllers/Varnish/ManagementController.php
CHANGED
@@ -213,8 +213,14 @@ class Nexcessnet_Turpentine_Varnish_ManagementController
|
|
213 |
|
214 |
switch( $type ) {
|
215 |
case 'default':
|
216 |
-
$cookieModel->set(
|
217 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
218 |
$adminSession->addSuccess( Mage::helper( 'turpentine/data' )
|
219 |
->__( 'The Varnish bypass cookie has been successfully added.' ) );
|
220 |
break;
|
213 |
|
214 |
switch( $type ) {
|
215 |
case 'default':
|
216 |
+
$cookieModel->set(
|
217 |
+
$cookieName,
|
218 |
+
Mage::helper( 'turpentine/varnish' )->getSecretHandshake(),
|
219 |
+
null, // period
|
220 |
+
null, // path
|
221 |
+
null, // domain
|
222 |
+
false, // secure
|
223 |
+
true ); // httponly
|
224 |
$adminSession->addSuccess( Mage::helper( 'turpentine/data' )
|
225 |
->__( 'The Varnish bypass cookie has been successfully added.' ) );
|
226 |
break;
|
app/code/community/Nexcessnet/Turpentine/etc/config.xml
CHANGED
@@ -20,7 +20,7 @@
|
|
20 |
<config>
|
21 |
<modules>
|
22 |
<Nexcessnet_Turpentine>
|
23 |
-
<version>0.5.
|
24 |
</Nexcessnet_Turpentine>
|
25 |
</modules>
|
26 |
<default>
|
20 |
<config>
|
21 |
<modules>
|
22 |
<Nexcessnet_Turpentine>
|
23 |
+
<version>0.5.5</version>
|
24 |
</Nexcessnet_Turpentine>
|
25 |
</modules>
|
26 |
<default>
|
app/code/community/Nexcessnet/Turpentine/misc/uuid.c
CHANGED
@@ -12,7 +12,8 @@ void generate_uuid(char* buf) {
|
|
12 |
long c = lrand48();
|
13 |
long d = lrand48();
|
14 |
pthread_mutex_unlock(&lrand_mutex);
|
15 |
-
|
|
|
16 |
a,
|
17 |
b & 0xffff,
|
18 |
(b & ((long)0x0fff0000) >> 16) | 0x4000,
|
12 |
long c = lrand48();
|
13 |
long d = lrand48();
|
14 |
pthread_mutex_unlock(&lrand_mutex);
|
15 |
+
// SID must match this regex for Kount compat /^\w{1,32}$/
|
16 |
+
sprintf(buf, "frontend=%08lx%04lx%04lx%04lx%04lx%08lx",
|
17 |
a,
|
18 |
b & 0xffff,
|
19 |
(b & ((long)0x0fff0000) >> 16) | 0x4000,
|
app/code/community/Nexcessnet/Turpentine/misc/version-2.vcl
CHANGED
@@ -41,19 +41,6 @@ C{
|
|
41 |
{{debug_acl}}
|
42 |
|
43 |
## Custom Subroutines
|
44 |
-
sub remove_cache_headers {
|
45 |
-
# remove cache headers so we can set our own
|
46 |
-
remove beresp.http.Cache-Control;
|
47 |
-
remove beresp.http.Expires;
|
48 |
-
remove beresp.http.Pragma;
|
49 |
-
remove beresp.http.Cache;
|
50 |
-
remove beresp.http.Age;
|
51 |
-
}
|
52 |
-
|
53 |
-
sub remove_double_slashes {
|
54 |
-
# remove double slashes from the URL, for higher cache hit rate
|
55 |
-
set req.url = regsub(req.url, "(.*)//+(.*)", "\1/\2");
|
56 |
-
}
|
57 |
|
58 |
sub generate_session {
|
59 |
# generate a UUID and add `frontend=$UUID` to the Cookie header, or use SID
|
@@ -127,7 +114,8 @@ sub vcl_recv {
|
|
127 |
return (pipe);
|
128 |
}
|
129 |
|
130 |
-
|
|
|
131 |
|
132 |
{{normalize_encoding}}
|
133 |
{{normalize_user_agent}}
|
@@ -289,7 +277,11 @@ sub vcl_fetch {
|
|
289 |
remove beresp.http.Set-Cookie;
|
290 |
}
|
291 |
# we'll set our own cache headers if we need them
|
292 |
-
|
|
|
|
|
|
|
|
|
293 |
|
294 |
if (beresp.http.X-Turpentine-Esi == "1") {
|
295 |
esi;
|
@@ -351,6 +343,9 @@ sub vcl_deliver {
|
|
351 |
set resp.http.Set-Cookie = resp.http.Set-Cookie "; HttpOnly";
|
352 |
remove resp.http.X-Varnish-Cookie-Expires;
|
353 |
}
|
|
|
|
|
|
|
354 |
set resp.http.X-Opt-Debug-Headers = "{{debug_headers}}";
|
355 |
if (resp.http.X-Opt-Debug-Headers == "true" || client.ip ~ debug_acl ) {
|
356 |
# debugging is on, give some extra info
|
41 |
{{debug_acl}}
|
42 |
|
43 |
## Custom Subroutines
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
|
45 |
sub generate_session {
|
46 |
# generate a UUID and add `frontend=$UUID` to the Cookie header, or use SID
|
114 |
return (pipe);
|
115 |
}
|
116 |
|
117 |
+
# remove double slashes from the URL, for higher cache hit rate
|
118 |
+
set req.url = regsuball(req.url, "(.*)//+(.*)", "\1/\2");
|
119 |
|
120 |
{{normalize_encoding}}
|
121 |
{{normalize_user_agent}}
|
277 |
remove beresp.http.Set-Cookie;
|
278 |
}
|
279 |
# we'll set our own cache headers if we need them
|
280 |
+
remove beresp.http.Cache-Control;
|
281 |
+
remove beresp.http.Expires;
|
282 |
+
remove beresp.http.Pragma;
|
283 |
+
remove beresp.http.Cache;
|
284 |
+
remove beresp.http.Age;
|
285 |
|
286 |
if (beresp.http.X-Turpentine-Esi == "1") {
|
287 |
esi;
|
343 |
set resp.http.Set-Cookie = resp.http.Set-Cookie "; HttpOnly";
|
344 |
remove resp.http.X-Varnish-Cookie-Expires;
|
345 |
}
|
346 |
+
if (req.http.X-Varnish-Esi-Method == "ajax" && req.http.X-Varnish-Esi-Access == "private") {
|
347 |
+
set resp.http.Cache-Control = "no-cache";
|
348 |
+
}
|
349 |
set resp.http.X-Opt-Debug-Headers = "{{debug_headers}}";
|
350 |
if (resp.http.X-Opt-Debug-Headers == "true" || client.ip ~ debug_acl ) {
|
351 |
# debugging is on, give some extra info
|
app/code/community/Nexcessnet/Turpentine/misc/version-3.vcl
CHANGED
@@ -46,20 +46,6 @@ import std;
|
|
46 |
|
47 |
## Custom Subroutines
|
48 |
|
49 |
-
sub remove_cache_headers {
|
50 |
-
# remove cache headers so we can set our own
|
51 |
-
unset beresp.http.Cache-Control;
|
52 |
-
unset beresp.http.Expires;
|
53 |
-
unset beresp.http.Pragma;
|
54 |
-
unset beresp.http.Cache;
|
55 |
-
unset beresp.http.Age;
|
56 |
-
}
|
57 |
-
|
58 |
-
sub remove_double_slashes {
|
59 |
-
# remove double slashes from the URL, for higher cache hit rate
|
60 |
-
set req.url = regsub(req.url, "(.*)//+(.*)", "\1/\2");
|
61 |
-
}
|
62 |
-
|
63 |
sub generate_session {
|
64 |
# generate a UUID and add `frontend=$UUID` to the Cookie header, or use SID
|
65 |
# from SID URL param
|
@@ -129,7 +115,8 @@ sub vcl_recv {
|
|
129 |
return (pipe);
|
130 |
}
|
131 |
|
132 |
-
|
|
|
133 |
|
134 |
{{normalize_encoding}}
|
135 |
{{normalize_user_agent}}
|
@@ -290,7 +277,11 @@ sub vcl_fetch {
|
|
290 |
unset beresp.http.Set-Cookie;
|
291 |
}
|
292 |
# we'll set our own cache headers if we need them
|
293 |
-
|
|
|
|
|
|
|
|
|
294 |
|
295 |
if (beresp.http.X-Turpentine-Esi == "1") {
|
296 |
set beresp.do_esi = true;
|
@@ -351,6 +342,9 @@ sub vcl_deliver {
|
|
351 |
set resp.http.Set-Cookie = resp.http.Set-Cookie + "; httponly";
|
352 |
unset resp.http.X-Varnish-Cookie-Expires;
|
353 |
}
|
|
|
|
|
|
|
354 |
if ({{debug_headers}} || client.ip ~ debug_acl) {
|
355 |
# debugging is on, give some extra info
|
356 |
set resp.http.X-Varnish-Hits = obj.hits;
|
46 |
|
47 |
## Custom Subroutines
|
48 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
sub generate_session {
|
50 |
# generate a UUID and add `frontend=$UUID` to the Cookie header, or use SID
|
51 |
# from SID URL param
|
115 |
return (pipe);
|
116 |
}
|
117 |
|
118 |
+
# remove double slashes from the URL, for higher cache hit rate
|
119 |
+
set req.url = regsuball(req.url, "(.*)//+(.*)", "\1/\2");
|
120 |
|
121 |
{{normalize_encoding}}
|
122 |
{{normalize_user_agent}}
|
277 |
unset beresp.http.Set-Cookie;
|
278 |
}
|
279 |
# we'll set our own cache headers if we need them
|
280 |
+
unset beresp.http.Cache-Control;
|
281 |
+
unset beresp.http.Expires;
|
282 |
+
unset beresp.http.Pragma;
|
283 |
+
unset beresp.http.Cache;
|
284 |
+
unset beresp.http.Age;
|
285 |
|
286 |
if (beresp.http.X-Turpentine-Esi == "1") {
|
287 |
set beresp.do_esi = true;
|
342 |
set resp.http.Set-Cookie = resp.http.Set-Cookie + "; httponly";
|
343 |
unset resp.http.X-Varnish-Cookie-Expires;
|
344 |
}
|
345 |
+
if (req.http.X-Varnish-Esi-Method == "ajax" && req.http.X-Varnish-Esi-Access == "private") {
|
346 |
+
set resp.http.Cache-Control = "no-cache";
|
347 |
+
}
|
348 |
if ({{debug_headers}} || client.ip ~ debug_acl) {
|
349 |
# debugging is on, give some extra info
|
350 |
set resp.http.X-Varnish-Hits = obj.hits;
|
app/design/adminhtml/default/default/template/turpentine/varnish_management.phtml
CHANGED
@@ -78,39 +78,37 @@
|
|
78 |
->__('Download the generated VCL file.')?>
|
79 |
</td>
|
80 |
</tr>
|
81 |
-
|
82 |
-
|
83 |
<td class="scope-label">
|
84 |
<button
|
85 |
-
onclick="setLocation('<?php echo $this->getSwitchNavigationUrl( '
|
86 |
type="button"
|
87 |
-
class="scalable
|
88 |
<span><?php echo Mage::helper( 'turpentine/data' )
|
89 |
-
->__('
|
90 |
</button>
|
91 |
</td>
|
92 |
<td class="scope-label">
|
93 |
<?php echo Mage::helper( 'turpentine/data' )
|
94 |
-
->__('
|
95 |
</td>
|
96 |
-
|
97 |
-
<?php else: ?>
|
98 |
-
<tr>
|
99 |
<td class="scope-label">
|
100 |
<button
|
101 |
-
onclick="setLocation('<?php echo $this->getSwitchNavigationUrl( '
|
102 |
type="button"
|
103 |
-
class="scalable
|
104 |
<span><?php echo Mage::helper( 'turpentine/data' )
|
105 |
-
->__('
|
106 |
</button>
|
107 |
</td>
|
108 |
<td class="scope-label">
|
109 |
<?php echo Mage::helper( 'turpentine/data' )
|
110 |
-
->__('
|
111 |
</td>
|
112 |
-
|
113 |
-
|
114 |
</table>
|
115 |
<?php echo $this->getChildHtml(); ?>
|
116 |
|
78 |
->__('Download the generated VCL file.')?>
|
79 |
</td>
|
80 |
</tr>
|
81 |
+
<tr>
|
82 |
+
<?php if( Mage::helper( 'turpentine/varnish' )->isBypassEnabled() ): ?>
|
83 |
<td class="scope-label">
|
84 |
<button
|
85 |
+
onclick="setLocation('<?php echo $this->getSwitchNavigationUrl( 'varnish' ); ?>')"
|
86 |
type="button"
|
87 |
+
class="scalable back">
|
88 |
<span><?php echo Mage::helper( 'turpentine/data' )
|
89 |
+
->__('Deactivate Varnish Bypass') ?></span>
|
90 |
</button>
|
91 |
</td>
|
92 |
<td class="scope-label">
|
93 |
<?php echo Mage::helper( 'turpentine/data' )
|
94 |
+
->__('Remove the bypass cookie and use again Varnish.')?>
|
95 |
</td>
|
96 |
+
<?php else: ?>
|
|
|
|
|
97 |
<td class="scope-label">
|
98 |
<button
|
99 |
+
onclick="setLocation('<?php echo $this->getSwitchNavigationUrl( 'default' ); ?>')"
|
100 |
type="button"
|
101 |
+
class="scalable delete">
|
102 |
<span><?php echo Mage::helper( 'turpentine/data' )
|
103 |
+
->__('Activate Varnish Bypass') ?></span>
|
104 |
</button>
|
105 |
</td>
|
106 |
<td class="scope-label">
|
107 |
<?php echo Mage::helper( 'turpentine/data' )
|
108 |
+
->__('Create a cookie to bypass Varnish only for your session.')?>
|
109 |
</td>
|
110 |
+
<?php endif; ?>
|
111 |
+
</tr>
|
112 |
</table>
|
113 |
<?php echo $this->getChildHtml(); ?>
|
114 |
|
app/design/frontend/base/default/template/turpentine/ajax.phtml
CHANGED
@@ -36,31 +36,46 @@ if( $debugEnabled ) {
|
|
36 |
* @link http://prototypejs.org/doc/latest/ajax/Ajax/Request/index.html
|
37 |
* @link http://prototypejs.org/doc/latest/dom/Element/replace/index.html
|
38 |
* @link http://madrobby.github.com/scriptaculous/effect-appear/
|
|
|
|
|
|
|
39 |
*/
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
"
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
)
|
55 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
</div>
|
57 |
-
|
58 |
-
$blockTag,
|
59 |
-
$blockTag,
|
60 |
-
$this->getEsiUrl(),
|
61 |
-
( $debugEnabled ? 'onComplete' : 'onSuccess' ),
|
62 |
-
$blockTag
|
63 |
-
);
|
64 |
if( $debugEnabled ) {
|
65 |
echo sprintf( '<!-- AJAX END [%s] -->', $this->getNameInLayout() ) . PHP_EOL;
|
66 |
}
|
36 |
* @link http://prototypejs.org/doc/latest/ajax/Ajax/Request/index.html
|
37 |
* @link http://prototypejs.org/doc/latest/dom/Element/replace/index.html
|
38 |
* @link http://madrobby.github.com/scriptaculous/effect-appear/
|
39 |
+
*
|
40 |
+
* @link http://api.jquery.com/jQuery.ajax/
|
41 |
+
* @link http://api.jquery.com/fadeIn/
|
42 |
*/
|
43 |
+
$_prototypeFunction = $debugEnabled ? 'onComplete' : 'onSuccess';
|
44 |
+
$_jQueryFunction = $debugEnabled ? 'always' : 'done';
|
45 |
+
echo <<<HTML
|
46 |
+
<div id="$blockTag" style="display: none">
|
47 |
+
<script type="text/javascript">
|
48 |
+
(function() {
|
49 |
+
var blockTag = {$this->helper('core')->jsonEncode($blockTag)}, esiUrl = {$this->helper('core')->jsonEncode($this->getEsiUrl())};
|
50 |
+
if (typeof Ajax === 'object' && typeof Ajax.Updater === 'function') {
|
51 |
+
new Ajax.Updater(
|
52 |
+
blockTag,
|
53 |
+
esiUrl,
|
54 |
+
{
|
55 |
+
method: "get",
|
56 |
+
evalScripts: true,
|
57 |
+
{$_prototypeFunction}: function() {
|
58 |
+
$(blockTag).appear({
|
59 |
+
duration: 0.3
|
60 |
+
});
|
61 |
+
}
|
62 |
+
}
|
63 |
+
);
|
64 |
+
} else if (typeof jQuery === 'function') {
|
65 |
+
jQuery.ajax(
|
66 |
+
{
|
67 |
+
url: esiUrl,
|
68 |
+
type: "get",
|
69 |
+
dataType: "html"
|
70 |
+
}
|
71 |
+
).{$_jQueryFunction}(function() {
|
72 |
+
$(blockTag).fadeIn(300);
|
73 |
+
});
|
74 |
+
}
|
75 |
+
})();
|
76 |
+
</script>
|
77 |
</div>
|
78 |
+
HTML;
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
if( $debugEnabled ) {
|
80 |
echo sprintf( '<!-- AJAX END [%s] -->', $this->getNameInLayout() ) . PHP_EOL;
|
81 |
}
|
package.xml
CHANGED
@@ -1 +1,2 @@
|
|
1 |
-
|
|
1 |
+
<?xml version='1.0' encoding='utf-8'?>
|
2 |
+
<package><name>Nexcessnet_Turpentine</name><license uri="http://opensource.org/licenses/GPL-2.0">GPLv2</license><notes>Supports Magento v1.6 and later</notes><time>13:53:44</time><__packager>build_package.py v0.0.3</__packager><summary>Improves Magento support for Varnish caching and generates 2.1 and 3.0 compatible VCLs.</summary><stability>stable</stability><__commit_hash>95bf21d410e48b9315afff44449c6475f94d64bc</__commit_hash><version>0.5.5</version><extends /><contents><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file hash="a0bd4a5632b369b058c0ec5262e0cc49" name="turpentine.xml" /></dir><dir name="template"><dir name="turpentine"><file hash="8bd4e7e4540ed816721907cb0ac03a02" name="varnish_management.phtml" /></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file hash="abe5ef296ef7c06a672847c50b572473" name="turpentine_esi.xml" /></dir><dir name="template"><dir name="turpentine"><file hash="b268c48251ccfccf5c775d3e85513584" name="esi.phtml" /><file hash="50798888953fd1550e4347c39e395d0a" name="notices.phtml" /><file hash="252356c9ea115fca63e52d54f67d755f" name="ajax.phtml" /></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file hash="58848d4d90973bfd63b466ea181352a5" name="Nexcessnet_Turpentine.xml" /></dir></target><target name="magecommunity"><dir name="Nexcessnet"><dir name="Turpentine"><dir name="controllers"><file hash="30386eecb1914f4acfebbbeb1d961dbf" name="EsiController.php" /><dir name="Varnish"><file hash="f5e29a50bef74178fe041024fb4e43a9" name="ManagementController.php" /></dir></dir><dir name="Helper"><file hash="2d7286c589b7a3e2f8fe873bd12afe3c" name="Debug.php" /><file hash="164856b06e87dff0694cde08da4bb4a6" name="Varnish.php" /><file hash="6c70ee047ffb07d99a48fb2ebdc1723d" name="Esi.php" /><file hash="9aaf4cb5cf56bebda267fb8514547dec" name="Data.php" /><file hash="9af5e8d9caa1d1b2182e105786ecce65" name="Cron.php" /><file hash="6b637be4eac4c924fc1f02b2d49699c3" name="Ban.php" /></dir><dir name="Model"><file hash="c2cb79001524617febbfddf099d09f37" name="Session.php" /><dir name="Observer"><file hash="9d57fad69ff42b71c66ca26bc3372317" name="Debug.php" /><file hash="7244a8ce600e980d612409595b9b6b9b" name="Varnish.php" /><file hash="fab188479779fa36715de8219d200da0" name="Esi.php" /><file hash="a34e79218e8ca1fefad303b9399bda9d" name="Cron.php" /><file hash="704cf901bd456b51c263becd0f260d64" name="Ban.php" /></dir><dir name="Dummy"><file hash="2fc1189ace2d0e7383041d16a31df16b" name="Request.php" /></dir><dir name="Config"><dir name="Select"><file hash="9348c5e58037fd97d89b84ccab4ef2d0" name="Toggle.php" /><file hash="dc472f34c25b1688cfa9fa206958c536" name="Version.php" /></dir></dir><dir name="PageCache"><dir name="Container"><file hash="139e8a9bfa209316036e798fff654a8a" name="Notices.php" /></dir></dir><dir name="Varnish"><file hash="fcb8a5582c6f920e910b417c671df6d2" name="Admin.php" /><dir name="Configurator"><file hash="970a058bf2a73a5774b004390fcfaa07" name="Version3.php" /><file hash="4fba0ac0b4837cabec5bbee428d229df" name="Version2.php" /><file hash="ac5bbfdb2bdb563f1cf79efebb16705e" name="Abstract.php" /></dir><dir name="Admin"><file hash="f3d6924ebb2d87ae1feb9717e3aee27e" name="Socket.php" /></dir></dir><dir name="Shim"><dir name="Mage"><dir name="Core"><file hash="821bff6c2fb372e3ffb39abf6453b3f8" name="Layout.php" /><file hash="94d91f8ff1005ce3bf14c4935945563c" name="App.php" /><file hash="43754654bc3bbd046154573efd735dfa" name="Config.php" /></dir></dir></dir></dir><dir name="etc"><file hash="e544276572efd1f7e9c76c79b5b2a304" name="config.xml" /><file hash="e9d86f2aa678c844107ca209d012d7fb" name="system.xml" /><file hash="3b608fbcca3d307833d10604dff23966" name="cache.xml" /></dir><dir name="misc"><file hash="ba5d5c7263cd90eea3785953e3549041" name="uuid.c" /><file hash="b25a97a8b6d06e2a467bb3939bb66215" name="version-2.vcl" /><file hash="3663d91aa451b42fd3c91bcd6fefe8b5" name="version-3.vcl" /></dir><dir name="Block"><file hash="e9b03d651a8da9b1d32c4fd2f4781792" name="Management.php" /><file hash="390cf75d04b1b098cad562229b649c2d" name="Notices.php" /><dir name="Core"><file hash="44a880185b08b2d6d74ca94591c9ddca" name="Messages.php" /></dir><dir name="Catalog"><dir name="Product"><dir name="List"><file hash="a3cc4b92cb6a4956e28da798eb9e17df" name="Toolbar.php" /></dir></dir></dir></dir><dir name="sql" /></dir></dir></target></contents><dependencies><required><php><min>5.2.13</min><max>6.0.0</max></php></required></dependencies><authors><author><name>Chris Wells</name><user>nexcess_net</user><email>clwells@nexcess.net</email></author><author><name>Alex Headley</name><user>aheadley_nex</user><email>aheadley@nexcess.net</email></author></authors><date>2013-11-20</date><compatibile /><channel>community</channel><description>Turpentine is a Magento extension to improve Magento's compatibility with Varnish, a very-fast caching reverse-proxy. By default, Varnish doesn't cache requests with cookies and Magento sends the frontend cookie with every request causing a (near) zero hit-rate for Varnish's cache. Turpentine provides Varnish configuration files (VCLs) to work with Magento and modifies Magento's behaviour to significantly improve the cache hit rate.</description></package>
|