c3e7d324c5
The data from the share_external is not to much. Thus we enrich this data with info from the filecache. This allows endpoints using this to actually show usefull information. The filecache might not be up to date but that is a sacrifice we need to make in terms of speed. Else the number of remote PROPFINDS grows lineary with the number of remote shares wich will make this endpoint practically unusable.
190 lines
5.1 KiB
PHP
190 lines
5.1 KiB
PHP
<?php
|
|
/**
|
|
* @author Joas Schilling <nickvergessen@owncloud.com>
|
|
*
|
|
* @copyright Copyright (c) 2015, ownCloud, Inc.
|
|
* @license AGPL-3.0
|
|
*
|
|
* This code is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License, version 3,
|
|
* as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License, version 3,
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
|
*
|
|
*/
|
|
|
|
namespace OCA\Files_Sharing\API;
|
|
|
|
use OC\Files\Filesystem;
|
|
use OCA\Files_Sharing\External\Manager;
|
|
|
|
class Remote {
|
|
|
|
/**
|
|
* Get list of pending remote shares
|
|
*
|
|
* @param array $params empty
|
|
* @return \OC_OCS_Result
|
|
*/
|
|
public static function getOpenShares($params) {
|
|
$externalManager = new Manager(
|
|
\OC::$server->getDatabaseConnection(),
|
|
Filesystem::getMountManager(),
|
|
Filesystem::getLoader(),
|
|
\OC::$server->getHTTPHelper(),
|
|
\OC::$server->getNotificationManager(),
|
|
\OC_User::getUser()
|
|
);
|
|
|
|
return new \OC_OCS_Result($externalManager->getOpenShares());
|
|
}
|
|
|
|
/**
|
|
* Accept a remote share
|
|
*
|
|
* @param array $params contains the shareID 'id' which should be accepted
|
|
* @return \OC_OCS_Result
|
|
*/
|
|
public static function acceptShare($params) {
|
|
$externalManager = new Manager(
|
|
\OC::$server->getDatabaseConnection(),
|
|
Filesystem::getMountManager(),
|
|
Filesystem::getLoader(),
|
|
\OC::$server->getHTTPHelper(),
|
|
\OC::$server->getNotificationManager(),
|
|
\OC_User::getUser()
|
|
);
|
|
|
|
if ($externalManager->acceptShare($params['id'])) {
|
|
return new \OC_OCS_Result();
|
|
}
|
|
|
|
return new \OC_OCS_Result(null, 404, "wrong share ID, share doesn't exist.");
|
|
}
|
|
|
|
/**
|
|
* Decline a remote share
|
|
*
|
|
* @param array $params contains the shareID 'id' which should be declined
|
|
* @return \OC_OCS_Result
|
|
*/
|
|
public static function declineShare($params) {
|
|
$externalManager = new Manager(
|
|
\OC::$server->getDatabaseConnection(),
|
|
Filesystem::getMountManager(),
|
|
Filesystem::getLoader(),
|
|
\OC::$server->getHTTPHelper(),
|
|
\OC::$server->getNotificationManager(),
|
|
\OC_User::getUser()
|
|
);
|
|
|
|
if ($externalManager->declineShare($params['id'])) {
|
|
return new \OC_OCS_Result();
|
|
}
|
|
|
|
return new \OC_OCS_Result(null, 404, "wrong share ID, share doesn't exist.");
|
|
}
|
|
|
|
/**
|
|
* @param array $share Share with info from the share_external table
|
|
* @return enriched share info with data from the filecache
|
|
*/
|
|
private static function extendShareInfo($share) {
|
|
$view = new \OC\Files\View('/' . \OC_User::getUser() . '/files/');
|
|
$info = $view->getFileInfo($shares['mountpoint']);
|
|
|
|
$share['mimetype'] = $info->getMimetype();
|
|
$share['mtime'] = $info->getMtime();
|
|
$share['permissions'] = $info->getPermissions();
|
|
$share['type'] = $info->getType();
|
|
$share['file_id'] = $info->getId();
|
|
|
|
return $share;
|
|
}
|
|
|
|
/**
|
|
* List accepted remote shares
|
|
*
|
|
* @param array $params
|
|
* @return \OC_OCS_Result
|
|
*/
|
|
public static function getShares($params) {
|
|
$externalManager = new Manager(
|
|
\OC::$server->getDatabaseConnection(),
|
|
Filesystem::getMountManager(),
|
|
Filesystem::getLoader(),
|
|
\OC::$server->getHTTPHelper(),
|
|
\OC::$server->getNotificationManager(),
|
|
\OC_User::getUser()
|
|
);
|
|
|
|
$shares = $externalManager->getAcceptedShares();
|
|
|
|
$shares = array_map('self::extendShareInfo', $shares);
|
|
|
|
return new \OC_OCS_Result($shares);
|
|
}
|
|
|
|
/**
|
|
* Get info of a remote share
|
|
*
|
|
* @param array $params contains the shareID 'id'
|
|
* @return \OC_OCS_Result
|
|
*/
|
|
public static function getShare($params) {
|
|
$externalManager = new Manager(
|
|
\OC::$server->getDatabaseConnection(),
|
|
Filesystem::getMountManager(),
|
|
Filesystem::getLoader(),
|
|
\OC::$server->getHTTPHelper(),
|
|
\OC::$server->getNotificationManager(),
|
|
\OC_User::getUser()
|
|
);
|
|
|
|
$shareInfo = $externalManager->getShare($params['id']);
|
|
|
|
if ($shareInfo === false) {
|
|
return new \OC_OCS_Result(null, 404, 'share does not exist');
|
|
} else {
|
|
$shareInfo = self::extendShareInfo($shareInfo);
|
|
return new \OC_OCS_Result($shareInfo);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Unshare a remote share
|
|
*
|
|
* @param array $params contains the shareID 'id' which should be unshared
|
|
* @return \OC_OCS_Result
|
|
*/
|
|
public static function unshare($params) {
|
|
$externalManager = new Manager(
|
|
\OC::$server->getDatabaseConnection(),
|
|
Filesystem::getMountManager(),
|
|
Filesystem::getLoader(),
|
|
\OC::$server->getHTTPHelper(),
|
|
\OC::$server->getNotificationManager(),
|
|
\OC_User::getUser()
|
|
);
|
|
|
|
$shareInfo = $externalManager->getShare($params['id']);
|
|
|
|
if ($shareInfo === false) {
|
|
return new \OC_OCS_Result(null, 404, 'Share does not exist');
|
|
}
|
|
|
|
$mountPoint = '/' . \OC_User::getUser() . '/files' . $shareInfo['mountpoint'];
|
|
|
|
if ($externalManager->removeShare($mountPoint) === true) {
|
|
return new \OC_OCS_Result(null);
|
|
} else {
|
|
return new \OC_OCS_Result(null, 403, 'Could not unshare');
|
|
}
|
|
}
|
|
}
|