parent
e66dda83df
commit
70acd58336
@ -0,0 +1,46 @@ |
||||
<?php |
||||
|
||||
/** |
||||
* ownCloud |
||||
* |
||||
* @author Vincent Petry |
||||
* @copyright 2015 Vincent Petry <pvince81@owncloud.com> |
||||
* |
||||
* @license AGPL3 |
||||
*/ |
||||
|
||||
namespace OC\Connector\Sabre; |
||||
|
||||
use \Sabre\HTTP\RequestInterface; |
||||
use \Sabre\HTTP\ResponseInterface; |
||||
|
||||
/** |
||||
* Copies the "Etag" header to "OC-Etag" after any request. |
||||
* This is a workaround for setups that automatically strip |
||||
* or mangle Etag headers. |
||||
*/ |
||||
class CopyEtagHeaderPlugin extends \Sabre\DAV\ServerPlugin { |
||||
/** |
||||
* This initializes the plugin. |
||||
* |
||||
* @param \Sabre\DAV\Server $server Sabre server |
||||
* |
||||
* @return void |
||||
*/ |
||||
public function initialize(\Sabre\DAV\Server $server) { |
||||
$server->on('afterMethod', array($this, 'afterMethod')); |
||||
} |
||||
|
||||
/** |
||||
* After method, copy the "Etag" header to "OC-Etag" header. |
||||
* |
||||
* @param RequestInterface $request request |
||||
* @param ResponseInterface $response response |
||||
*/ |
||||
public function afterMethod(RequestInterface $request, ResponseInterface $response) { |
||||
$eTag = $response->getHeader('Etag'); |
||||
if (!empty($eTag)) { |
||||
$response->setHeader('OC-ETag', $eTag); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,43 @@ |
||||
<?php |
||||
|
||||
namespace Tests\Connector\Sabre; |
||||
|
||||
/** |
||||
* Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com> |
||||
* This file is licensed under the Affero General Public License version 3 or |
||||
* later. |
||||
* See the COPYING-README file. |
||||
*/ |
||||
class CopyEtagPluginTest extends \Test\TestCase { |
||||
|
||||
/** |
||||
* @var \OC\Connector\Sabre\CopyEtagHeaderPlugin |
||||
*/ |
||||
private $plugin; |
||||
|
||||
public function setUp() { |
||||
parent::setUp(); |
||||
$this->server = new \Sabre\DAV\Server(); |
||||
$this->plugin = new \OC\Connector\Sabre\CopyEtagHeaderPlugin($this->tree); |
||||
$this->plugin->initialize($this->server); |
||||
} |
||||
|
||||
public function testCopyEtag() { |
||||
$request = new \Sabre\Http\Request(); |
||||
$response = new \Sabre\Http\Response(); |
||||
$response->setHeader('Etag', 'abcd'); |
||||
|
||||
$this->plugin->afterMethod($request, $response); |
||||
|
||||
$this->assertEquals('abcd', $response->getHeader('OC-Etag')); |
||||
} |
||||
|
||||
public function testNoopWhenEmpty() { |
||||
$request = new \Sabre\Http\Request(); |
||||
$response = new \Sabre\Http\Response(); |
||||
|
||||
$this->plugin->afterMethod($request, $response); |
||||
|
||||
$this->assertNull($response->getHeader('OC-Etag')); |
||||
} |
||||
} |
Loading…
Reference in new issue