mirror of
https://github.com/nextcloud/server.git
synced 2026-03-17 08:06:09 -04:00
Copy Etag header to OC-Etag for sabre calls
This commit is contained in:
parent
e66dda83df
commit
70acd58336
3 changed files with 90 additions and 0 deletions
|
|
@ -65,6 +65,7 @@ $server->on('beforeMethod', function () use ($server, $objectTree) {
|
|||
)
|
||||
)
|
||||
);
|
||||
$server->addPlugin(new \OC\Connector\Sabre\CopyEtagHeaderPlugin());
|
||||
}, 30); // priority 30: after auth (10) and acl(20), before lock(50) and handling the request
|
||||
|
||||
// And off we go!
|
||||
|
|
|
|||
46
lib/private/connector/sabre/copyetagheaderplugin.php
Normal file
46
lib/private/connector/sabre/copyetagheaderplugin.php
Normal file
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
43
tests/lib/connector/sabre/copyetagheaderplugintest.php
Normal file
43
tests/lib/connector/sabre/copyetagheaderplugintest.php
Normal file
|
|
@ -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 a new issue