mirror of
https://github.com/nextcloud/server.git
synced 2026-02-20 00:12:30 -05:00
fix: OCP\Files\Node\Folder::search was not setting the owner
The owner was not set on the file info causing e.g. webdav searches to never return the known owner. Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
This commit is contained in:
parent
ead87dfa01
commit
cf935e33ae
2 changed files with 35 additions and 4 deletions
|
|
@ -12,6 +12,7 @@ use OC\Files\Search\SearchComparison;
|
|||
use OC\Files\Search\SearchOrder;
|
||||
use OC\Files\Search\SearchQuery;
|
||||
use OC\Files\Utils\PathHelper;
|
||||
use OC\User\LazyUser;
|
||||
use OCP\Files\Cache\ICacheEntry;
|
||||
use OCP\Files\FileInfo;
|
||||
use OCP\Files\Mount\IMountPoint;
|
||||
|
|
@ -26,6 +27,9 @@ use OCP\Files\Search\ISearchQuery;
|
|||
use OCP\IUserManager;
|
||||
|
||||
class Folder extends Node implements \OCP\Files\Folder {
|
||||
|
||||
private ?IUserManager $userManager = null;
|
||||
|
||||
/**
|
||||
* Creates a Folder that represents a non-existing path
|
||||
*
|
||||
|
|
@ -245,7 +249,26 @@ class Folder extends Node implements \OCP\Files\Folder {
|
|||
$cacheEntry['internalPath'] = $cacheEntry['path'];
|
||||
$cacheEntry['path'] = rtrim($appendRoot . $cacheEntry->getPath(), '/');
|
||||
$subPath = $cacheEntry['path'] !== '' ? '/' . $cacheEntry['path'] : '';
|
||||
return new \OC\Files\FileInfo($this->path . $subPath, $mount->getStorage(), $cacheEntry['internalPath'], $cacheEntry, $mount);
|
||||
$storage = $mount->getStorage();
|
||||
|
||||
$owner = null;
|
||||
$ownerId = $storage->getOwner($cacheEntry['internalPath']);
|
||||
if (!empty($ownerId)) {
|
||||
// Cache the user manager (for performance)
|
||||
if ($this->userManager === null) {
|
||||
$this->userManager = \OCP\Server::get(IUserManager::class);
|
||||
}
|
||||
$owner = new LazyUser($ownerId, $this->userManager);
|
||||
}
|
||||
|
||||
return new \OC\Files\FileInfo(
|
||||
$this->path . $subPath,
|
||||
$storage,
|
||||
$cacheEntry['internalPath'],
|
||||
$cacheEntry,
|
||||
$mount,
|
||||
$owner,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ use OCP\Files\NotFoundException;
|
|||
use OCP\Files\Search\ISearchComparison;
|
||||
use OCP\Files\Search\ISearchOrder;
|
||||
use OCP\Files\Storage;
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
|
||||
/**
|
||||
* Class FolderTest
|
||||
|
|
@ -290,7 +291,7 @@ class FolderTest extends NodeTest {
|
|||
->getMock();
|
||||
$root->method('getUser')
|
||||
->willReturn($this->user);
|
||||
/** @var Storage\IStorage $storage */
|
||||
/** @var Storage\IStorage&MockObject $storage */
|
||||
$storage = $this->createMock(Storage\IStorage::class);
|
||||
$storage->method('getId')->willReturn('test::1');
|
||||
$cache = new Cache($storage);
|
||||
|
|
@ -298,10 +299,17 @@ class FolderTest extends NodeTest {
|
|||
$storage->method('getCache')
|
||||
->willReturn($cache);
|
||||
|
||||
$storage->expects($this->atLeastOnce())
|
||||
->method('getOwner')
|
||||
->with('qwerty')
|
||||
->willReturn(false);
|
||||
|
||||
$mount = $this->createMock(IMountPoint::class);
|
||||
$mount->method('getStorage')
|
||||
$mount->expects($this->atLeastOnce())
|
||||
->method('getStorage')
|
||||
->willReturn($storage);
|
||||
$mount->method('getInternalPath')
|
||||
$mount->expects($this->atLeastOnce())
|
||||
->method('getInternalPath')
|
||||
->willReturn('foo');
|
||||
|
||||
$cache->insert('foo', ['size' => 200, 'mtime' => 55, 'mimetype' => ICacheEntry::DIRECTORY_MIMETYPE]);
|
||||
|
|
|
|||
Loading…
Reference in a new issue