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:
commit
1a1ea4e3ea
|
@ -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) {
|
||||
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);
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue