diff options
author | Roeland Jago Douma <roeland@famdouma.nl> | 2016-10-19 21:27:34 +0200 |
---|---|---|
committer | Roeland Jago Douma <roeland@famdouma.nl> | 2017-04-13 12:58:49 +0200 |
commit | a1edcc8ecf7b81e19c772fbe8586acc38e1eadad (patch) | |
tree | fde01dfd32d1d1787f6d38a2ba963d6cb2c0ee1d /lib/private/Encryption | |
parent | 88299ec27c209a432f925f19970e581f46fc54cd (diff) | |
download | nextcloud-server-a1edcc8ecf7b81e19c772fbe8586acc38e1eadad.tar.gz nextcloud-server-a1edcc8ecf7b81e19c772fbe8586acc38e1eadad.zip |
Port Encryption/file to new getAccessList
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
Diffstat (limited to 'lib/private/Encryption')
-rw-r--r-- | lib/private/Encryption/File.php | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/lib/private/Encryption/File.php b/lib/private/Encryption/File.php index 240a8f1ccab..329fb12b839 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")) { |