From 05f75f803a104e5dbcf11a112122c1232e49f8fd Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Wed, 17 Jan 2018 20:00:09 +0100 Subject: [files_external] OCS endpoint to proper OCSController Signed-off-by: Roeland Jago Douma --- apps/files_external/appinfo/routes.php | 37 +++---- .../lib/Controller/ApiController.php | 108 +++++++++++++++++++++ apps/files_external/lib/Lib/Api.php | 90 ----------------- 3 files changed, 127 insertions(+), 108 deletions(-) create mode 100644 apps/files_external/lib/Controller/ApiController.php delete mode 100644 apps/files_external/lib/Lib/Api.php (limited to 'apps') diff --git a/apps/files_external/appinfo/routes.php b/apps/files_external/appinfo/routes.php index 97c2d7b0e00..b8f055530c4 100644 --- a/apps/files_external/appinfo/routes.php +++ b/apps/files_external/appinfo/routes.php @@ -31,26 +31,33 @@ **/ \OC_Mount_Config::$app->registerRoutes( $this, - array( - 'resources' => array( - 'global_storages' => array('url' => '/globalstorages'), - 'user_storages' => array('url' => '/userstorages'), - 'user_global_storages' => array('url' => '/userglobalstorages'), - ), - 'routes' => array( - array( + [ + 'resources' => [ + 'global_storages' => ['url' => '/globalstorages'], + 'user_storages' => ['url' => '/userstorages'], + 'user_global_storages' => ['url' => '/userglobalstorages'], + ], + 'routes' => [ + [ 'name' => 'Ajax#getSshKeys', 'url' => '/ajax/public_key.php', 'verb' => 'POST', - 'requirements' => array() - ), + 'requirements' => [], + ], [ 'name' => 'Ajax#saveGlobalCredentials', 'url' => '/globalcredentials', 'verb' => 'POST', ], - ) - ) + ], + 'ocs' => [ + [ + 'name' => 'Api#getUserMounts', + 'url' => '/api/v1/mounts', + 'verb' => 'GET', + ], + ], + ] ); $this->create('files_external_oauth1', 'ajax/oauth1.php') @@ -61,9 +68,3 @@ $this->create('files_external_oauth2', 'ajax/oauth2.php') $this->create('files_external_list_applicable', '/applicable') ->actionInclude('files_external/ajax/applicable.php'); - -\OCP\API::register('get', - '/apps/files_external/api/v1/mounts', - array('\OCA\Files_External\Lib\Api', 'getUserMounts'), - 'files_external'); - diff --git a/apps/files_external/lib/Controller/ApiController.php b/apps/files_external/lib/Controller/ApiController.php new file mode 100644 index 00000000000..8be623c5eee --- /dev/null +++ b/apps/files_external/lib/Controller/ApiController.php @@ -0,0 +1,108 @@ + + * @author Joas Schilling + * @author Morris Jobke + * @author Robin Appelman + * @author Robin McCorkell + * @author Roeland Jago Douma + * @author Vincent Petry + * + * @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 + * + */ + +namespace OCA\Files_External\Controller; + +use OCP\AppFramework\Http\DataResponse; +use OCP\AppFramework\OCSController; +use OCP\IRequest; +use OCP\IUserSession; + +class ApiController extends OCSController { + + /** @var IUserSession */ + private $userSession; + + public function __construct(string $appName, + IRequest $request, + IUserSession $userSession) { + parent::__construct($appName, $request); + + $this->userSession = $userSession; + } + + /** + * Formats the given mount config to a mount entry. + * + * @param string $mountPoint mount point name, relative to the data dir + * @param array $mountConfig mount config to format + * + * @return array entry + */ + private function formatMount(string $mountPoint, array $mountConfig): array { + // strip "/$user/files" from mount point + $mountPoint = explode('/', trim($mountPoint, '/'), 3); + $mountPoint = $mountPoint[2] ?? ''; + + // split path from mount point + $path = \dirname($mountPoint); + if ($path === '.') { + $path = ''; + } + + $isSystemMount = !$mountConfig['personal']; + + $permissions = \OCP\Constants::PERMISSION_READ; + // personal mounts can be deleted + if (!$isSystemMount) { + $permissions |= \OCP\Constants::PERMISSION_DELETE; + } + + $entry = array( + 'name' => basename($mountPoint), + 'path' => $path, + 'type' => 'dir', + 'backend' => $mountConfig['backend'], + 'scope' => $isSystemMount ? 'system' : 'personal', + 'permissions' => $permissions, + 'id' => $mountConfig['id'], + 'class' => $mountConfig['class'] + ); + return $entry; + } + + /** + * @NoAdminRequired + * + * Returns the mount points visible for this user. + * + * @return DataResponse share information + */ + public function getUserMounts(): DataResponse { + $entries = []; + $user = $this->userSession->getUser()->getUID(); + + $mounts = \OC_Mount_Config::getAbsoluteMountPoints($user); + foreach($mounts as $mountPoint => $mount) { + $entries[] = $this->formatMount($mountPoint, $mount); + } + + return new DataResponse($entries); + } +} diff --git a/apps/files_external/lib/Lib/Api.php b/apps/files_external/lib/Lib/Api.php deleted file mode 100644 index 6957af0b7bb..00000000000 --- a/apps/files_external/lib/Lib/Api.php +++ /dev/null @@ -1,90 +0,0 @@ - - * @author Joas Schilling - * @author Morris Jobke - * @author Robin Appelman - * @author Robin McCorkell - * @author Roeland Jago Douma - * @author Vincent Petry - * - * @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 - * - */ - -namespace OCA\Files_External\Lib; - -class Api { - - /** - * Formats the given mount config to a mount entry. - * - * @param string $mountPoint mount point name, relative to the data dir - * @param array $mountConfig mount config to format - * - * @return array entry - */ - private static function formatMount($mountPoint, $mountConfig) { - // strip "/$user/files" from mount point - $mountPoint = explode('/', trim($mountPoint, '/'), 3); - $mountPoint = isset($mountPoint[2]) ? $mountPoint[2] : ''; - - // split path from mount point - $path = dirname($mountPoint); - if ($path === '.') { - $path = ''; - } - - $isSystemMount = !$mountConfig['personal']; - - $permissions = \OCP\Constants::PERMISSION_READ; - // personal mounts can be deleted - if (!$isSystemMount) { - $permissions |= \OCP\Constants::PERMISSION_DELETE; - } - - $entry = array( - 'name' => basename($mountPoint), - 'path' => $path, - 'type' => 'dir', - 'backend' => $mountConfig['backend'], - 'scope' => ( $isSystemMount ? 'system' : 'personal' ), - 'permissions' => $permissions, - 'id' => $mountConfig['id'], - 'class' => $mountConfig['class'] - ); - return $entry; - } - - /** - * Returns the mount points visible for this user. - * - * @param array $params - * @return \OC\OCS\Result share information - */ - public static function getUserMounts($params) { - $entries = array(); - $user = \OC::$server->getUserSession()->getUser()->getUID(); - - $mounts = \OC_Mount_Config::getAbsoluteMountPoints($user); - foreach($mounts as $mountPoint => $mount) { - $entries[] = self::formatMount($mountPoint, $mount); - } - - return new \OC\OCS\Result($entries); - } -} -- cgit v1.2.3