summaryrefslogtreecommitdiffstats
path: root/lib/private/Share20/Manager.php
diff options
context:
space:
mode:
authorRoeland Jago Douma <rullzer@owncloud.com>2016-04-15 09:02:01 +0200
committerRoeland Jago Douma <rullzer@owncloud.com>2016-04-19 14:04:00 +0200
commitafa37d363fe1bedfe85a4dbd53adb091f3b014b2 (patch)
tree7724697e16c71aa4c8ac67d1c09d6520459a3fcd /lib/private/Share20/Manager.php
parent6123badbfa22b79167c4b41f84a38b372f033a2e (diff)
downloadnextcloud-server-afa37d363fe1bedfe85a4dbd53adb091f3b014b2.tar.gz
nextcloud-server-afa37d363fe1bedfe85a4dbd53adb091f3b014b2.zip
Fix related logic
Diffstat (limited to 'lib/private/Share20/Manager.php')
-rw-r--r--lib/private/Share20/Manager.php51
1 files changed, 31 insertions, 20 deletions
diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php
index 1ec25750cfe..dee9e0cdd21 100644
--- a/lib/private/Share20/Manager.php
+++ b/lib/private/Share20/Manager.php
@@ -237,6 +237,17 @@ class Manager implements IManager {
if (($share->getPermissions() & \OCP\Constants::PERMISSION_READ) === 0) {
throw new \InvalidArgumentException('Shares need at least read permissions');
}
+
+ if ($share->getNode() instanceof \OCP\Files\File) {
+ if ($share->getPermissions() & \OCP\Constants::PERMISSION_DELETE) {
+ $message_t = $this->l->t('Files can\'t be shared with delete permissions');
+ throw new GenericShareException($message_t);
+ }
+ if ($share->getPermissions() & \OCP\Constants::PERMISSION_CREATE) {
+ $message_t = $this->l->t('Files can\'t be shared with create permissions');
+ throw new GenericShareException($message_t);
+ }
+ }
}
/**
@@ -505,6 +516,24 @@ class Manager implements IManager {
$this->generalCreateChecks($share);
+ // Verify if there are any issues with the path
+ $this->pathCreateChecks($share->getNode());
+
+ /*
+ * On creation of a share the owner is always the owner of the path
+ * Except for mounted federated shares.
+ */
+ $storage = $share->getNode()->getStorage();
+ if ($storage->instanceOfStorage('OCA\Files_Sharing\External\Storage')) {
+ $parent = $share->getNode()->getParent();
+ while($parent->getStorage()->instanceOfStorage('OCA\Files_Sharing\External\Storage')) {
+ $parent = $parent->getParent();
+ }
+ $share->setShareOwner($parent->getOwner()->getUID());
+ } else {
+ $share->setShareOwner($share->getNode()->getOwner()->getUID());
+ }
+
//Verify share type
if ($share->getShareType() === \OCP\Share::SHARE_TYPE_USER) {
$this->userCreateChecks($share);
@@ -538,24 +567,6 @@ class Manager implements IManager {
}
}
- // Verify if there are any issues with the path
- $this->pathCreateChecks($share->getNode());
-
- /*
- * On creation of a share the owner is always the owner of the path
- * Except for mounted federated shares.
- */
- $storage = $share->getNode()->getStorage();
- if ($storage->instanceOfStorage('OCA\Files_Sharing\External\Storage')) {
- $parent = $share->getNode()->getParent();
- while($parent->getStorage()->instanceOfStorage('OCA\Files_Sharing\External\Storage')) {
- $parent = $parent->getParent();
- }
- $share->setShareOwner($parent->getOwner()->getUID());
- } else {
- $share->setShareOwner($share->getNode()->getOwner()->getUID());
- }
-
// Cannot share with the owner
if ($share->getShareType() === \OCP\Share::SHARE_TYPE_USER &&
$share->getSharedWith() === $share->getShareOwner()) {
@@ -818,7 +829,7 @@ class Manager implements IManager {
* @param string $recipientId
*/
public function deleteFromSelf(\OCP\Share\IShare $share, $recipientId) {
- list($providerId, ) = $this->splitFullId($share->getId());
+ list($providerId, ) = $this->splitFullId($share->getFullId());
$provider = $this->factory->getProvider($providerId);
$provider->deleteFromSelf($share, $recipientId);
@@ -844,7 +855,7 @@ class Manager implements IManager {
}
}
- list($providerId, ) = $this->splitFullId($share->getId());
+ list($providerId, ) = $this->splitFullId($share->getFullId());
$provider = $this->factory->getProvider($providerId);
$provider->move($share, $recipientId);