diff options
author | tobiasKaminsky <tobias@kaminsky.me> | 2019-07-22 14:47:17 +0200 |
---|---|---|
committer | tobiasKaminsky <tobias@kaminsky.me> | 2019-07-22 14:47:17 +0200 |
commit | b81fb182b3d793882a1942c852e8c3d2262b3de9 (patch) | |
tree | 7e2366d960ca95da0ada0218896d9e922d5f29e2 /apps | |
parent | e3991fbde0e97ad31af44c9f2506a8a1208d8f53 (diff) | |
download | nextcloud-server-b81fb182b3d793882a1942c852e8c3d2262b3de9.tar.gz nextcloud-server-b81fb182b3d793882a1942c852e8c3d2262b3de9.zip |
wip
Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>
Diffstat (limited to 'apps')
-rw-r--r-- | apps/dav/lib/Connector/Sabre/FilesPlugin.php | 6 | ||||
-rw-r--r-- | apps/dav/lib/Connector/Sabre/Node.php | 57 | ||||
-rw-r--r-- | apps/dav/lib/Connector/Sabre/SharesPlugin.php | 71 |
3 files changed, 72 insertions, 62 deletions
diff --git a/apps/dav/lib/Connector/Sabre/FilesPlugin.php b/apps/dav/lib/Connector/Sabre/FilesPlugin.php index 4a15edfdf46..99317f2bc1c 100644 --- a/apps/dav/lib/Connector/Sabre/FilesPlugin.php +++ b/apps/dav/lib/Connector/Sabre/FilesPlugin.php @@ -71,7 +71,6 @@ class FilesPlugin extends ServerPlugin { const MOUNT_TYPE_PROPERTYNAME = '{http://nextcloud.org/ns}mount-type'; const IS_ENCRYPTED_PROPERTYNAME = '{http://nextcloud.org/ns}is-encrypted'; const SHARE_NOTE = '{http://nextcloud.org/ns}note'; - const SHAREES_PROPERTYNAME = '{http://nextcloud.org/ns}sharees'; /** * Reference to main server object @@ -164,7 +163,6 @@ class FilesPlugin extends ServerPlugin { $server->protectedProperties[] = self::MOUNT_TYPE_PROPERTYNAME; $server->protectedProperties[] = self::IS_ENCRYPTED_PROPERTYNAME; $server->protectedProperties[] = self::SHARE_NOTE; - $server->protectedProperties[] = self::SHAREES_PROPERTYNAME; // normally these cannot be changed (RFC4918), but we want them modifiable through PROPPATCH $allowedProperties = ['{DAV:}getetag']; @@ -363,14 +361,12 @@ class FilesPlugin extends ServerPlugin { $propFind->handle(self::MOUNT_TYPE_PROPERTYNAME, function () use ($node) { return $node->getFileInfo()->getMountPoint()->getMountType(); }); + $propFind->handle(self::SHARE_NOTE, function() use ($node, $httpRequest) { return $node->getNoteFromShare( $httpRequest->getRawServerValue('PHP_AUTH_USER') ); }); - $propFind->handle(self::SHAREES_PROPERTYNAME, function() use ($node, $httpRequest) { - return $node->getShareeFromShare($httpRequest->getRawServerValue('PHP_AUTH_USER')); - }); } if ($node instanceof \OCA\DAV\Connector\Sabre\Node) { diff --git a/apps/dav/lib/Connector/Sabre/Node.php b/apps/dav/lib/Connector/Sabre/Node.php index 4cf6835b89d..f0917fe11b2 100644 --- a/apps/dav/lib/Connector/Sabre/Node.php +++ b/apps/dav/lib/Connector/Sabre/Node.php @@ -43,7 +43,6 @@ use OCP\Share\Exceptions\ShareNotFound; use OCP\Share\IManager; use OCP\Share; use OCP\Share\IShare; -use OCP\Lock\ILockingProvider; abstract class Node implements \Sabre\DAV\INode { @@ -325,62 +324,6 @@ abstract class Node implements \Sabre\DAV\INode { } /** - * @param string $user - * @return string - */ - public function getShareeFromShare($user) { - $sharees = []; - - if ($user == null) { - return $sharees; - } - $types = [ - Share::SHARE_TYPE_USER, - Share::SHARE_TYPE_REMOTE, - Share::SHARE_TYPE_GROUP, - ]; - - if ($this->getPath() === "/") { - return $sharees; - } - - $path = $this->getPath(); - - if ($path !== null) { - $userFolder = \OC::$server->getRootFolder()->getUserFolder($user); - try { - $path = $userFolder->get($path); - $this->lock($path); - } catch (\OCP\Files\NotFoundException $e) { - throw new OCSNotFoundException($this->l->t('Wrong path, file/folder doesn\'t exist')); - } catch (LockedException $e) { - throw new OCSNotFoundException($this->l->t('Could not lock path')); - } - } - - foreach ($types as $shareType) { - $shares = $this->shareManager->getSharesBy($user, $shareType, $path, false, -1, 0); - foreach ($shares as $share) { - if ($share->getSharedBy() === $user) { - $sharees[] = $share->getSharedWith(); - } - } - } - return implode(', ', $sharees); - } - - /** - * Lock a Node - * - * @param \OCP\Files\Node $node - * @throws LockedException - */ - private function lock(\OCP\Files\Node $node) { - $node->lock(ILockingProvider::LOCK_SHARED); - $this->lockedNode = $node; - } - - /** * @return string */ public function getDavPermissions() { diff --git a/apps/dav/lib/Connector/Sabre/SharesPlugin.php b/apps/dav/lib/Connector/Sabre/SharesPlugin.php index 46174c8118e..e395bb7313a 100644 --- a/apps/dav/lib/Connector/Sabre/SharesPlugin.php +++ b/apps/dav/lib/Connector/Sabre/SharesPlugin.php @@ -27,9 +27,13 @@ */ namespace OCA\DAV\Connector\Sabre; +use OCA\DAV\Connector\Sabre\Exception\FileLocked; use \Sabre\DAV\PropFind; use OCP\IUserSession; use OCP\Share\IShare; +use OCP\Files\NotFoundException; +use OCP\Lock\LockedException; +use \OCA\DAV\Connector\Sabre\Node; /** * Sabre Plugin to provide share-related properties @@ -37,7 +41,9 @@ use OCP\Share\IShare; class SharesPlugin extends \Sabre\DAV\ServerPlugin { const NS_OWNCLOUD = 'http://owncloud.org/ns'; + const NS_NEXTCLOUD = 'http://nextcloud.org/ns'; const SHARETYPES_PROPERTYNAME = '{http://owncloud.org/ns}share-types'; + const SHAREES_PROPERTYNAME = '{http://nextcloud.org/ns}sharees'; /** * Reference to main server object @@ -106,6 +112,7 @@ class SharesPlugin extends \Sabre\DAV\ServerPlugin { $server->xml->namespacesMap[self::NS_OWNCLOUD] = 'oc'; $server->xml->elementMap[self::SHARETYPES_PROPERTYNAME] = ShareTypeList::class; $server->protectedProperties[] = self::SHARETYPES_PROPERTYNAME; + $server->protectedProperties[] = self::SHAREES_PROPERTYNAME; $this->server = $server; $this->server->on('propFind', array($this, 'handleGetProperties')); @@ -214,5 +221,69 @@ class SharesPlugin extends \Sabre\DAV\ServerPlugin { return new ShareTypeList($shareTypes); }); + + $propFind->handle(self::SHAREES_PROPERTYNAME, function() use ($sabreNode) { + $test = $this->server->httpRequest->getRawServerValue('PHP_AUTH_USER'); + return $this->getShareeFromShare($sabreNode, $test); + }); + } + + /** + * @param \Sabre\DAV\INode $sabreNode + * @param string $user + * @return string + * @throws FileLocked + * @throws NotFoundException + */ + public function getShareeFromShare(\Sabre\DAV\INode $sabreNode, $user) { + $sharees = []; + + if ($user == null) { + return $sharees; + } + $types = [ + Share::SHARE_TYPE_USER, + Share::SHARE_TYPE_REMOTE, + Share::SHARE_TYPE_GROUP, + ]; + + if ($sabreNode->getPath() === "/") { + return $sharees; + } + + $path = $this->getPath(); + + if ($path !== null) { + $userFolder = \OC::$server->getRootFolder()->getUserFolder($user); + try { + $path = $userFolder->get($path); + $this->lock($path); + } catch (\OCP\Files\NotFoundException $e) { + throw new NotFoundException($this->l->t('Wrong path, file/folder doesn\'t exist')); + } catch (LockedException $e) { + throw new FileLocked($e->getMessage(), $e->getCode(), $e); + } + } + + foreach ($types as $shareType) { + $shares = $this->shareManager->getSharesBy($user, $shareType, $path, false, -1, 0); + foreach ($shares as $share) { + if ($share->getSharedBy() === $user) { + $sharees[] = $share->getSharedWith(); + } + } + } + return implode(', ', $sharees); + } + + /** + * Lock a Node + * + * @param \OCP\Files\Node $node + * @throws LockedException + */ + private function lock(\OCP\Files\Node $node) { + $node->lock(ILockingProvider::LOCK_SHARED); + $this->lockedNode = $node; } } |