From a1edcc8ecf7b81e19c772fbe8586acc38e1eadad Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Wed, 19 Oct 2016 21:27:34 +0200 Subject: [PATCH] Port Encryption/file to new getAccessList Signed-off-by: Roeland Jago Douma --- lib/private/Encryption/File.php | 33 +++++++++++++++++++++++++++------ lib/private/Server.php | 6 +++++- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/lib/private/Encryption/File.php b/lib/private/Encryption/File.php index 240a8f1cca..329fb12b83 100644 --- a/lib/private/Encryption/File.php +++ b/lib/private/Encryption/File.php @@ -25,12 +25,21 @@ namespace OC\Encryption; use OC\Cache\CappedMemoryCache; +use OCP\Files\IRootFolder; +use OCP\Files\NotFoundException; +use OCP\Share\IManager; class File implements \OCP\Encryption\IFile { /** @var Util */ protected $util; + /** @var IRootFolder */ + private $rootFolder; + + /** @var IManager */ + private $shareManager; + /** * cache results of already checked folders * @@ -38,9 +47,13 @@ class File implements \OCP\Encryption\IFile { */ protected $cache; - public function __construct(Util $util) { + public function __construct(Util $util, + IRootFolder $rootFolder, + IManager $shareManager) { $this->util = $util; $this->cache = new CappedMemoryCache(); + $this->rootFolder = $rootFolder; + $this->shareManager = $shareManager; } @@ -63,16 +76,22 @@ class File implements \OCP\Encryption\IFile { } $ownerPath = substr($ownerPath, strlen('/files')); + $userFolder = $this->rootFolder->getUserFolder($owner); + try { + $file = $userFolder->get($ownerPath); + } catch (NotFoundException $e) { + $file = null; + } $ownerPath = $this->util->stripPartialFileExtension($ownerPath); - // first get the shares for the parent and cache the result so that we don't // need to check all parents for every file $parent = dirname($ownerPath); + $parentNode = $userFolder->get($parent); if (isset($this->cache[$parent])) { $resultForParents = $this->cache[$parent]; } else { - $resultForParents = \OCP\Share::getUsersSharingFile($parent, $owner); + $resultForParents = $this->shareManager->getAccessList($parentNode); $this->cache[$parent] = $resultForParents; } $userIds = \array_merge($userIds, $resultForParents['users']); @@ -80,9 +99,11 @@ class File implements \OCP\Encryption\IFile { // Find out who, if anyone, is sharing the file - $resultForFile = \OCP\Share::getUsersSharingFile($ownerPath, $owner, false, false, false); - $userIds = \array_merge($userIds, $resultForFile['users']); - $public = $resultForFile['public'] || $resultForFile['remote'] || $public; + if ($file !== null) { + $resultForFile = $this->shareManager->getAccessList($file, false); + $userIds = \array_merge($userIds, $resultForFile['users']); + $public = $resultForFile['public'] || $resultForFile['remote'] || $public; + } // check if it is a group mount if (\OCP\App::isEnabled("files_external")) { diff --git a/lib/private/Server.php b/lib/private/Server.php index 00698a04f8..c38675934c 100644 --- a/lib/private/Server.php +++ b/lib/private/Server.php @@ -173,7 +173,11 @@ class Server extends ServerContainer implements IServerContainer { $c->getGroupManager(), $c->getConfig() ); - return new Encryption\File($util); + return new Encryption\File( + $util, + $c->getRootFolder(), + $c->getShareManager() + ); }); $this->registerService('EncryptionKeyStorage', function (Server $c) {