diff options
author | Vincent Petry <pvince81@owncloud.com> | 2015-03-26 13:52:43 +0100 |
---|---|---|
committer | Vincent Petry <pvince81@owncloud.com> | 2015-03-26 13:52:43 +0100 |
commit | cda7f7fd6190d15a81897c4557005a6c661b8f2c (patch) | |
tree | 564d94a86b6a940ab2209ec145636ebeaaf4d203 | |
parent | 468456e1688dda50c046d42fcdf3c570c6e4e50d (diff) | |
parent | 8d327c94a844804d0e7af057866e552bd5aafd17 (diff) | |
download | nextcloud-server-cda7f7fd6190d15a81897c4557005a6c661b8f2c.tar.gz nextcloud-server-cda7f7fd6190d15a81897c4557005a6c661b8f2c.zip |
Merge pull request #15168 from owncloud/oc-etag-master
adding OC-ETag header
-rw-r--r-- | lib/private/connector/sabre/file.php | 5 | ||||
-rw-r--r-- | lib/private/connector/sabre/filesplugin.php | 14 | ||||
-rw-r--r-- | tests/lib/connector/sabre/filesplugin.php | 31 |
3 files changed, 48 insertions, 2 deletions
diff --git a/lib/private/connector/sabre/file.php b/lib/private/connector/sabre/file.php index 8f0642d794a..bb68f446725 100644 --- a/lib/private/connector/sabre/file.php +++ b/lib/private/connector/sabre/file.php @@ -247,8 +247,7 @@ class File extends \OC\Connector\Sabre\Node implements \Sabre\DAV\IFile { * @throws \Sabre\DAV\Exception\NotImplemented * @throws \Sabre\DAV\Exception\ServiceUnavailable */ - private function createFileChunked($data) - { + private function createFileChunked($data) { list($path, $name) = \Sabre\HTTP\URLUtil::splitPath($this->path); $info = \OC_FileChunking::decodeName($name); @@ -305,6 +304,8 @@ class File extends \OC\Connector\Sabre\Node implements \Sabre\DAV\IFile { } } + // mark chunking complete + $_SERVER['X-CHUNKING_COMPLETE'] = true; $info = $this->fileView->getFileInfo($targetPath); return $info->getEtag(); } catch (\OCP\Files\StorageNotAvailableException $e) { diff --git a/lib/private/connector/sabre/filesplugin.php b/lib/private/connector/sabre/filesplugin.php index 9720519f4c7..1b4b0674a57 100644 --- a/lib/private/connector/sabre/filesplugin.php +++ b/lib/private/connector/sabre/filesplugin.php @@ -174,7 +174,21 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin { if (!is_null($fileId)) { $this->server->httpResponse->setHeader('OC-FileId', $fileId); } + $eTag = $this->getETag($node); + if (!is_null($eTag)) { + $this->server->httpResponse->setHeader('OC-ETag', $eTag); + } + } + } + + /** + * @param \OC\Connector\Sabre\Node $node + */ + public function getETag($node) { + if (isset($_SERVER['HTTP_OC_CHUNKED']) && !isset($_SERVER['X-CHUNKING_COMPLETE'])) { + return null; } + return $node->getETag(); } } diff --git a/tests/lib/connector/sabre/filesplugin.php b/tests/lib/connector/sabre/filesplugin.php index 54d43d66dda..e10d67a3255 100644 --- a/tests/lib/connector/sabre/filesplugin.php +++ b/tests/lib/connector/sabre/filesplugin.php @@ -171,4 +171,35 @@ class FilesPlugin extends \Test\TestCase { $this->assertEquals(200, $result[self::GETETAG_PROPERTYNAME]); } + /** + * @dataProvider providesETagTestData + * @param $expectedETag + * @param $isChunked + * @param $isChunkComplete + */ + public function testETag($expectedETag, $isChunked, $isChunkComplete) { + if (!is_null($isChunked)) { + $_SERVER['HTTP_OC_CHUNKED'] = $isChunked; + } + if (!is_null($isChunkComplete)) { + $_SERVER['X-CHUNKING_COMPLETE'] = $isChunkComplete; + } + $node = $this->createTestNode('\OC\Connector\Sabre\File'); + + $etag = $this->plugin->getETag($node); + + $this->assertEquals($expectedETag, $etag); + } + + public function providesETagTestData() { + return [ + // non-chunked tests + ['"abc"', null, null], + ['"abc"', null, false], + + // chunked tests + [null, true, null], + ['"abc"', true, true], + ]; + } } |