diff options
author | Morris Jobke <hey@morrisjobke.de> | 2017-08-15 10:03:21 +0200 |
---|---|---|
committer | Morris Jobke <hey@morrisjobke.de> | 2017-08-15 10:09:47 +0200 |
commit | f640b56bfac72d2c3fd394fe6564e93020243b7f (patch) | |
tree | 7649aea33898034cd1784d2250380e175c525591 | |
parent | e0f479a4eb7f297dbe5156b16f42b896c4ceadd4 (diff) | |
download | nextcloud-server-f640b56bfac72d2c3fd394fe6564e93020243b7f.tar.gz nextcloud-server-f640b56bfac72d2c3fd394fe6564e93020243b7f.zip |
Cleanup unused methods
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
-rw-r--r-- | apps/files_sharing/tests/ApiTest.php | 63 | ||||
-rw-r--r-- | lib/private/Share/Share.php | 677 | ||||
-rw-r--r-- | lib/private/Template/JSConfigHelper.php | 2 | ||||
-rw-r--r-- | lib/public/Share.php | 162 | ||||
-rw-r--r-- | tests/lib/Share/ShareTest.php | 880 |
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 { |