summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authortobiasKaminsky <tobias@kaminsky.me>2019-07-22 14:47:17 +0200
committertobiasKaminsky <tobias@kaminsky.me>2019-07-22 14:47:17 +0200
commitb81fb182b3d793882a1942c852e8c3d2262b3de9 (patch)
tree7e2366d960ca95da0ada0218896d9e922d5f29e2 /apps
parente3991fbde0e97ad31af44c9f2506a8a1208d8f53 (diff)
downloadnextcloud-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.php6
-rw-r--r--apps/dav/lib/Connector/Sabre/Node.php57
-rw-r--r--apps/dav/lib/Connector/Sabre/SharesPlugin.php71
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;
}
}