Merge pull request #26717 from nextcloud/fix/copy-etag-node-not-found

Only set copy etag if the destination source can be found
This commit is contained in:
Christoph Wurst 2021-04-23 13:20:08 +02:00 committed by GitHub
commit 1a1ea4e3ea
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 1 deletions

View File

@ -25,6 +25,7 @@
namespace OCA\DAV\Connector\Sabre;
use Sabre\DAV\Exception\NotFound;
use Sabre\HTTP\RequestInterface;
use Sabre\HTTP\ResponseInterface;
@ -74,7 +75,13 @@ class CopyEtagHeaderPlugin extends \Sabre\DAV\ServerPlugin {
* @return void
*/
public function afterMove($source, $destination) {
$node = $this->server->tree->getNodeForPath($destination);
try {
$node = $this->server->tree->getNodeForPath($destination);
} catch (NotFound $e) {
// Don't care
return;
}
if ($node instanceof File) {
$eTag = $node->getETag();
$this->server->httpResponse->setHeader('OC-ETag', $eTag);

View File

@ -29,6 +29,7 @@ namespace OCA\DAV\Tests\unit\Connector\Sabre;
use OCA\DAV\Connector\Sabre\CopyEtagHeaderPlugin;
use OCA\DAV\Connector\Sabre\File;
use Sabre\DAV\Exception\NotFound;
use Sabre\DAV\Server;
use Sabre\DAV\Tree;
use Test\TestCase;
@ -73,6 +74,19 @@ class CopyEtagHeaderPluginTest extends TestCase {
$this->assertNull($response->getHeader('OC-Etag'));
}
public function testAfterMoveNodeNotFound(): void {
$tree = $this->createMock(Tree::class);
$tree->expects(self::once())
->method('getNodeForPath')
->with('test.txt')
->willThrowException(new NotFound());
$this->server->tree = $tree;
$this->plugin->afterMove('', 'test.txt');
// Nothing to assert, we are just testing if the exception is handled
}
public function testAfterMove() {
$node = $this->getMockBuilder(File::class)
->disableOriginalConstructor()