summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/files_sharing/tests/ApiTest.php63
-rw-r--r--lib/private/Share/Share.php677
-rw-r--r--lib/private/Template/JSConfigHelper.php2
-rw-r--r--lib/public/Share.php162
-rw-r--r--tests/lib/Share/ShareTest.php880
5 files changed, 3 insertions, 1781 deletions
diff --git a/apps/files_sharing/tests/ApiTest.php b/apps/files_sharing/tests/ApiTest.php
index 67e50554696..77b409aac06 100644
--- a/apps/files_sharing/tests/ApiTest.php
+++ b/apps/files_sharing/tests/ApiTest.php
@@ -1225,69 +1225,6 @@ class ApiTest extends TestCase {
\OCP\Share::shareItem('file', $info->getId(), \OCP\Share::SHARE_TYPE_LINK, self::TEST_FILES_SHARING_API_USER2, 31);
}
- public function testDefaultExpireDate() {
- self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
-
- // TODO drop this once all code paths use the DI version - otherwise
- // the cache inside this config object is out of date because
- // OC_Appconfig is used and bypasses this cache which lead to integrity
- // constraint violations
- $config = \OC::$server->getConfig();
- $config->deleteAppValue('core', 'shareapi_default_expire_date');
- $config->deleteAppValue('core', 'shareapi_enforce_expire_date');
- $config->deleteAppValue('core', 'shareapi_expire_after_n_days');
-
- $config->setAppValue('core', 'shareapi_default_expire_date', 'yes');
- $config->setAppValue('core', 'shareapi_enforce_expire_date', 'yes');
- $config->setAppValue('core', 'shareapi_expire_after_n_days', '2');
-
- // default expire date is set to 2 days
- // the time when the share was created is set to 3 days in the past
- // user defined expire date is set to +2 days from now on
- // -> link should be already expired by the default expire date but the user
- // share should still exists.
- $now = time();
- $dateFormat = 'Y-m-d H:i:s';
- $shareCreated = $now - 3 * 24 * 60 * 60;
- $expireDate = date($dateFormat, $now + 2 * 24 * 60 * 60);
-
- $info = \OC\Files\Filesystem::getFileInfo($this->filename);
- $this->assertTrue($info instanceof \OC\Files\FileInfo);
-
- $result = \OCP\Share::shareItem('file', $info->getId(), \OCP\Share::SHARE_TYPE_LINK, null, \OCP\Constants::PERMISSION_READ);
- $this->assertTrue(is_string($result));
-
- $result = \OCP\Share::shareItem('file', $info->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, 31);
- $this->assertTrue($result);
-
- $result = \OCP\Share::setExpirationDate('file', $info->getId() , $expireDate, $now);
- $this->assertTrue($result);
-
- //manipulate stime so that both shares are older then the default expire date
- $statement = "UPDATE `*PREFIX*share` SET `stime` = ? WHERE `share_type` = ?";
- $query = \OCP\DB::prepare($statement);
- $result = $query->execute(array($shareCreated, \OCP\Share::SHARE_TYPE_LINK));
- $this->assertSame(1, $result);
- $query = \OCP\DB::prepare($statement);
- $result = $query->execute(array($shareCreated, \OCP\Share::SHARE_TYPE_USER));
- $this->assertSame(1, $result);
-
- // now the link share should expire because of enforced default expire date
- // the user share should still exist
- $result = \OCP\Share::getItemShared('file', $info->getId());
- $this->assertTrue(is_array($result));
- $this->assertSame(1, count($result));
- $share = reset($result);
- $this->assertSame(\OCP\Share::SHARE_TYPE_USER, $share['share_type']);
-
- //cleanup
- $result = \OCP\Share::unshare('file', $info->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2);
- $this->assertTrue($result);
- $config->setAppValue('core', 'shareapi_default_expire_date', 'no');
- $config->setAppValue('core', 'shareapi_enforce_expire_date', 'no');
-
- }
-
public function datesProvider() {
$date = new \DateTime();
$date->add(new \DateInterval('P5D'));
diff --git a/lib/private/Share/Share.php b/lib/private/Share/Share.php
index 93117bf3c7e..52b382e6678 100644
--- a/lib/private/Share/Share.php
+++ b/lib/private/Share/Share.php
@@ -84,7 +84,7 @@ class Share extends Constants {
* @return boolean true if backend is registered or false if error
*/
public static function registerBackend($itemType, $class, $collectionOf = null, $supportedFileExtensions = null) {
- if (self::isEnabled()) {
+ if (\OC::$server->getAppConfig()->getValue('core', 'shareapi_enabled', 'yes') == 'yes') {
if (!isset(self::$backendTypes[$itemType])) {
self::$backendTypes[$itemType] = array(
'class' => $class,
@@ -106,255 +106,6 @@ class Share extends Constants {
}
/**
- * Check if the Share API is enabled
- * @return boolean true if enabled or false
- *
- * The Share API is enabled by default if not configured
- */
- public static function isEnabled() {
- if (\OC::$server->getAppConfig()->getValue('core', 'shareapi_enabled', 'yes') == 'yes') {
- return true;
- }
- return false;
- }
-
- /**
- * Find which users can access a shared item
- * @param string $path to the file
- * @param string $ownerUser owner of the file
- * @param IUserManager $userManager
- * @param ILogger $logger
- * @param boolean $includeOwner include owner to the list of users with access to the file
- * @param boolean $returnUserPaths Return an array with the user => path map
- * @param boolean $recursive take all parent folders into account (default true)
- * @return array
- * @note $path needs to be relative to user data dir, e.g. 'file.txt'
- * not '/admin/data/file.txt'
- * @throws \OC\User\NoUserException
- */
- public static function getUsersSharingFile($path,
- $ownerUser,
- IUserManager $userManager,
- ILogger $logger,
- $includeOwner = false,
- $returnUserPaths = false,
- $recursive = true) {
- $userObject = $userManager->get($ownerUser);
-
- if (is_null($userObject)) {
- $logger->error(
- sprintf(
- 'Backends provided no user object for %s',
- $ownerUser
- ),
- [
- 'app' => 'files',
- ]
- );
- throw new \OC\User\NoUserException('Backends provided no user object');
- }
-
- $ownerUser = $userObject->getUID();
-
- Filesystem::initMountPoints($ownerUser);
- $shares = $sharePaths = $fileTargets = array();
- $publicShare = false;
- $remoteShare = false;
- $source = -1;
- $cache = $mountPath = false;
-
- $view = new \OC\Files\View('/' . $ownerUser . '/files');
- $meta = $view->getFileInfo($path);
- if ($meta) {
- $path = substr($meta->getPath(), strlen('/' . $ownerUser . '/files'));
- } else {
- // if the file doesn't exists yet we start with the parent folder
- $meta = $view->getFileInfo(dirname($path));
- }
-
- if($meta !== false) {
- $source = $meta['fileid'];
- $cache = new \OC\Files\Cache\Cache($meta['storage']);
-
- $mountPath = $meta->getMountPoint()->getMountPoint();
- if ($mountPath !== false) {
- $mountPath = substr($mountPath, strlen('/' . $ownerUser . '/files'));
- }
- }
-
- $paths = [];
- while ($source !== -1) {
- // Fetch all shares with another user
- if (!$returnUserPaths) {
- $query = \OC_DB::prepare(
- 'SELECT `share_with`, `file_source`, `file_target`
- FROM
- `*PREFIX*share`
- WHERE
- `item_source` = ? AND `share_type` = ? AND `item_type` IN (\'file\', \'folder\')'
- );
- $result = $query->execute(array($source, self::SHARE_TYPE_USER));
- } else {
- $query = \OC_DB::prepare(
- 'SELECT `share_with`, `file_source`, `file_target`
- FROM
- `*PREFIX*share`
- WHERE
- `item_source` = ? AND `share_type` IN (?, ?) AND `item_type` IN (\'file\', \'folder\')'
- );
- $result = $query->execute(array($source, self::SHARE_TYPE_USER, self::$shareTypeGroupUserUnique));
- }
-
- if (\OCP\DB::isError($result)) {
- \OCP\Util::writeLog('OCP\Share', \OC_DB::getErrorMessage(), \OCP\Util::ERROR);
- } else {
- while ($row = $result->fetchRow()) {
- $shares[] = $row['share_with'];
- if ($returnUserPaths) {
- $fileTargets[(int) $row['file_source']][$row['share_with']] = $row;
- }
- }
- }
-
- // We also need to take group shares into account
- $query = \OC_DB::prepare(
- 'SELECT `share_with`, `file_source`, `file_target`
- FROM
- `*PREFIX*share`
- WHERE
- `item_source` = ? AND `share_type` = ? AND `item_type` IN (\'file\', \'folder\')'
- );
-
- $result = $query->execute(array($source, self::SHARE_TYPE_GROUP));
-
- if (\OCP\DB::isError($result)) {
- \OCP\Util::writeLog('OCP\Share', \OC_DB::getErrorMessage(), \OCP\Util::ERROR);
- } else {
- $groupManager = \OC::$server->getGroupManager();
- while ($row = $result->fetchRow()) {
-
- $usersInGroup = [];
- $group = $groupManager->get($row['share_with']);
- if ($group) {
- $users = $group->searchUsers('', -1, 0);
- $userIds = array();
- foreach ($users as $user) {
- $userIds[] = $user->getUID();
- }
- $usersInGroup = $userIds;
- }
- $shares = array_merge($shares, $usersInGroup);
- if ($returnUserPaths) {
- foreach ($usersInGroup as $user) {
- if (!isset($fileTargets[(int) $row['file_source']][$user])) {
- // When the user already has an entry for this file source
- // the file is either shared directly with him as well, or
- // he has an exception entry (because of naming conflict).
- $fileTargets[(int) $row['file_source']][$user] = $row;
- }
- }
- }
- }
- }
-
- //check for public link shares
- if (!$publicShare) {
- $query = \OC_DB::prepare('
- SELECT `share_with`
- FROM `*PREFIX*share`
- WHERE `item_source` = ? AND `share_type` IN (?, ?) AND `item_type` IN (\'file\', \'folder\')', 1
- );
-
- $result = $query->execute(array($source, self::SHARE_TYPE_LINK, self::SHARE_TYPE_EMAIL));
-
- if (\OCP\DB::isError($result)) {
- \OCP\Util::writeLog('OCP\Share', \OC_DB::getErrorMessage(), \OCP\Util::ERROR);
- } else {
- if ($result->fetchRow()) {
- $publicShare = true;
- }
- }
- }
-
- //check for remote share
- if (!$remoteShare) {
- $query = \OC_DB::prepare('
- SELECT `share_with`
- FROM `*PREFIX*share`
- WHERE `item_source` = ? AND `share_type` = ? AND `item_type` IN (\'file\', \'folder\')', 1
- );
-
- $result = $query->execute(array($source, self::SHARE_TYPE_REMOTE));
-
- if (\OCP\DB::isError($result)) {
- \OCP\Util::writeLog('OCP\Share', \OC_DB::getErrorMessage(), \OCP\Util::ERROR);
- } else {
- if ($result->fetchRow()) {
- $remoteShare = true;
- }
- }
- }
-
- // let's get the parent for the next round
- $meta = $cache->get((int)$source);
- if ($recursive === true && $meta !== false) {
- $paths[$source] = $meta['path'];
- $source = (int)$meta['parent'];
- } else {
- $source = -1;
- }
- }
-
- // Include owner in list of users, if requested
- if ($includeOwner) {
- $shares[] = $ownerUser;
- }
-
- if ($returnUserPaths) {
- $fileTargetIDs = array_keys($fileTargets);
- $fileTargetIDs = array_unique($fileTargetIDs);
-
- if (!empty($fileTargetIDs)) {
- $query = \OC_DB::prepare(
- 'SELECT `fileid`, `path`
- FROM `*PREFIX*filecache`
- WHERE `fileid` IN (' . implode(',', $fileTargetIDs) . ')'
- );
- $result = $query->execute();
-
- if (\OCP\DB::isError($result)) {
- \OCP\Util::writeLog('OCP\Share', \OC_DB::getErrorMessage(), \OCP\Util::ERROR);
- } else {
- while ($row = $result->fetchRow()) {
- foreach ($fileTargets[$row['fileid']] as $uid => $shareData) {
- if ($mountPath !== false) {
- $sharedPath = $shareData['file_target'];
- $sharedPath .= substr($path, strlen($mountPath) + strlen($paths[$row['fileid']]));
- $sharePaths[$uid] = $sharedPath;
- } else {
- $sharedPath = $shareData['file_target'];
- $sharedPath .= substr($path, strlen($row['path']) -5);
- $sharePaths[$uid] = $sharedPath;
- }
- }
- }
- $result->closeCursor();
- }
- }
-
- if ($includeOwner) {
- $sharePaths[$ownerUser] = $path;
- } else {
- unset($sharePaths[$ownerUser]);
- }
-
- return $sharePaths;
- }
-
- return array('users' => array_unique($shares), 'public' => $publicShare, 'remote' => $remoteShare);
- }
-
- /**
* Get the items of item type shared with the current user
* @param string $itemType
* @param int $format (optional) Format type must be defined by the backend
@@ -386,21 +137,6 @@ class Share extends Constants {
}
/**
- * Get the item of item type shared with the current user
- * @param string $itemType
- * @param string $itemTarget
- * @param int $format (optional) Format type must be defined by the backend
- * @param mixed $parameters (optional)
- * @param boolean $includeCollections (optional)
- * @return mixed Return depends on format
- */
- public static function getItemSharedWith($itemType, $itemTarget, $format = self::FORMAT_NONE,
- $parameters = null, $includeCollections = false) {
- return self::getItems($itemType, $itemTarget, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format,
- $parameters, 1, $includeCollections);
- }
-
- /**
* Get the item of item type shared with a given user by source
* @param string $itemType
* @param string $itemSource
@@ -527,18 +263,6 @@ class Share extends Constants {
}
/**
- * Get the item of item type shared by a link
- * @param string $itemType
- * @param string $itemSource
- * @param string $uidOwner Owner of link
- * @return array
- */
- public static function getItemSharedWithByLink($itemType, $itemSource, $uidOwner) {
- return self::getItems($itemType, $itemSource, self::SHARE_TYPE_LINK, null, $uidOwner, self::FORMAT_NONE,
- null, 1);
- }
-
- /**
* Based on the given token the share information will be returned - password protected shares will be verified
* @param string $token
* @param bool $checkPasswordProtection
@@ -620,42 +344,6 @@ class Share extends Constants {
}
/**
- * Get all users an item is shared with
- * @param string $itemType
- * @param string $itemSource
- * @param string $uidOwner
- * @param boolean $includeCollections
- * @param boolean $checkExpireDate
- * @return array Return array of users
- */
- public static function getUsersItemShared($itemType, $itemSource, $uidOwner, $includeCollections = false, $checkExpireDate = true) {
-
- $users = array();
- $items = self::getItems($itemType, $itemSource, null, null, $uidOwner, self::FORMAT_NONE, null, -1, $includeCollections, false, $checkExpireDate);
- if ($items) {
- foreach ($items as $item) {
- if ((int)$item['share_type'] === self::SHARE_TYPE_USER) {
- $users[] = $item['share_with'];
- } else if ((int)$item['share_type'] === self::SHARE_TYPE_GROUP) {
-
- $group = \OC::$server->getGroupManager()->get($item['share_with']);
- $userIds = [];
- if ($group) {
- $users = $group->searchUsers('', -1, 0);
- foreach ($users as $user) {
- $userIds[] = $user->getUID();
- }
- return $userIds;
- }
-
- $users = array_merge($users, $userIds);
- }
- }
- }
- return $users;
- }
-
- /**
* Share an item with a user, group, or via private link
* @param string $itemType
* @param string $itemSource
@@ -1027,140 +715,6 @@ class Share extends Constants {
}
/**
- * Unshare an item from all users, groups, and remove all links
- * @param string $itemType
- * @param string $itemSource
- * @return boolean true on success or false on failure
- */
- public static function unshareAll($itemType, $itemSource) {
- // Get all of the owners of shares of this item.
- $query = \OC_DB::prepare( 'SELECT `uid_owner` from `*PREFIX*share` WHERE `item_type`=? AND `item_source`=?' );
- $result = $query->execute(array($itemType, $itemSource));
- $shares = array();
- // Add each owner's shares to the array of all shares for this item.
- while ($row = $result->fetchRow()) {
- $shares = array_merge($shares, self::getItems($itemType, $itemSource, null, null, $row['uid_owner']));
- }
- if (!empty($shares)) {
- // Pass all the vars we have for now, they may be useful
- $hookParams = array(
- 'itemType' => $itemType,
- 'itemSource' => $itemSource,
- 'shares' => $shares,
- );
- \OC_Hook::emit('OCP\Share', 'pre_unshareAll', $hookParams);
- foreach ($shares as $share) {
- self::unshareItem($share);
- }
- \OC_Hook::emit('OCP\Share', 'post_unshareAll', $hookParams);
- return true;
- }
- return false;
- }
-
- /**
- * Unshare an item shared with the current user
- * @param string $itemType
- * @param string $itemOrigin Item target or source
- * @param boolean $originIsSource true if $itemOrigin is the source, false if $itemOrigin is the target (optional)
- * @return boolean true on success or false on failure
- *
- * Unsharing from self is not allowed for items inside collections
- */
- public static function unshareFromSelf($itemType, $itemOrigin, $originIsSource = false) {
- $originType = ($originIsSource) ? 'source' : 'target';
- $uid = \OCP\User::getUser();
-
- if ($itemType === 'file' || $itemType === 'folder') {
- $statement = 'SELECT * FROM `*PREFIX*share` WHERE `item_type` = ? and `file_' . $originType . '` = ?';
- } else {
- $statement = 'SELECT * FROM `*PREFIX*share` WHERE `item_type` = ? and `item_' . $originType . '` = ?';
- }
-
- $query = \OCP\DB::prepare($statement);
- $result = $query->execute(array($itemType, $itemOrigin));
-
- $shares = $result->fetchAll();
-
- $listOfUnsharedItems = array();
-
- $itemUnshared = false;
- foreach ($shares as $share) {
- if ((int)$share['share_type'] === \OCP\Share::SHARE_TYPE_USER &&
- $share['share_with'] === $uid) {
- $deletedShares = Helper::delete($share['id']);
- $shareTmp = array(
- 'id' => $share['id'],
- 'shareWith' => $share['share_with'],
- 'itemTarget' => $share['item_target'],
- 'itemType' => $share['item_type'],
- 'shareType' => (int)$share['share_type'],
- );
- if (isset($share['file_target'])) {
- $shareTmp['fileTarget'] = $share['file_target'];
- }
- $listOfUnsharedItems = array_merge($listOfUnsharedItems, $deletedShares, array($shareTmp));
- $itemUnshared = true;
- break;
- } elseif ((int)$share['share_type'] === \OCP\Share::SHARE_TYPE_GROUP) {
- $group = \OC::$server->getGroupManager()->get($share['share_with']);
- $user = \OC::$server->getUserManager()->get($uid);
- if ($group && $user && $group->inGroup($user)) {
- $groupShare = $share;
- }
- } elseif ((int)$share['share_type'] === self::$shareTypeGroupUserUnique &&
- $share['share_with'] === $uid) {
- $uniqueGroupShare = $share;
- }
- }
-
- if (!$itemUnshared && isset($groupShare) && !isset($uniqueGroupShare)) {
- $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share`'
- .' (`item_type`, `item_source`, `item_target`, `parent`, `share_type`,'
- .' `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`, `file_target`)'
- .' VALUES (?,?,?,?,?,?,?,?,?,?,?)');
- $query->execute(array($groupShare['item_type'], $groupShare['item_source'], $groupShare['item_target'],
- $groupShare['id'], self::$shareTypeGroupUserUnique,
- \OC_User::getUser(), $groupShare['uid_owner'], 0, $groupShare['stime'], $groupShare['file_source'],
- $groupShare['file_target']));
- $shareTmp = array(
- 'id' => $groupShare['id'],
- 'shareWith' => $groupShare['share_with'],
- 'itemTarget' => $groupShare['item_target'],
- 'itemType' => $groupShare['item_type'],
- 'shareType' => (int)$groupShare['share_type'],
- );
- if (isset($groupShare['file_target'])) {
- $shareTmp['fileTarget'] = $groupShare['file_target'];
- }
- $listOfUnsharedItems = array_merge($listOfUnsharedItems, [$shareTmp]);
- $itemUnshared = true;
- } elseif (!$itemUnshared && isset($uniqueGroupShare)) {
- $query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `permissions` = ? WHERE `id` = ?');
- $query->execute(array(0, $uniqueGroupShare['id']));
- $shareTmp = array(
- 'id' => $uniqueGroupShare['id'],
- 'shareWith' => $uniqueGroupShare['share_with'],
- 'itemTarget' => $uniqueGroupShare['item_target'],
- 'itemType' => $uniqueGroupShare['item_type'],
- 'shareType' => (int)$uniqueGroupShare['share_type'],
- );
- if (isset($uniqueGroupShare['file_target'])) {
- $shareTmp['fileTarget'] = $uniqueGroupShare['file_target'];
- }
- $listOfUnsharedItems = array_merge($listOfUnsharedItems, [$shareTmp]);
- $itemUnshared = true;
- }
-
- if ($itemUnshared) {
- \OC_Hook::emit('OCP\Share', 'post_unshareFromSelf',
- array('unsharedItems' => $listOfUnsharedItems, 'itemType' => $itemType));
- }
-
- return $itemUnshared;
- }
-
- /**
* sent status if users got informed by mail about share
* @param string $itemType
* @param string $itemSource
@@ -1184,177 +738,6 @@ class Share extends Constants {
}
/**
- * Set the permissions of an item for a specific user or group
- * @param string $itemType
- * @param string $itemSource
- * @param int $shareType SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_LINK
- * @param string $shareWith User or group the item is being shared with
- * @param int $permissions CRUDS permissions
- * @return boolean true on success or false on failure
- * @throws \Exception when trying to grant more permissions then the user has himself
- */
- public static function setPermissions($itemType, $itemSource, $shareType, $shareWith, $permissions) {
- $l = \OC::$server->getL10N('lib');
- $connection = \OC::$server->getDatabaseConnection();
-
- $intArrayToLiteralArray = function($intArray, $eb) {
- return array_map(function($int) use ($eb) {
- return $eb->literal((int)$int, 'integer');
- }, $intArray);
- };
- $sanitizeItem = function($item) {
- $item['id'] = (int)$item['id'];
- $item['premissions'] = (int)$item['permissions'];
- return $item;
- };
-
- if ($rootItem = self::getItems($itemType, $itemSource, $shareType, $shareWith,
- \OC_User::getUser(), self::FORMAT_NONE, null, 1, false)) {
- // Check if this item is a reshare and verify that the permissions
- // granted don't exceed the parent shared item
- if (isset($rootItem['parent'])) {
- $qb = $connection->getQueryBuilder();
- $qb->select('permissions')
- ->from('share')
- ->where($qb->expr()->eq('id', $qb->createParameter('id')))
- ->setParameter(':id', $rootItem['parent']);
- $dbresult = $qb->execute();
-
- $result = $dbresult->fetch();
- $dbresult->closeCursor();
- if (~(int)$result['permissions'] & $permissions) {
- $message = 'Setting permissions for %s failed,'
- .' because the permissions exceed permissions granted to %s';
- $message_t = $l->t('Setting permissions for %s failed, because the permissions exceed permissions granted to %s', array($itemSource, \OC_User::getUser()));
- \OCP\Util::writeLog('OCP\Share', sprintf($message, $itemSource, \OC_User::getUser()), \OCP\Util::DEBUG);
- throw new \Exception($message_t);
- }
- }
- $qb = $connection->getQueryBuilder();
- $qb->update('share')
- ->set('permissions', $qb->createParameter('permissions'))
- ->where($qb->expr()->eq('id', $qb->createParameter('id')))
- ->setParameter(':id', $rootItem['id'])
- ->setParameter(':permissions', $permissions);
- $qb->execute();
- if ($itemType === 'file' || $itemType === 'folder') {
- \OC_Hook::emit('OCP\Share', 'post_update_permissions', array(
- 'itemType' => $itemType,
- 'itemSource' => $itemSource,
- 'shareType' => $shareType,
- 'shareWith' => $shareWith,
- 'uidOwner' => \OC_User::getUser(),
- 'permissions' => $permissions,
- 'path' => $rootItem['path'],
- 'share' => $rootItem
- ));
- }
-
- // Share id's to update with the new permissions
- $ids = [];
- $items = [];
-
- // Check if permissions were removed
- if ((int)$rootItem['permissions'] & ~$permissions) {
- // If share permission is removed all reshares must be deleted
- if (($rootItem['permissions'] & \OCP\Constants::PERMISSION_SHARE) && (~$permissions & \OCP\Constants::PERMISSION_SHARE)) {
- // delete all shares, keep parent and group children
- Helper::delete($rootItem['id'], true, null, null, true);
- }
-
- // Remove permission from all children
- $parents = [$rootItem['id']];
- while (!empty($parents)) {
- $parents = $intArrayToLiteralArray($parents, $qb->expr());
- $qb = $connection->getQueryBuilder();
- $qb->select('id', 'permissions', 'item_type')
- ->from('share')
- ->where($qb->expr()->in('parent', $parents));
- $result = $qb->execute();
- // Reset parents array, only go through loop again if
- // items are found that need permissions removed
- $parents = [];
- while ($item = $result->fetch()) {
- $item = $sanitizeItem($item);
-
- $items[] = $item;
- // Check if permissions need to be removed
- if ($item['permissions'] & ~$permissions) {
- // Add to list of items that need permissions removed
- $ids[] = $item['id'];
- $parents[] = $item['id'];
- }
- }
- $result->closeCursor();
- }
-
- // Remove the permissions for all reshares of this item
- if (!empty($ids)) {
- $ids = "'".implode("','", $ids)."'";
- // TODO this should be done with Doctrine platform objects
- if (\OC::$server->getConfig()->getSystemValue("dbtype") === 'oci') {
- $andOp = 'BITAND(`permissions`, ?)';
- } else {
- $andOp = '`permissions` & ?';
- }
- $query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `permissions` = '.$andOp
- .' WHERE `id` IN ('.$ids.')');
- $query->execute(array($permissions));
- }
-
- }
-
- /*
- * Permissions were added
- * Update all USERGROUP shares. (So group shares where the user moved their mountpoint).
- */
- if ($permissions & ~(int)$rootItem['permissions']) {
- $qb = $connection->getQueryBuilder();
- $qb->select('id', 'permissions', 'item_type')
- ->from('share')
- ->where($qb->expr()->eq('parent', $qb->createParameter('parent')))
- ->andWhere($qb->expr()->eq('share_type', $qb->createParameter('share_type')))
- ->andWhere($qb->expr()->neq('permissions', $qb->createParameter('shareDeleted')))
- ->setParameter(':parent', (int)$rootItem['id'])
- ->setParameter(':share_type', 2)
- ->setParameter(':shareDeleted', 0);
- $result = $qb->execute();
-
- $ids = [];
- while ($item = $result->fetch()) {
- $item = $sanitizeItem($item);
- $items[] = $item;
- $ids[] = $item['id'];
- }
- $result->closeCursor();
-
- // Add permssions for all USERGROUP shares of this item
- if (!empty($ids)) {
- $ids = $intArrayToLiteralArray($ids, $qb->expr());
-
- $qb = $connection->getQueryBuilder();
- $qb->update('share')
- ->set('permissions', $qb->createParameter('permissions'))
- ->where($qb->expr()->in('id', $ids))
- ->setParameter(':permissions', $permissions);
- $qb->execute();
- }
- }
-
- foreach ($items as $item) {
- \OC_Hook::emit('OCP\Share', 'post_update_permissions', ['share' => $item]);
- }
-
- return true;
- }
- $message = 'Setting permissions for %s failed, because the item was not found';
- $message_t = $l->t('Setting permissions for %s failed, because the item was not found', array($itemSource));
-
- \OCP\Util::writeLog('OCP\Share', sprintf($message, $itemSource), \OCP\Util::DEBUG);
- throw new \Exception($message_t);
- }
-
- /**
* validate expiration date if it meets all constraints
*
* @param string $expireDate well formatted date string, e.g. "DD-MM-YYYY"
@@ -1403,50 +786,6 @@ class Share extends Constants {
}
/**
- * Set expiration date for a share
- * @param string $itemType
- * @param string $itemSource
- * @param string $date expiration date
- * @param int $shareTime timestamp from when the file was shared
- * @return boolean
- * @throws \Exception when the expire date is not set, in the past or further in the future then the enforced date
- */
- public static function setExpirationDate($itemType, $itemSource, $date, $shareTime = null) {
- $user = \OC_User::getUser();
- $l = \OC::$server->getL10N('lib');
-
- if ($date == '') {
- if (\OCP\Util::isDefaultExpireDateEnforced()) {
- $warning = 'Cannot clear expiration date. Shares are required to have an expiration date.';
- $warning_t = $l->t('Cannot clear expiration date. Shares are required to have an expiration date.');
- \OCP\Util::writeLog('OCP\Share', $warning, \OCP\Util::WARN);
- throw new \Exception($warning_t);
- } else {
- $date = null;
- }
- } else {
- $date = self::validateExpireDate($date, $shareTime, $itemType, $itemSource);
- }
- $query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `expiration` = ? WHERE `item_type` = ? AND `item_source` = ? AND `uid_owner` = ? AND `share_type` = ?');
- $query->bindValue(1, $date, 'datetime');
- $query->bindValue(2, $itemType);
- $query->bindValue(3, $itemSource);
- $query->bindValue(4, $user);
- $query->bindValue(5, \OCP\Share::SHARE_TYPE_LINK);
-
- $query->execute();
-
- \OC_Hook::emit('OCP\Share', 'post_set_expiration_date', array(
- 'itemType' => $itemType,
- 'itemSource' => $itemSource,
- 'date' => $date,
- 'uidOwner' => $user
- ));
-
- return true;
- }
-
- /**
* Retrieve the owner of a connection
*
* @param IDBConnection $connection
@@ -1745,7 +1084,7 @@ class Share extends Constants {
public static function getItems($itemType, $item = null, $shareType = null, $shareWith = null,
$uidOwner = null, $format = self::FORMAT_NONE, $parameters = null, $limit = -1,
$includeCollections = false, $itemShareWithBySource = false, $checkExpireDate = true) {
- if (!self::isEnabled()) {
+ if (\OC::$server->getAppConfig()->getValue('core', 'shareapi_enabled', 'yes') != 'yes') {
return array();
}
$backend = self::getBackend($itemType);
@@ -2552,18 +1891,6 @@ class Share extends Constants {
}
/**
- * Delete all shares with type SHARE_TYPE_LINK
- */
- public static function removeAllLinkShares() {
- // Delete any link shares
- $query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*share` WHERE `share_type` = ?');
- $result = $query->execute(array(self::SHARE_TYPE_LINK));
- while ($item = $result->fetchRow()) {
- Helper::delete($item['id']);
- }
- }
-
- /**
* In case a password protected link is not yet authenticated this function will return false
*
* @param array $linkItem
diff --git a/lib/private/Template/JSConfigHelper.php b/lib/private/Template/JSConfigHelper.php
index fb9b27f0765..ae17d556892 100644
--- a/lib/private/Template/JSConfigHelper.php
+++ b/lib/private/Template/JSConfigHelper.php
@@ -223,7 +223,7 @@ class JSConfigHelper {
'enforcePasswordForPublicLink' => \OCP\Util::isPublicLinkPasswordRequired(),
'enableLinkPasswordByDefault' => $enableLinkPasswordByDefault,
'sharingDisabledForUser' => \OCP\Util::isSharingDisabledForUser(),
- 'resharingAllowed' => \OCP\Share::isResharingAllowed(),
+ 'resharingAllowed' => \OC\Share\Share::isResharingAllowed(),
'remoteShareAllowed' => $outgoingServer2serverShareEnabled,
'federatedCloudShareDoc' => $this->urlGenerator->linkToDocs('user-sharing-federated'),
'allowGroupSharing' => \OC::$server->getShareManager()->allowGroupSharing()
diff --git a/lib/public/Share.php b/lib/public/Share.php
index f3a0b53efec..bc07ce4b78c 100644
--- a/lib/public/Share.php
+++ b/lib/public/Share.php
@@ -66,41 +66,6 @@ class Share extends \OC\Share\Constants {
}
/**
- * Check if the Share API is enabled
- * @return boolean true if enabled or false
- *
- * The Share API is enabled by default if not configured
- * @since 5.0.0
- */
- public static function isEnabled() {
- return \OC\Share\Share::isEnabled();
- }
-
- /**
- * Find which users can access a shared item
- * @param string $path to the file
- * @param string $ownerUser owner of the file
- * @param bool $includeOwner include owner to the list of users with access to the file
- * @param bool $returnUserPaths Return an array with the user => path map
- * @param bool $recursive take parent folders into account
- * @return array
- * @note $path needs to be relative to user data dir, e.g. 'file.txt'
- * not '/admin/files/file.txt'
- * @since 5.0.0 - $recursive was added in 9.0.0
- */
- public static function getUsersSharingFile($path, $ownerUser, $includeOwner = false, $returnUserPaths = false, $recursive = true) {
- return \OC\Share\Share::getUsersSharingFile(
- $path,
- $ownerUser,
- \OC::$server->getUserManager(),
- \OC::$server->getLogger(),
- $includeOwner,
- $returnUserPaths,
- $recursive
- );
- }
-
- /**
* Get the items of item type shared with the current user
* @param string $itemType
* @param int $format (optional) Format type must be defined by the backend
@@ -134,22 +99,6 @@ class Share extends \OC\Share\Constants {
}
/**
- * Get the item of item type shared with the current user
- * @param string $itemType
- * @param string $itemTarget
- * @param int $format (optional) Format type must be defined by the backend
- * @param mixed $parameters (optional)
- * @param bool $includeCollections (optional)
- * @return mixed Return depends on format
- * @since 5.0.0
- */
- public static function getItemSharedWith($itemType, $itemTarget, $format = self::FORMAT_NONE,
- $parameters = null, $includeCollections = false) {
-
- return \OC\Share\Share::getItemSharedWith($itemType, $itemTarget, $format, $parameters, $includeCollections);
- }
-
- /**
* Get the item of item type shared with a given user by source
* @param string $itemType
* @param string $itemSource
@@ -178,18 +127,6 @@ class Share extends \OC\Share\Constants {
}
/**
- * Get the item of item type shared by a link
- * @param string $itemType
- * @param string $itemSource
- * @param string $uidOwner Owner of link
- * @return array
- * @since 5.0.0
- */
- public static function getItemSharedWithByLink($itemType, $itemSource, $uidOwner) {
- return \OC\Share\Share::getItemSharedWithByLink($itemType, $itemSource, $uidOwner);
- }
-
- /**
* Based on the given token the share information will be returned - password protected shares will be verified
* @param string $token
* @param bool $checkPasswordProtection
@@ -244,20 +181,6 @@ class Share extends \OC\Share\Constants {
}
/**
- * Get all users an item is shared with
- * @param string $itemType
- * @param string $itemSource
- * @param string $uidOwner
- * @param bool $includeCollections
- * @param bool $checkExpireDate
- * @return array Return array of users
- * @since 5.0.0 - parameter $checkExpireDate was added in 7.0.0
- */
- public static function getUsersItemShared($itemType, $itemSource, $uidOwner, $includeCollections = false, $checkExpireDate = true) {
- return \OC\Share\Share::getUsersItemShared($itemType, $itemSource, $uidOwner, $includeCollections, $checkExpireDate);
- }
-
- /**
* Share an item with a user, group, or via private link
* @param string $itemType
* @param string $itemSource
@@ -291,31 +214,6 @@ class Share extends \OC\Share\Constants {
}
/**
- * Unshare an item from all users, groups, and remove all links
- * @param string $itemType
- * @param string $itemSource
- * @return boolean true on success or false on failure
- * @since 5.0.0
- */
- public static function unshareAll($itemType, $itemSource) {
- return \OC\Share\Share::unshareAll($itemType, $itemSource);
- }
-
- /**
- * Unshare an item shared with the current user
- * @param string $itemType
- * @param string $itemOrigin Item target or source
- * @param boolean $originIsSource true if $itemOrigin is the source, false if $itemOrigin is the target (optional)
- * @return boolean true on success or false on failure
- *
- * Unsharing from self is not allowed for items inside collections
- * @since 5.0.0 - parameter $originIsSource was added in 8.0.0
- */
- public static function unshareFromSelf($itemType, $itemOrigin, $originIsSource = false) {
- return \OC\Share\Share::unshareFromSelf($itemType, $itemOrigin, $originIsSource);
- }
-
- /**
* sent status if users got informed by mail about share
* @param string $itemType
* @param string $itemSource
@@ -329,48 +227,6 @@ class Share extends \OC\Share\Constants {
}
/**
- * Set the permissions of an item for a specific user or group
- * @param string $itemType
- * @param string $itemSource
- * @param int $shareType SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_LINK
- * @param string $shareWith User or group the item is being shared with
- * @param int $permissions CRUDS permissions
- * @return boolean true on success or false on failure
- * @since 5.0.0
- */
- public static function setPermissions($itemType, $itemSource, $shareType, $shareWith, $permissions) {
- return \OC\Share\Share::setPermissions($itemType, $itemSource, $shareType, $shareWith, $permissions);
- }
-
- /**
- * Set expiration date for a share
- * @param string $itemType
- * @param string $itemSource
- * @param string $date expiration date
- * @param int $shareTime timestamp from when the file was shared
- * @return boolean
- * @since 5.0.0 - parameter $shareTime was added in 8.0.0
- */
- public static function setExpirationDate($itemType, $itemSource, $date, $shareTime = null) {
- return \OC\Share\Share::setExpirationDate($itemType, $itemSource, $date, $shareTime);
- }
-
- /**
- * Set password for a public link share
- * @param int $shareId
- * @param string $password
- * @return boolean
- * @since 8.1.0
- */
- public static function setPassword($shareId, $password) {
- $userSession = \OC::$server->getUserSession();
- $connection = \OC::$server->getDatabaseConnection();
- $config = \OC::$server->getConfig();
- return \OC\Share\Share::setPassword($userSession, $connection, $config, $shareId, $password);
- }
-
-
- /**
* Get the backend class for the specified item type
* @param string $itemType
* @return Share_Backend
@@ -381,14 +237,6 @@ class Share extends \OC\Share\Constants {
}
/**
- * Delete all shares with type SHARE_TYPE_LINK
- * @since 6.0.0
- */
- public static function removeAllLinkShares() {
- return \OC\Share\Share::removeAllLinkShares();
- }
-
- /**
* In case a password protected link is not yet authenticated this function will return false
*
* @param array $linkItem
@@ -398,14 +246,4 @@ class Share extends \OC\Share\Constants {
public static function checkPasswordProtectedShare(array $linkItem) {
return \OC\Share\Share::checkPasswordProtectedShare($linkItem);
}
-
- /**
- * Check if resharing is allowed
- *
- * @return boolean true if allowed or false
- * @since 5.0.0
- */
- public static function isResharingAllowed() {
- return \OC\Share\Share::isResharingAllowed();
- }
}
diff --git a/tests/lib/Share/ShareTest.php b/tests/lib/Share/ShareTest.php
index 4ce40a2accd..0442e06fc45 100644
--- a/tests/lib/Share/ShareTest.php
+++ b/tests/lib/Share/ShareTest.php
@@ -143,282 +143,6 @@ class ShareTest extends \Test\TestCase {
}
}
- public function testInvalidItemType() {
- $message = 'Sharing backend for foobar not found';
- try {
- \OCP\Share::shareItem('foobar', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ);
- $this->fail('Exception was expected: '.$message);
- } catch (\Exception $exception) {
- $this->assertEquals($message, $exception->getMessage());
- }
- try {
- \OCP\Share::getItemsSharedWith('foobar');
- $this->fail('Exception was expected: '.$message);
- } catch (\Exception $exception) {
- $this->assertEquals($message, $exception->getMessage());
- }
- try {
- \OCP\Share::getItemSharedWith('foobar', 'test.txt');
- $this->fail('Exception was expected: '.$message);
- } catch (\Exception $exception) {
- $this->assertEquals($message, $exception->getMessage());
- }
- try {
- \OCP\Share::getItemSharedWithBySource('foobar', 'test.txt');
- $this->fail('Exception was expected: '.$message);
- } catch (\Exception $exception) {
- $this->assertEquals($message, $exception->getMessage());
- }
- try {
- \OCP\Share::getItemShared('foobar', 'test.txt');
- $this->fail('Exception was expected: '.$message);
- } catch (\Exception $exception) {
- $this->assertEquals($message, $exception->getMessage());
- }
- try {
- \OCP\Share::unshare('foobar', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2);
- $this->fail('Exception was expected: '.$message);
- } catch (\Exception $exception) {
- $this->assertEquals($message, $exception->getMessage());
- }
- try {
- \OCP\Share::setPermissions('foobar', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_UPDATE);
- $this->fail('Exception was expected: '.$message);
- } catch (\Exception $exception) {
- $this->assertEquals($message, $exception->getMessage());
- }
- }
-
- protected function shareUserOneTestFileWithUserTwo() {
- \OC_User::setUserId($this->user1->getUID());
- $this->assertTrue(
- \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2->getUID(), \OCP\Constants::PERMISSION_READ),
- 'Failed asserting that user 1 successfully shared text.txt with user 2.'
- );
- $this->assertContains(
- 'test.txt',
- \OCP\Share::getItemShared('test', 'test.txt', Backend::FORMAT_SOURCE),
- 'Failed asserting that test.txt is a shared file of user 1.'
- );
-
- \OC_User::setUserId($this->user2->getUID());
- $this->assertContains(
- 'test.txt',
- \OCP\Share::getItemSharedWith('test', 'test.txt', Backend::FORMAT_SOURCE),
- 'Failed asserting that user 2 has access to test.txt after initial sharing.'
- );
- }
-
- protected function shareUserTestFileAsLink() {
- \OC_User::setUserId($this->user1->getUID());
- $result = \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_LINK, null, \OCP\Constants::PERMISSION_READ);
- $this->assertTrue(is_string($result));
- }
-
- /**
- * @param string $sharer
- * @param string $receiver
- */
- protected function shareUserTestFileWithUser($sharer, $receiver) {
- \OC_User::setUserId($sharer);
- $this->assertTrue(
- \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $receiver, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE),
- 'Failed asserting that ' . $sharer . ' successfully shared text.txt with ' . $receiver . '.'
- );
- $this->assertContains(
- 'test.txt',
- \OCP\Share::getItemShared('test', 'test.txt', Backend::FORMAT_SOURCE),
- 'Failed asserting that test.txt is a shared file of ' . $sharer . '.'
- );
-
- \OC_User::setUserId($receiver);
- $this->assertContains(
- 'test.txt',
- \OCP\Share::getItemSharedWith('test', 'test.txt', Backend::FORMAT_SOURCE),
- 'Failed asserting that ' . $receiver . ' has access to test.txt after initial sharing.'
- );
- }
-
- public function testShareWithUser() {
- // Invalid shares
- $message = 'Sharing test.txt failed, because you can not share with yourself';
- try {
- \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user1->getUID(), \OCP\Constants::PERMISSION_READ);
- $this->fail('Exception was expected: '.$message);
- } catch (\Exception $exception) {
- $this->assertEquals($message, $exception->getMessage());
- }
- $message = 'Sharing test.txt failed, because the user foobar does not exist';
- try {
- \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, 'foobar', \OCP\Constants::PERMISSION_READ);
- $this->fail('Exception was expected: '.$message);
- } catch (\Exception $exception) {
- $this->assertEquals($message, $exception->getMessage());
- }
- $message = 'Sharing foobar failed, because the sharing backend for test could not find its source';
- try {
- \OCP\Share::shareItem('test', 'foobar', \OCP\Share::SHARE_TYPE_USER, $this->user2->getUID(), \OCP\Constants::PERMISSION_READ);
- $this->fail('Exception was expected: '.$message);
- } catch (\Exception $exception) {
- $this->assertEquals($message, $exception->getMessage());
- }
-
- // Valid share
- $this->shareUserOneTestFileWithUserTwo();
-
- // Attempt to share again
- \OC_User::setUserId($this->user1->getUID());
- $message = 'Sharing test.txt failed, because this item is already shared with '.$this->user2->getUID();
- try {
- \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2->getUID(), \OCP\Constants::PERMISSION_READ);
- $this->fail('Exception was expected: '.$message);
- } catch (\Exception $exception) {
- $this->assertEquals($message, $exception->getMessage());
- }
-
- // Attempt to share back
- \OC_User::setUserId($this->user2->getUID());
- $message = 'Sharing failed, because the user '.$this->user1->getUID().' is the original sharer';
- try {
- \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user1->getUID(), \OCP\Constants::PERMISSION_READ);
- $this->fail('Exception was expected: '.$message);
- } catch (\Exception $exception) {
- $this->assertEquals($message, $exception->getMessage());
- }
-
- // Unshare
- \OC_User::setUserId($this->user1->getUID());
- $this->assertTrue(\OCP\Share::unshare('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2->getUID()));
-
- // Attempt reshare without share permission
- $this->assertTrue(\OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2->getUID(), \OCP\Constants::PERMISSION_READ));
- \OC_User::setUserId($this->user2->getUID());
- $message = 'Sharing test.txt failed, because resharing is not allowed';
- try {
- \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user3->getUID(), \OCP\Constants::PERMISSION_READ);
- $this->fail('Exception was expected: '.$message);
- } catch (\Exception $exception) {
- $this->assertEquals($message, $exception->getMessage());
- }
-
- // Owner grants share and update permission
- \OC_User::setUserId($this->user1->getUID());
- $this->assertTrue(\OCP\Share::setPermissions('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2->getUID(), \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_SHARE));
-
- // Attempt reshare with escalated permissions
- \OC_User::setUserId($this->user2->getUID());
- $message = 'Sharing test.txt failed, because the permissions exceed permissions granted to '.$this->user2->getUID();
- try {
- \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user3->getUID(), \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_DELETE);
- $this->fail('Exception was expected: '.$message);
- } catch (\Exception $exception) {
- $this->assertEquals($message, $exception->getMessage());
- }
-
- // Valid reshare
- $this->assertTrue(\OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user3->getUID(), \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE));
- $this->assertEquals(array('test.txt'), \OCP\Share::getItemShared('test', 'test.txt', Backend::FORMAT_SOURCE));
- \OC_User::setUserId($this->user3->getUID());
- $this->assertEquals(array('test.txt'), \OCP\Share::getItemSharedWith('test', 'test.txt', Backend::FORMAT_SOURCE));
- $this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE), \OCP\Share::getItemSharedWith('test', 'test.txt', Backend::FORMAT_PERMISSIONS));
-
- // Attempt to escalate permissions
- \OC_User::setUserId($this->user2->getUID());
- $message = 'Setting permissions for test.txt failed, because the permissions exceed permissions granted to '.$this->user2->getUID();
- try {
- \OCP\Share::setPermissions('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user3->getUID(), \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_DELETE);
- $this->fail('Exception was expected: '.$message);
- } catch (\Exception $exception) {
- $this->assertEquals($message, $exception->getMessage());
- }
-
- // Remove update permission
- \OC_User::setUserId($this->user1->getUID());
- $this->assertTrue(\OCP\Share::setPermissions('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2->getUID(), \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE));
- \OC_User::setUserId($this->user2->getUID());
- $this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE), \OCP\Share::getItemSharedWith('test', 'test.txt', Backend::FORMAT_PERMISSIONS));
- \OC_User::setUserId($this->user3->getUID());
- $this->assertEquals(array(\OCP\Constants::PERMISSION_READ), \OCP\Share::getItemSharedWith('test', 'test.txt', Backend::FORMAT_PERMISSIONS));
-
- // Remove share permission
- \OC_User::setUserId($this->user1->getUID());
- $this->assertTrue(\OCP\Share::setPermissions('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2->getUID(), \OCP\Constants::PERMISSION_READ));
- \OC_User::setUserId($this->user2->getUID());
- $this->assertEquals(array(\OCP\Constants::PERMISSION_READ), \OCP\Share::getItemSharedWith('test', 'test.txt', Backend::FORMAT_PERMISSIONS));
- \OC_User::setUserId($this->user3->getUID());
- $this->assertSame(array(), \OCP\Share::getItemSharedWith('test', 'test.txt'));
-
- // Reshare again, and then have owner unshare
- \OC_User::setUserId($this->user1->getUID());
- $this->assertTrue(\OCP\Share::setPermissions('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2->getUID(), \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE));
- \OC_User::setUserId($this->user2->getUID());
- $this->assertTrue(\OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user3->getUID(), \OCP\Constants::PERMISSION_READ));
- \OC_User::setUserId($this->user1->getUID());
- $this->assertTrue(\OCP\Share::unshare('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2->getUID()));
- \OC_User::setUserId($this->user2->getUID());
- $this->assertSame(array(), \OCP\Share::getItemSharedWith('test', 'test.txt'));
- \OC_User::setUserId($this->user3->getUID());
- $this->assertSame(array(), \OCP\Share::getItemSharedWith('test', 'test.txt'));
-
- // Attempt target conflict
- \OC_User::setUserId($this->user1->getUID());
- $this->assertTrue(\OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2->getUID(), \OCP\Constants::PERMISSION_READ));
- \OC_User::setUserId($this->user3->getUID());
- $this->assertTrue(\OCP\Share::shareItem('test', 'share.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2->getUID(), \OCP\Constants::PERMISSION_READ));
-
- \OC_User::setUserId($this->user2->getUID());
- $to_test = \OCP\Share::getItemsSharedWith('test', Backend::FORMAT_TARGET);
- $this->assertEquals(2, count($to_test));
- $this->assertTrue(in_array('test.txt', $to_test));
- $this->assertTrue(in_array('test1.txt', $to_test));
-
- // Unshare from self
- $this->assertTrue(\OCP\Share::unshareFromSelf('test', 'test.txt'));
- $this->assertEquals(array('test1.txt'), \OCP\Share::getItemsSharedWith('test', Backend::FORMAT_TARGET));
-
- // Unshare from self via source
- $this->assertTrue(\OCP\Share::unshareFromSelf('test', 'share.txt', true));
- $this->assertEquals(array(), \OCP\Share::getItemsSharedWith('test', Backend::FORMAT_TARGET));
-
- \OC_User::setUserId($this->user1->getUID());
- $this->assertTrue(\OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2->getUID(), \OCP\Constants::PERMISSION_READ));
- \OC_User::setUserId($this->user3->getUID());
- $this->assertTrue(\OCP\Share::shareItem('test', 'share.txt', \OCP\Share::SHARE_TYPE_USER, $this->user2->getUID(), \OCP\Constants::PERMISSION_READ));
-
- \OC_User::setUserId($this->user2->getUID());
- $to_test = \OCP\Share::getItemsSharedWith('test', Backend::FORMAT_TARGET);
- $this->assertEquals(2, count($to_test));
- $this->assertTrue(in_array('test.txt', $to_test));
- $this->assertTrue(in_array('test1.txt', $to_test));
-
- // Remove user
- \OC_User::setUserId($this->user1->getUID());
- $user = \OC::$server->getUserManager()->get($this->user1->getUID());
- if ($user !== null) { $user->delete(); }
- \OC_User::setUserId($this->user2->getUID());
- $this->assertEquals(array('test1.txt'), \OCP\Share::getItemsSharedWith('test', Backend::FORMAT_TARGET));
- }
-
- public function testShareWithUserExpirationExpired() {
- \OC_User::setUserId($this->user1->getUID());
- $this->shareUserOneTestFileWithUserTwo();
- $this->shareUserTestFileAsLink();
-
- // manipulate share table and set expire date to the past
- $query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `expiration` = ? WHERE `item_type` = ? AND `item_source` = ? AND `uid_owner` = ? AND `share_type` = ?');
- $query->bindValue(1, new \DateTime($this->dateInPast), 'datetime');
- $query->bindValue(2, 'test');
- $query->bindValue(3, 'test.txt');
- $query->bindValue(4, $this->user1->getUID());
- $query->bindValue(5, \OCP\Share::SHARE_TYPE_LINK);
- $query->execute();
-
- $shares = \OCP\Share::getItemsShared('test');
- $this->assertSame(1, count($shares));
- $share = reset($shares);
- $this->assertSame(\OCP\Share::SHARE_TYPE_USER, $share['share_type']);
- }
-
public function testGetShareFromOutsideFilesFolder() {
\OC_User::setUserId($this->user1->getUID());
$view = new \OC\Files\View('/' . $this->user1->getUID() . '/');
@@ -459,73 +183,6 @@ class ShareTest extends \Test\TestCase {
$this->assertEmpty($result, 'Share must not be returned for files outside of "files"');
}
- public function testSetExpireDateInPast() {
- \OC_User::setUserId($this->user1->getUID());
- $this->shareUserOneTestFileWithUserTwo();
- $this->shareUserTestFileAsLink();
-
- $setExpireDateFailed = false;
- try {
- $this->assertTrue(
- \OCP\Share::setExpirationDate('test', 'test.txt', $this->dateInPast, ''),
- 'Failed asserting that user 1 successfully set an expiration date for the test.txt share.'
- );
- } catch (\Exception $e) {
- $setExpireDateFailed = true;
- }
-
- $this->assertTrue($setExpireDateFailed);
- }
-
- public function testShareWithUserExpirationValid() {
- \OC_User::setUserId($this->user1->getUID());
- $this->shareUserOneTestFileWithUserTwo();
- $this->shareUserTestFileAsLink();
-
-
- $this->assertTrue(
- \OCP\Share::setExpirationDate('test', 'test.txt', $this->dateInFuture, ''),
- 'Failed asserting that user 1 successfully set an expiration date for the test.txt share.'
- );
-
- $shares = \OCP\Share::getItemsShared('test');
- $this->assertSame(2, count($shares));
-
- }
-
- /*
- * if user is in a group excluded from resharing, then the share permission should
- * be removed
- */
- public function testShareWithUserAndUserIsExcludedFromResharing() {
-
- \OC_User::setUserId($this->user1->getUID());
- $this->assertTrue(
- \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_USER, $this->user4->getUID(), \OCP\Constants::PERMISSION_ALL),
- 'Failed asserting that user 1 successfully shared text.txt with user 4.'
- );
- $this->assertContains(
- 'test.txt',
- \OCP\Share::getItemShared('test', 'test.txt', Backend::FORMAT_SOURCE),
- 'Failed asserting that test.txt is a shared file of user 1.'
- );
-
- // exclude group2 from sharing
- \OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups_list', $this->group2->getGID());
- \OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups', "yes");
-
- \OC_User::setUserId($this->user4->getUID());
-
- $share = \OCP\Share::getItemSharedWith('test', 'test.txt');
-
- $this->assertSame(\OCP\Constants::PERMISSION_ALL & ~\OCP\Constants::PERMISSION_SHARE, $share['permissions'],
- 'Failed asserting that user 4 is excluded from re-sharing');
-
- \OC::$server->getAppConfig()->deleteKey('core', 'shareapi_exclude_groups_list');
- \OC::$server->getAppConfig()->deleteKey('core', 'shareapi_exclude_groups');
-
- }
-
public function testSharingAFolderThatIsSharedWithAGroupOfTheOwner() {
\OC_User::setUserId($this->user1->getUID());
$view = new \OC\Files\View('/' . $this->user1->getUID() . '/');
@@ -595,33 +252,6 @@ class ShareTest extends \Test\TestCase {
}
}
- protected function shareUserOneTestFileWithGroupOne() {
- \OC_User::setUserId($this->user1->getUID());
- $this->assertTrue(
- \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_GROUP, $this->group1->getGID(), \OCP\Constants::PERMISSION_READ),
- 'Failed asserting that user 1 successfully shared text.txt with group 1.'
- );
- $this->assertContains(
- 'test.txt',
- \OCP\Share::getItemShared('test', 'test.txt', Backend::FORMAT_SOURCE),
- 'Failed asserting that test.txt is a shared file of user 1.'
- );
-
- \OC_User::setUserId($this->user2->getUID());
- $this->assertContains(
- 'test.txt',
- \OCP\Share::getItemSharedWith('test', 'test.txt', Backend::FORMAT_SOURCE),
- 'Failed asserting that user 2 has access to test.txt after initial sharing.'
- );
-
- \OC_User::setUserId($this->user3->getUID());
- $this->assertContains(
- 'test.txt',
- \OCP\Share::getItemSharedWith('test', 'test.txt', Backend::FORMAT_SOURCE),
- 'Failed asserting that user 3 has access to test.txt after initial sharing.'
- );
- }
-
/**
* Test that unsharing from group will also delete all
* child entries
@@ -668,40 +298,6 @@ class ShareTest extends \Test\TestCase {
}
}
- public function testShareWithGroupAndUserBothHaveTheSameId() {
-
- $this->shareUserTestFileWithUser($this->user1->getUID(), $this->groupAndUser_user->getUID());
-
- \OC_User::setUserId($this->groupAndUser_user->getUID());
-
- $this->assertEquals(array('test.txt'), \OCP\Share::getItemSharedWith('test', 'test.txt', Backend::FORMAT_SOURCE),
- '"groupAndUser"-User does not see the file but it was shared with him');
-
- \OC_User::setUserId($this->user2->getUID());
- $this->assertEquals(array(), \OCP\Share::getItemSharedWith('test', 'test.txt', Backend::FORMAT_SOURCE),
- 'User2 sees test.txt but it was only shared with the user "groupAndUser" and not with group');
-
- \OC_User::setUserId($this->user1->getUID());
- $this->assertTrue(\OCP\Share::unshareAll('test', 'test.txt'));
-
- $this->assertTrue(
- \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_GROUP, $this->groupAndUser_group->getGID(), \OCP\Constants::PERMISSION_READ),
- 'Failed asserting that user 1 successfully shared text.txt with group 1.'
- );
-
- \OC_User::setUserId($this->groupAndUser_user->getUID());
- $this->assertEquals(array(), \OCP\Share::getItemSharedWith('test', 'test.txt', Backend::FORMAT_SOURCE),
- '"groupAndUser"-User sees test.txt but it was only shared with the group "groupAndUser" and not with the user');
-
- \OC_User::setUserId($this->user2->getUID());
- $this->assertEquals(array('test.txt'), \OCP\Share::getItemSharedWith('test', 'test.txt', Backend::FORMAT_SOURCE),
- 'User2 does not see test.txt but it was shared with the group "groupAndUser"');
-
- \OC_User::setUserId($this->user1->getUID());
- $this->assertTrue(\OCP\Share::unshareAll('test', 'test.txt'));
-
- }
-
/**
* @param boolean|string $token
* @return array
@@ -841,48 +437,6 @@ class ShareTest extends \Test\TestCase {
$qb->delete('share')->execute();
}
- public function testShareItemWithLink() {
- \OC_User::setUserId($this->user1->getUID());
- $token = \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_LINK, null, \OCP\Constants::PERMISSION_READ);
- $this->assertInternalType(
- 'string',
- $token,
- 'Failed asserting that user 1 successfully shared text.txt as link with token.'
- );
-
- // testGetShareByTokenNoExpiration
- $row = $this->getShareByValidToken($token);
- $this->assertEmpty(
- $row['expiration'],
- 'Failed asserting that the returned row does not have an expiration date.'
- );
-
- // testGetShareByTokenExpirationValid
- $this->assertTrue(
- \OCP\Share::setExpirationDate('test', 'test.txt', $this->dateInFuture, ''),
- 'Failed asserting that user 1 successfully set a future expiration date for the test.txt share.'
- );
- $row = $this->getShareByValidToken($token);
- $this->assertNotEmpty(
- $row['expiration'],
- 'Failed asserting that the returned row has an expiration date.'
- );
-
- // manipulate share table and set expire date to the past
- $query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `expiration` = ? WHERE `item_type` = ? AND `item_source` = ? AND `uid_owner` = ? AND `share_type` = ?');
- $query->bindValue(1, new \DateTime($this->dateInPast), 'datetime');
- $query->bindValue(2, 'test');
- $query->bindValue(3, 'test.txt');
- $query->bindValue(4, $this->user1->getUID());
- $query->bindValue(5, \OCP\Share::SHARE_TYPE_LINK);
- $query->execute();
-
- $this->assertFalse(
- \OCP\Share::getShareByToken($token),
- 'Failed asserting that an expired share could not be found.'
- );
- }
-
public function testShareItemWithLinkAndDefaultExpireDate() {
\OC_User::setUserId($this->user1->getUID());
@@ -940,59 +494,6 @@ class ShareTest extends \Test\TestCase {
\OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_REMOTE, $remoteId, \OCP\Constants::PERMISSION_ALL);
}
- public function testUnshareAll() {
- $this->shareUserTestFileWithUser($this->user1->getUID(), $this->user2->getUID());
- $this->shareUserTestFileWithUser($this->user2->getUID(), $this->user3->getUID());
- $this->shareUserTestFileWithUser($this->user3->getUID(), $this->user4->getUID());
- $this->shareUserOneTestFileWithGroupOne();
-
- \OC_User::setUserId($this->user1->getUID());
- $this->assertEquals(
- array('test.txt', 'test.txt'),
- \OCP\Share::getItemsShared('test', Backend::FORMAT_SOURCE),
- 'Failed asserting that the test.txt file is shared exactly two times by user1.'
- );
-
- \OC_User::setUserId($this->user2->getUID());
- $this->assertEquals(
- array('test.txt'),
- \OCP\Share::getItemsShared('test', Backend::FORMAT_SOURCE),
- 'Failed asserting that the test.txt file is shared exactly once by user2.'
- );
-
- \OC_User::setUserId($this->user3->getUID());
- $this->assertEquals(
- array('test.txt'),
- \OCP\Share::getItemsShared('test', Backend::FORMAT_SOURCE),
- 'Failed asserting that the test.txt file is shared exactly once by user3.'
- );
-
- $this->assertTrue(
- \OCP\Share::unshareAll('test', 'test.txt'),
- 'Failed asserting that user 3 successfully unshared all shares of the test.txt share.'
- );
-
- $this->assertEquals(
- array(),
- \OCP\Share::getItemsShared('test'),
- 'Failed asserting that the share of the test.txt file by user 3 has been removed.'
- );
-
- \OC_User::setUserId($this->user1->getUID());
- $this->assertEquals(
- array(),
- \OCP\Share::getItemsShared('test'),
- 'Failed asserting that both shares of the test.txt file by user 1 have been removed.'
- );
-
- \OC_User::setUserId($this->user2->getUID());
- $this->assertEquals(
- array(),
- \OCP\Share::getItemsShared('test'),
- 'Failed asserting that the share of the test.txt file by user 2 has been removed.'
- );
- }
-
/**
* @dataProvider checkPasswordProtectedShareDataProvider
* @param $expected
@@ -1166,324 +667,6 @@ class ShareTest extends \Test\TestCase {
}
/**
- * Ensure that we do not allow removing a an expiration date from a link share if this
- * is enforced by the settings.
- */
- public function testClearExpireDateWhileEnforced() {
- \OC_User::setUserId($this->user1->getUID());
-
- \OC::$server->getAppConfig()->setValue('core', 'shareapi_default_expire_date', 'yes');
- \OC::$server->getAppConfig()->setValue('core', 'shareapi_expire_after_n_days', '2');
- \OC::$server->getAppConfig()->setValue('core', 'shareapi_enforce_expire_date', 'yes');
-
- $token = \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_LINK, null, \OCP\Constants::PERMISSION_READ);
- $this->assertInternalType(
- 'string',
- $token,
- 'Failed asserting that user 1 successfully shared text.txt as link with token.'
- );
-
- $setExpireDateFailed = false;
- try {
- $this->assertTrue(
- \OCP\Share::setExpirationDate('test', 'test.txt', '', ''),
- 'Failed asserting that user 1 successfully set an expiration date for the test.txt share.'
- );
- } catch (\Exception $e) {
- $setExpireDateFailed = true;
- }
-
- $this->assertTrue($setExpireDateFailed);
-
- \OC::$server->getAppConfig()->deleteKey('core', 'shareapi_default_expire_date');
- \OC::$server->getAppConfig()->deleteKey('core', 'shareapi_expire_after_n_days');
- \OC::$server->getAppConfig()->deleteKey('core', 'shareapi_enforce_expire_date');
- }
-
- /**
- * Cannot set password is there is no user
- *
- * @expectedException \Exception
- * @expectedExceptionMessage User not logged in
- */
- public function testSetPasswordNoUser() {
- $userSession = $this->getMockBuilder('\OCP\IUserSession')
- ->disableOriginalConstructor()
- ->getMock();
-
- $connection = $this->getMockBuilder('\OC\DB\Connection')
- ->disableOriginalConstructor()
- ->getMock();
-
- $config = $this->getMockBuilder('\OCP\IConfig')
- ->disableOriginalConstructor()
- ->getMock();
-
- \OC\Share\Share::setPassword($userSession, $connection, $config, 1, 'pass');
- }
-
- public function testPasswords() {
- $pass = 'secret';
-
- $this->shareUserTestFileAsLink();
-
- $userSession = \OC::$server->getUserSession();
- $connection = \OC::$server->getDatabaseConnection();
- $config = $this->getMockBuilder('\OCP\IConfig')
- ->disableOriginalConstructor()
- ->getMock();
-
- // Find the share ID in the db
- $qb = $connection->getQueryBuilder();
- $qb->select('id')
- ->from('share')
- ->where($qb->expr()->eq('item_type', $qb->createParameter('type')))
- ->andWhere($qb->expr()->eq('item_source', $qb->createParameter('source')))
- ->andWhere($qb->expr()->eq('uid_owner', $qb->createParameter('owner')))
- ->andWhere($qb->expr()->eq('share_type', $qb->createParameter('share_type')))
- ->setParameter('type', 'test')
- ->setParameter('source', 'test.txt')
- ->setParameter('owner', $this->user1->getUID())
- ->setParameter('share_type', \OCP\Share::SHARE_TYPE_LINK);
-
- $result = $qb->execute();
- $res = $result->fetchAll();
- $result->closeCursor();
- $this->assertCount(1, $res);
- $id = $res[0]['id'];
-
- // Set password on share
- $res = \OC\Share\Share::setPassword($userSession, $connection, $config, $id, $pass);
- $this->assertTrue($res);
-
- // Fetch the hash from the database
- $qb = $connection->getQueryBuilder();
- $qb->select('share_with')
- ->from('share')
- ->where($qb->expr()->eq('id', $qb->createParameter('id')))
- ->setParameter('id', $id);
- $result = $qb->execute();
- $hash = $result->fetch()['share_with'];
- $result->closeCursor();
-
- $hasher = \OC::$server->getHasher();
-
- // Verify hash
- $this->assertTrue($hasher->verify($pass, $hash));
- }
-
- /**
- * Test setting a password when everything is fine
- */
- public function testSetPassword() {
- $user = $this->getMockBuilder('\OCP\IUser')
- ->disableOriginalConstructor()
- ->getMock();
- $user->method('getUID')->willReturn('user');
-
- $userSession = $this->getMockBuilder('\OCP\IUserSession')
- ->disableOriginalConstructor()
- ->getMock();
- $userSession->method('getUser')->willReturn($user);
-
-
- $ex = $this->getMockBuilder('\OC\DB\QueryBuilder\ExpressionBuilder\ExpressionBuilder')
- ->disableOriginalConstructor()
- ->getMock();
- $qb = $this->getMockBuilder('\OC\DB\QueryBuilder\QueryBuilder')
- ->disableOriginalConstructor()
- ->getMock();
- $qb->method('update')->will($this->returnSelf());
- $qb->method('set')->will($this->returnSelf());
- $qb->method('where')->will($this->returnSelf());
- $qb->method('andWhere')->will($this->returnSelf());
- $qb->method('select')->will($this->returnSelf());
- $qb->method('from')->will($this->returnSelf());
- $qb->method('setParameter')->will($this->returnSelf());
- $qb->method('expr')->willReturn($ex);
-
- $ret = $this->getMockBuilder('\Doctrine\DBAL\Driver\ResultStatement')
- ->disableOriginalConstructor()
- ->getMock();
- $ret->method('fetch')->willReturn(['uid_owner' => 'user']);
- $qb->method('execute')->willReturn($ret);
-
-
- $connection = $this->getMockBuilder('\OC\DB\Connection')
- ->disableOriginalConstructor()
- ->getMock();
- $connection->method('getQueryBuilder')->willReturn($qb);
-
- $config = $this->getMockBuilder('\OCP\IConfig')
- ->disableOriginalConstructor()
- ->getMock();
-
-
- $res = \OC\Share\Share::setPassword($userSession, $connection, $config, 1, 'pass');
-
- $this->assertTrue($res);
- }
-
- /**
- * @expectedException \Exception
- * @expectedExceptionMessage Cannot remove password
- *
- * Test removing a password when password is enforced
- */
- public function testSetPasswordRemove() {
- $user = $this->getMockBuilder('\OCP\IUser')
- ->disableOriginalConstructor()
- ->getMock();
- $user->method('getUID')->willReturn('user');
-
- $userSession = $this->getMockBuilder('\OCP\IUserSession')
- ->disableOriginalConstructor()
- ->getMock();
- $userSession->method('getUser')->willReturn($user);
-
-
- $ex = $this->getMockBuilder('\OC\DB\QueryBuilder\ExpressionBuilder\ExpressionBuilder')
- ->disableOriginalConstructor()
- ->getMock();
- $qb = $this->getMockBuilder('\OC\DB\QueryBuilder\QueryBuilder')
- ->disableOriginalConstructor()
- ->getMock();
- $qb->method('update')->will($this->returnSelf());
- $qb->method('select')->will($this->returnSelf());
- $qb->method('from')->will($this->returnSelf());
- $qb->method('set')->will($this->returnSelf());
- $qb->method('where')->will($this->returnSelf());
- $qb->method('andWhere')->will($this->returnSelf());
- $qb->method('setParameter')->will($this->returnSelf());
- $qb->method('expr')->willReturn($ex);
-
- $ret = $this->getMockBuilder('\Doctrine\DBAL\Driver\ResultStatement')
- ->disableOriginalConstructor()
- ->getMock();
- $ret->method('fetch')->willReturn(['uid_owner' => 'user']);
- $qb->method('execute')->willReturn($ret);
-
-
- $connection = $this->getMockBuilder('\OC\DB\Connection')
- ->disableOriginalConstructor()
- ->getMock();
- $connection->method('getQueryBuilder')->willReturn($qb);
-
- $config = $this->getMockBuilder('\OCP\IConfig')
- ->disableOriginalConstructor()
- ->getMock();
- $config->method('getAppValue')->willReturn('yes');
-
- \OC\Share\Share::setPassword($userSession, $connection, $config, 1, '');
- }
-
- /**
- * @expectedException \Exception
- * @expectedExceptionMessage Share not found
- *
- * Test modification of invaid share
- */
- public function testSetPasswordInvalidShare() {
- $user = $this->getMockBuilder('\OCP\IUser')
- ->disableOriginalConstructor()
- ->getMock();
- $user->method('getUID')->willReturn('user');
-
- $userSession = $this->getMockBuilder('\OCP\IUserSession')
- ->disableOriginalConstructor()
- ->getMock();
- $userSession->method('getUser')->willReturn($user);
-
-
- $ex = $this->getMockBuilder('\OC\DB\QueryBuilder\ExpressionBuilder\ExpressionBuilder')
- ->disableOriginalConstructor()
- ->getMock();
- $qb = $this->getMockBuilder('\OC\DB\QueryBuilder\QueryBuilder')
- ->disableOriginalConstructor()
- ->getMock();
- $qb->method('update')->will($this->returnSelf());
- $qb->method('set')->will($this->returnSelf());
- $qb->method('where')->will($this->returnSelf());
- $qb->method('andWhere')->will($this->returnSelf());
- $qb->method('select')->will($this->returnSelf());
- $qb->method('from')->will($this->returnSelf());
- $qb->method('setParameter')->will($this->returnSelf());
- $qb->method('expr')->willReturn($ex);
-
- $ret = $this->getMockBuilder('\Doctrine\DBAL\Driver\ResultStatement')
- ->disableOriginalConstructor()
- ->getMock();
- $ret->method('fetch')->willReturn([]);
- $qb->method('execute')->willReturn($ret);
-
-
- $connection = $this->getMockBuilder('\OC\DB\Connection')
- ->disableOriginalConstructor()
- ->getMock();
- $connection->method('getQueryBuilder')->willReturn($qb);
-
- $config = $this->getMockBuilder('\OCP\IConfig')
- ->disableOriginalConstructor()
- ->getMock();
-
-
- \OC\Share\Share::setPassword($userSession, $connection, $config, 1, 'pass');
- }
-
- /**
- * @expectedException \Exception
- * @expectedExceptionMessage Cannot update share of a different user
- *
- * Test modification of share of another user
- */
- public function testSetPasswordShareOtherUser() {
- $user = $this->getMockBuilder('\OCP\IUser')
- ->disableOriginalConstructor()
- ->getMock();
- $user->method('getUID')->willReturn('user');
-
- $userSession = $this->getMockBuilder('\OCP\IUserSession')
- ->disableOriginalConstructor()
- ->getMock();
- $userSession->method('getUser')->willReturn($user);
-
-
- $ex = $this->getMockBuilder('\OC\DB\QueryBuilder\ExpressionBuilder\ExpressionBuilder')
- ->disableOriginalConstructor()
- ->getMock();
- $qb = $this->getMockBuilder('\OC\DB\QueryBuilder\QueryBuilder')
- ->disableOriginalConstructor()
- ->getMock();
- $qb->method('update')->will($this->returnSelf());
- $qb->method('set')->will($this->returnSelf());
- $qb->method('where')->will($this->returnSelf());
- $qb->method('andWhere')->will($this->returnSelf());
- $qb->method('select')->will($this->returnSelf());
- $qb->method('from')->will($this->returnSelf());
- $qb->method('setParameter')->will($this->returnSelf());
- $qb->method('expr')->willReturn($ex);
-
- $ret = $this->getMockBuilder('\Doctrine\DBAL\Driver\ResultStatement')
- ->disableOriginalConstructor()
- ->getMock();
- $ret->method('fetch')->willReturn(['uid_owner' => 'user2']);
- $qb->method('execute')->willReturn($ret);
-
-
- $connection = $this->getMockBuilder('\OC\DB\Connection')
- ->disableOriginalConstructor()
- ->getMock();
- $connection->method('getQueryBuilder')->willReturn($qb);
-
- $config = $this->getMockBuilder('\OCP\IConfig')
- ->disableOriginalConstructor()
- ->getMock();
-
-
- \OC\Share\Share::setPassword($userSession, $connection, $config, 1, 'pass');
- }
-
- /**
* Make sure that a user cannot have multiple identical shares to remote users
*/
public function testOnlyOneRemoteShare() {
@@ -1519,44 +702,6 @@ class ShareTest extends \Test\TestCase {
}
/**
- * Test case for #19119
- */
- public function testReshareWithLinkDefaultExpirationDate() {
- $config = \OC::$server->getConfig();
- $config->setAppValue('core', 'shareapi_default_expire_date', 'yes');
- $config->setAppValue('core', 'shareapi_expire_after_n_days', '2');
-
- // Expiration date
- $expireAt = time() + 2 * 24*60*60;
- $date = new \DateTime();
- $date->setTimestamp($expireAt);
- $date->setTime(0, 0, 0);
-
- //Share a file from user 1 to user 2
- $this->shareUserTestFileWithUser($this->user1->getUID(), $this->user2->getUID());
-
- //User 2 shares as link
- \OC_User::setUserId($this->user2->getUID());
- $result = \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_LINK, null, \OCP\Constants::PERMISSION_READ);
- $this->assertTrue(is_string($result));
-
- //Check if expire date is correct
- $result = \OCP\Share::getItemShared('test', 'test.txt');
- $this->assertCount(1, $result);
- $result = reset($result);
- $this->assertNotEmpty($result['expiration']);
- $expireDate = new \DateTime($result['expiration']);
- $this->assertEquals($date, $expireDate);
-
- //Unshare
- $this->assertTrue(\OCP\Share::unshareAll('test', 'test.txt'));
-
- //Reset config
- $config->deleteAppValue('core', 'shareapi_default_expire_date');
- $config->deleteAppValue('core', 'shareapi_expire_after_n_days');
- }
-
- /**
* Test case for #17560
*/
public function testAccesToSharedSubFolder() {
@@ -1652,31 +797,6 @@ class ShareTest extends \Test\TestCase {
$this->assertEquals('Sharing failed, because the user ' . $this->user1->getUID() . ' is the original sharer', $e->getMessage());
}
}
-
- /**
- * @expectedException \OC\User\NoUserException
- * @expectedExceptionMessage Backends provided no user object
- */
- public function testGetUsersSharingFileWithException() {
- $userManager = $this->createMock(IUserManager::class);
- $logger = $this->createMock(ILogger::class);
- $userManager
- ->expects($this->once())
- ->method('get')
- ->with('test')
- ->willReturn(null);
- $logger
- ->expects($this->once())
- ->method('error')
- ->with(
- 'Backends provided no user object for test',
- [
- 'app' => 'files',
- ]
- );
-
- Share::getUsersSharingFile('/my/file/path', 'test', $userManager, $logger);
- }
}
class DummyShareClass extends \OC\Share\Share {