diff options
author | Robin Appelman <robin@icewind.nl> | 2024-03-05 14:55:22 +0100 |
---|---|---|
committer | Robin Appelman <robin@icewind.nl> | 2024-03-06 15:24:48 +0100 |
commit | a598de627c65b1a9774d1bda1826f7b15f2bfd0b (patch) | |
tree | 84a71be90f5412513aa53d22b4e2125e7752edb7 /lib | |
parent | c651e06a6d1296cbca03a706d9cded707e70af74 (diff) | |
download | nextcloud-server-a598de627c65b1a9774d1bda1826f7b15f2bfd0b.tar.gz nextcloud-server-a598de627c65b1a9774d1bda1826f7b15f2bfd0b.zip |
chore: remove long depricated share code
Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/Share/Share.php | 309 | ||||
-rw-r--r-- | lib/public/Share.php | 94 |
2 files changed, 1 insertions, 402 deletions
diff --git a/lib/private/Share/Share.php b/lib/private/Share/Share.php index fb1cd50d94a..54e0eb72662 100644 --- a/lib/private/Share/Share.php +++ b/lib/private/Share/Share.php @@ -36,10 +36,6 @@ namespace OC\Share; use OCA\Files_Sharing\ShareBackend\File; -use OCP\DB\Exception; -use OCP\DB\QueryBuilder\IQueryBuilder; -use OCP\IDBConnection; -use OCP\Share\IShare; use Psr\Log\LoggerInterface; /** @@ -94,107 +90,6 @@ class Share extends Constants { } /** - * Get the item of item type shared with a given user by source - * - * @param string $itemType - * @param string $itemSource - * @param ?string $user User to whom the item was shared - * @param ?string $owner Owner of the share - * @param ?int $shareType only look for a specific share type - * @return array Return list of items with file_target, permissions and expiration - * @throws Exception - */ - public static function getItemSharedWithUser(string $itemType, string $itemSource, ?string $user = null, ?string $owner = null, ?int $shareType = null) { - $shares = []; - $fileDependent = $itemType === 'file' || $itemType === 'folder'; - $qb = self::getSelectStatement(self::FORMAT_NONE, $fileDependent); - $qb->from('share', 's'); - if ($fileDependent) { - $qb->innerJoin('s', 'filecache', 'f', $qb->expr()->eq('file_source', 'f.fileid')); - $qb->innerJoin('s', 'storages', 'st', $qb->expr()->eq('numeric_id', 'f.storage')); - $column = 'file_source'; - } else { - $column = 'item_source'; - } - - $qb->where($qb->expr()->eq($column, $qb->createNamedParameter($itemSource))) - ->andWhere($qb->expr()->eq('item_type', $qb->createNamedParameter($itemType))); - - // for link shares $user === null - if ($user !== null) { - $qb->andWhere($qb->expr()->eq('share_with', $qb->createNamedParameter($user))); - } - - if ($shareType !== null) { - $qb->andWhere($qb->expr()->eq('share_type', $qb->createNamedParameter($shareType, IQueryBuilder::PARAM_INT))); - } - - if ($owner !== null) { - $qb->andWhere($qb->expr()->eq('uid_owner', $qb->createNamedParameter($owner))); - } - - $result = $qb->executeQuery(); - while ($row = $result->fetch()) { - if ($fileDependent && !self::isFileReachable($row['path'], $row['storage_id'])) { - continue; - } - if ($fileDependent && (int)$row['file_parent'] === -1) { - // if it is a mount point we need to get the path from the mount manager - $mountManager = \OC\Files\Filesystem::getMountManager(); - $mountPoint = $mountManager->findByStorageId($row['storage_id']); - if (!empty($mountPoint)) { - $path = $mountPoint[0]->getMountPoint(); - $path = trim($path, '/'); - $path = substr($path, strlen($owner) + 1); //normalize path to 'files/foo.txt` - $row['path'] = $path; - } else { - \OC::$server->get(LoggerInterface::class)->warning( - 'Could not resolve mount point for ' . $row['storage_id'], - ['app' => 'OCP\Share'] - ); - } - } - $shares[] = $row; - } - $result->closeCursor(); - - // if we didn't found a result then let's look for a group share. - if (empty($shares) && $user !== null) { - $userObject = \OC::$server->getUserManager()->get($user); - $groups = []; - if ($userObject) { - $groups = \OC::$server->getGroupManager()->getUserGroupIds($userObject); - } - - if (!empty($groups)) { - $qb = self::getSelectStatement(self::FORMAT_NONE, $fileDependent); - $qb->from('share', 's'); - - if ($fileDependent) { - $qb->innerJoin('s', 'filecache', 'f', $qb->expr()->eq('file_source', 'f.fileid')) - ->innerJoin('s', 'storages', 'st', $qb->expr()->eq('numeric_id', 'f.storage')); - } - - $qb->where($qb->expr()->eq($column, $qb->createNamedParameter($itemSource))) - ->andWhere($qb->expr()->eq('item_type', $qb->createNamedParameter($itemType, IQueryBuilder::PARAM_STR))) - ->andWhere($qb->expr()->in('share_with', $qb->createNamedParameter($groups, IQueryBuilder::PARAM_STR_ARRAY))); - - if ($owner !== null) { - $qb->andWhere($qb->expr()->eq('uid_owner', $qb->createNamedParameter($owner))); - } - $result = $qb->executeQuery(); - - while ($row = $result->fetch()) { - $shares[] = $row; - } - $result->closeCursor(); - } - } - - return $shares; - } - - /** * Get the backend class for the specified item type * * @param string $itemType @@ -288,185 +183,6 @@ class Share extends Constants { } /** - * Construct select statement - * - * @param bool $fileDependent ist it a file/folder share or a general share - */ - private static function getSelectStatement(int $format, bool $fileDependent, ?string $uidOwner = null): IQueryBuilder { - /** @var IDBConnection $connection */ - $connection = \OC::$server->get(IDBConnection::class); - $qb = $connection->getQueryBuilder(); - if ($format == self::FORMAT_STATUSES) { - if ($fileDependent) { - return $qb->select( - 's.id', - 's.parent', - 'share_type', - 'path', - 'storage', - 'share_with', - 'uid_owner', - 'file_source', - 'stime', - 's.permissions', - 'uid_initiator' - )->selectAlias('st.id', 'storage_id') - ->selectAlias('f.parent', 'file_parent'); - } - return $qb->select('id', 'parent', 'share_type', 'share_with', 'uid_owner', 'item_source', 'stime', 's.permissions'); - } - - if (isset($uidOwner)) { - if ($fileDependent) { - return $qb->select( - 's.id', - 'item_type', - 'item_source', - 's.parent', - 'share_type', - 'share_with', - 'file_source', - 'file_target', - 'path', - 's.permissions', - 'stime', - 'expiration', - 'token', - 'storage', - 'mail_send', - 'uid_owner', - 'uid_initiator' - )->selectAlias('st.id', 'storage_id') - ->selectAlias('f.parent', 'file_parent'); - } - return $qb->select('id', 'item_type', 'item_source', 'parent', 'share_type', - 'share_with', 'uid_owner', 'file_source', 'stime', 's.permissions', - 'expiration', 'token', 'mail_send'); - } - - if ($fileDependent) { - if ($format == File::FORMAT_GET_FOLDER_CONTENTS || $format == File::FORMAT_FILE_APP_ROOT) { - return $qb->select( - 's.id', - 'item_type', - 'item_source', - 's.parent', - 'uid_owner', - 'share_type', - 'share_with', - 'file_source', - 'path', - 'file_target', - 's.permissions', - 'stime', - 'expiration', - 'storage', - 'name', - 'mtime', - 'mimepart', - 'size', - 'encrypted', - 'etag', - 'mail_send' - )->selectAlias('f.parent', 'file_parent'); - } - return $qb->select( - 's.id', - 'item_type', - 'item_source', - 'item_target', - 's.parent', - 'share_type', - 'share_with', - 'uid_owner', - 'file_source', - 'path', - 'file_target', - 's.permissions', - 'stime', - 'expiration', - 'token', - 'storage', - 'mail_send', - )->selectAlias('f.parent', 'file_parent') - ->selectAlias('st.id', 'storage_id'); - } - return $qb->select('*'); - } - - - /** - * transform db results - * - * @param array $row result - */ - private static function transformDBResults(&$row) { - if (isset($row['id'])) { - $row['id'] = (int)$row['id']; - } - if (isset($row['share_type'])) { - $row['share_type'] = (int)$row['share_type']; - } - if (isset($row['parent'])) { - $row['parent'] = (int)$row['parent']; - } - if (isset($row['file_parent'])) { - $row['file_parent'] = (int)$row['file_parent']; - } - if (isset($row['file_source'])) { - $row['file_source'] = (int)$row['file_source']; - } - if (isset($row['permissions'])) { - $row['permissions'] = (int)$row['permissions']; - } - if (isset($row['storage'])) { - $row['storage'] = (int)$row['storage']; - } - if (isset($row['stime'])) { - $row['stime'] = (int)$row['stime']; - } - if (isset($row['expiration']) && $row['share_type'] !== IShare::TYPE_LINK) { - // discard expiration date for non-link shares, which might have been - // set by ancient bugs - $row['expiration'] = null; - } - } - - /** - * format result - * - * @param array $items result - * @param string $column is it a file share or a general share ('file_target' or 'item_target') - * @param \OCP\Share_Backend $backend sharing backend - * @param int $format - * @param array $parameters additional format parameters - * @return array format result - */ - private static function formatResult($items, $column, $backend, $format = self::FORMAT_NONE, $parameters = null) { - if ($format === self::FORMAT_NONE) { - return $items; - } elseif ($format === self::FORMAT_STATUSES) { - $statuses = []; - foreach ($items as $item) { - if ($item['share_type'] === IShare::TYPE_LINK) { - if ($item['uid_initiator'] !== \OC::$server->getUserSession()->getUser()->getUID()) { - continue; - } - $statuses[$item[$column]]['link'] = true; - } elseif (!isset($statuses[$item[$column]])) { - $statuses[$item[$column]]['link'] = false; - } - if (!empty($item['file_target'])) { - $statuses[$item[$column]]['path'] = $item['path']; - } - } - return $statuses; - } else { - return $backend->formatItems($items, $format, $parameters); - } - } - - /** * remove protocol from URL * * @param string $url @@ -489,29 +205,4 @@ class Share extends Constants { public static function getExpireInterval() { return (int)\OC::$server->getConfig()->getAppValue('core', 'shareapi_expire_after_n_days', '7'); } - - /** - * Checks whether the given path is reachable for the given owner - * - * @param string $path path relative to files - * @param string $ownerStorageId storage id of the owner - * - * @return boolean true if file is reachable, false otherwise - */ - private static function isFileReachable($path, $ownerStorageId) { - // if outside the home storage, file is always considered reachable - if (!(substr($ownerStorageId, 0, 6) === 'home::' || - substr($ownerStorageId, 0, 13) === 'object::user:' - )) { - return true; - } - - // if inside the home storage, the file has to be under "/files/" - $path = ltrim($path, '/'); - if (substr($path, 0, 6) === 'files/') { - return true; - } - - return false; - } } diff --git a/lib/public/Share.php b/lib/public/Share.php index 9e0ef96a158..2004f77cf0a 100644 --- a/lib/public/Share.php +++ b/lib/public/Share.php @@ -33,8 +33,7 @@ namespace OCP; /** - * This class provides the ability for apps to share their content between users. - * Apps must create a backend class that implements OCP\Share_Backend and register it with this class. + * This class remains only for use with the ::class namespace used for various hooks * * It provides the following hooks: * - post_shared @@ -42,95 +41,4 @@ namespace OCP; * @deprecated 17.0.0 */ class Share extends \OC\Share\Constants { - /** - * Get the item of item type shared with a given user by source - * @param string $itemType - * @param string $itemSource - * @param string $user User to whom the item was shared - * @param string $owner Owner of the share - * @return array Return list of items with file_target, permissions and expiration - * @since 6.0.0 - parameter $owner was added in 8.0.0 - * @deprecated 17.0.0 - */ - public static function getItemSharedWithUser($itemType, $itemSource, $user, $owner = null) { - return \OC\Share\Share::getItemSharedWithUser($itemType, $itemSource, $user, $owner); - } - - /** - * Get the item of item type shared with the current user by source - * @param string $itemType - * @param string $itemSource - * @param int $format (optional) Format type must be defined by the backend - * @param mixed $parameters - * @param bool $includeCollections - * @return void - * @since 5.0.0 - * @deprecated 17.0.0 - */ - public static function getItemSharedWithBySource($itemType, $itemSource, $format = self::FORMAT_NONE, - $parameters = null, $includeCollections = false) { - // not used by any app - only here to not break apps syntax - } - - /** - * Based on the given token the share information will be returned - password protected shares will be verified - * @param string $token - * @param bool $checkPasswordProtection - * @return void - * @since 5.0.0 - parameter $checkPasswordProtection was added in 7.0.0 - * @deprecated 17.0.0 - */ - public static function getShareByToken($token, $checkPasswordProtection = true) { - // not used by any app - only here to not break apps syntax - } - - - /** - * Get the shared items of item type owned by the current user - * @param string $itemType - * @param int $format (optional) Format type must be defined by the backend - * @param mixed $parameters - * @param int $limit Number of items to return (optional) Returns all by default - * @param bool $includeCollections - * @return void - * @since 5.0.0 - * @deprecated 17.0.0 - */ - public static function getItemsShared($itemType, $format = self::FORMAT_NONE, $parameters = null, - $limit = -1, $includeCollections = false) { - // only used by AppVNCSafe app (https://github.com/vnc-biz/nextcloud-appvncsafe/issues/2) - only here to not break apps syntax - } - - /** - * Get the shared item of item type owned by the current user - * @param string $itemType - * @param string $itemSource - * @param int $format (optional) Format type must be defined by the backend - * @param mixed $parameters - * @param bool $includeCollections - * @return void - * @since 5.0.0 - * @deprecated 17.0.0 - * - * Refactoring notes: - * * defacto $parameters and $format is always the default and therefore is removed in the subsequent call - */ - public static function getItemShared($itemType, $itemSource, $format = self::FORMAT_NONE, - $parameters = null, $includeCollections = false) { - // not used by any app - only here to not break apps syntax - } - - /** - * sent status if users got informed by mail about share - * @param string $itemType - * @param string $itemSource - * @param int $shareType SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_LINK - * @param string $recipient with whom was the item shared - * @param bool $status - * @since 6.0.0 - parameter $originIsSource was added in 8.0.0 - * @deprecated 17.0.0 - */ - public static function setSendMailStatus($itemType, $itemSource, $shareType, $recipient, $status) { - // not used by any app - only here to not break apps syntax - } } |