diff options
author | Roeland Jago Douma <roeland@famdouma.nl> | 2016-09-02 19:28:42 +0200 |
---|---|---|
committer | Roeland Jago Douma <roeland@famdouma.nl> | 2016-09-09 07:40:33 +0200 |
commit | ba104233b0dac2924761febf5ba16de68513be5a (patch) | |
tree | 4f62509d11dd0f6691a6d5ef741d075242ba99e7 /apps/files_sharing/lib/Controller/RemoteController.php | |
parent | f5aafdc89789623e72f9a05ecc2629ed2894668b (diff) | |
download | nextcloud-server-ba104233b0dac2924761febf5ba16de68513be5a.tar.gz nextcloud-server-ba104233b0dac2924761febf5ba16de68513be5a.zip |
Move remote_shares OCS endpoint to AppFramework
Diffstat (limited to 'apps/files_sharing/lib/Controller/RemoteController.php')
-rw-r--r-- | apps/files_sharing/lib/Controller/RemoteController.php | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/apps/files_sharing/lib/Controller/RemoteController.php b/apps/files_sharing/lib/Controller/RemoteController.php new file mode 100644 index 00000000000..7c7a608ff2d --- /dev/null +++ b/apps/files_sharing/lib/Controller/RemoteController.php @@ -0,0 +1,183 @@ +<?php +/** + * @copyright Copyright (c) 2016, ownCloud, Inc. + * + * @author Joas Schilling <coding@schilljs.com> + * @author Lukas Reschke <lukas@statuscode.ch> + * @author Roeland Jago Douma <roeland@famdouma.nl> + * + * @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\Controller; + +use OCA\Files_Sharing\External\Manager; +use OCP\AppFramework\Http\DataResponse; +use OCP\AppFramework\OCS\OCSForbiddenException; +use OCP\AppFramework\OCS\OCSNotFoundException; +use OCP\AppFramework\OCSController; +use OCP\IRequest; + +class RemoteController extends OCSController { + + /** @var Manager */ + private $externalManager; + + /** + * @NoAdminRequired + * + * Remote constructor. + * + * @param string $appName + * @param IRequest $request + * @param Manager $externalManager + */ + public function __construct($appName, + IRequest $request, + Manager $externalManager) { + parent::__construct($appName, $request); + + $this->externalManager = $externalManager; + } + + /** + * @NoAdminRequired + * + * Get list of pending remote shares + * + * @return DataResponse + */ + public function getOpenShares() { + return new DataResponse($this->externalManager->getOpenShares()); + } + + /** + * @NoAdminRequired + * + * Accept a remote share + * + * @param int $id + * @return DataResponse + * @throws OCSNotFoundException + */ + public function acceptShare($id) { + if ($this->externalManager->acceptShare($id)) { + return new DataResponse(); + } + + // Make sure the user has no notification for something that does not exist anymore. + $this->externalManager->processNotification($id); + + throw new OCSNotFoundException('wrong share ID, share doesn\'t exist.'); + } + + /** + * @NoAdminRequired + * + * Decline a remote share + * + * @param int $id + * @return DataResponse + * @throws OCSNotFoundException + */ + public function declineShare($id) { + if ($this->externalManager->declineShare($id)) { + return new DataResponse(); + } + + // Make sure the user has no notification for something that does not exist anymore. + $this->externalManager->processNotification($id); + + throw new OCSNotFoundException('wrong share ID, share doesn\'t exist.'); + } + + /** + * @param array $share Share with info from the share_external table + * @return array 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($share['mountpoint']); + + $share['mimetype'] = $info->getMimetype(); + $share['mtime'] = $info->getMTime(); + $share['permissions'] = $info->getPermissions(); + $share['type'] = $info->getType(); + $share['file_id'] = $info->getId(); + + return $share; + } + + /** + * @NoAdminRequired + * + * List accepted remote shares + * + * @return DataResponse + */ + public function getShares() { + $shares = $this->externalManager->getAcceptedShares(); + $shares = array_map('self::extendShareInfo', $shares); + + return new DataResponse($shares); + } + + /** + * @NoAdminRequired + * + * Get info of a remote share + * + * @param int $id + * @return DataResponse + * @throws OCSNotFoundException + */ + public function getShare($id) { + $shareInfo = $this->externalManager->getShare($id); + + if ($shareInfo === false) { + throw new OCSNotFoundException('share does not exist'); + } else { + $shareInfo = self::extendShareInfo($shareInfo); + return new DataResponse($shareInfo); + } + } + + /** + * @NoAdminRequired + * + * Unshare a remote share + * + * @param int $id + * @return DataResponse + * @throws OCSNotFoundException + * @throws OCSForbiddenException + */ + public function unshare($id) { + $shareInfo = $this->externalManager->getShare($id); + + if ($shareInfo === false) { + throw new OCSNotFoundException('Share does not exist'); + } + + $mountPoint = '/' . \OC_User::getUser() . '/files' . $shareInfo['mountpoint']; + + if ($this->externalManager->removeShare($mountPoint) === true) { + return new DataResponse(); + } else { + throw new OCSForbiddenException('Could not unshare'); + } + } +} |