aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2024-03-06 18:02:03 +0100
committerGitHub <noreply@github.com>2024-03-06 18:02:03 +0100
commit702c679cfae44563519d53f101e1d58d6e1ba240 (patch)
tree291e010bc7914bccd70dfd3ea413576e7af8470a /lib
parent476c400c2df213174c47abbbccab2413e5394955 (diff)
parenta598de627c65b1a9774d1bda1826f7b15f2bfd0b (diff)
downloadnextcloud-server-702c679cfae44563519d53f101e1d58d6e1ba240.tar.gz
nextcloud-server-702c679cfae44563519d53f101e1d58d6e1ba240.zip
Merge pull request #44000 from nextcloud/more-sharing-cleaup
cleanup: remove long depricated share code
Diffstat (limited to 'lib')
-rw-r--r--lib/private/Share/Share.php309
-rw-r--r--lib/public/Share.php94
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
- }
}