diff options
author | Joas Schilling <nickvergessen@owncloud.com> | 2016-05-13 11:22:28 +0200 |
---|---|---|
committer | Joas Schilling <nickvergessen@owncloud.com> | 2016-05-24 08:41:20 +0200 |
commit | 328b3c47d7fdf61b6de3c2d9129d392d3a9f5a87 (patch) | |
tree | 4d7f5eedc7861b40271bcfe1e95cc01d5ed0296d /apps/files_external/controller/storagescontroller.php | |
parent | adcf942901fd567d97dbe105e8f3dfb7cea738e3 (diff) | |
download | nextcloud-server-328b3c47d7fdf61b6de3c2d9129d392d3a9f5a87.tar.gz nextcloud-server-328b3c47d7fdf61b6de3c2d9129d392d3a9f5a87.zip |
Move stuff from outside lib/ to PSR-4
Diffstat (limited to 'apps/files_external/controller/storagescontroller.php')
-rw-r--r-- | apps/files_external/controller/storagescontroller.php | 342 |
1 files changed, 0 insertions, 342 deletions
diff --git a/apps/files_external/controller/storagescontroller.php b/apps/files_external/controller/storagescontroller.php deleted file mode 100644 index 09b83104700..00000000000 --- a/apps/files_external/controller/storagescontroller.php +++ /dev/null @@ -1,342 +0,0 @@ -<?php -/** - * @author Jesús Macias <jmacias@solidgear.es> - * @author Robin Appelman <icewind@owncloud.com> - * @author Robin McCorkell <robin@mccorkell.me.uk> - * @author Vincent Petry <pvince81@owncloud.com> - * - * @copyright Copyright (c) 2016, 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_External\Controller; - - -use \OCP\IConfig; -use OCP\ILogger; -use OCP\IUser; -use \OCP\IUserSession; -use \OCP\IRequest; -use \OCP\IL10N; -use \OCP\AppFramework\Http\DataResponse; -use \OCP\AppFramework\Controller; -use \OCP\AppFramework\Http; -use \OCA\Files_external\Service\StoragesService; -use \OCA\Files_external\NotFoundException; -use \OCA\Files_external\Lib\StorageConfig; -use \OCA\Files_External\Lib\Backend\Backend; -use \OCA\Files_External\Lib\Auth\AuthMechanism; -use \OCP\Files\StorageNotAvailableException; -use \OCA\Files_External\Lib\InsufficientDataForMeaningfulAnswerException; -use \OCA\Files_External\Service\BackendService; - -/** - * Base class for storages controllers - */ -abstract class StoragesController extends Controller { - - /** - * L10N service - * - * @var IL10N - */ - protected $l10n; - - /** - * Storages service - * - * @var StoragesService - */ - protected $service; - - /** - * @var ILogger - */ - protected $logger; - - /** - * Creates a new storages controller. - * - * @param string $AppName application name - * @param IRequest $request request object - * @param IL10N $l10n l10n service - * @param StoragesService $storagesService storage service - * @param ILogger $logger - */ - public function __construct( - $AppName, - IRequest $request, - IL10N $l10n, - StoragesService $storagesService, - ILogger $logger - ) { - parent::__construct($AppName, $request); - $this->l10n = $l10n; - $this->service = $storagesService; - $this->logger = $logger; - } - - /** - * Create a storage from its parameters - * - * @param string $mountPoint storage mount point - * @param string $backend backend identifier - * @param string $authMechanism authentication mechanism identifier - * @param array $backendOptions backend-specific options - * @param array|null $mountOptions mount-specific options - * @param array|null $applicableUsers users for which to mount the storage - * @param array|null $applicableGroups groups for which to mount the storage - * @param int|null $priority priority - * - * @return StorageConfig|DataResponse - */ - protected function createStorage( - $mountPoint, - $backend, - $authMechanism, - $backendOptions, - $mountOptions = null, - $applicableUsers = null, - $applicableGroups = null, - $priority = null - ) { - try { - return $this->service->createStorage( - $mountPoint, - $backend, - $authMechanism, - $backendOptions, - $mountOptions, - $applicableUsers, - $applicableGroups, - $priority - ); - } catch (\InvalidArgumentException $e) { - $this->logger->logException($e); - return new DataResponse( - [ - 'message' => (string)$this->l10n->t('Invalid backend or authentication mechanism class') - ], - Http::STATUS_UNPROCESSABLE_ENTITY - ); - } - } - - /** - * Validate storage config - * - * @param StorageConfig $storage storage config - *1 - * @return DataResponse|null returns response in case of validation error - */ - protected function validate(StorageConfig $storage) { - $mountPoint = $storage->getMountPoint(); - if ($mountPoint === '' || $mountPoint === '/') { - return new DataResponse( - array( - 'message' => (string)$this->l10n->t('Invalid mount point') - ), - Http::STATUS_UNPROCESSABLE_ENTITY - ); - } - - if ($storage->getBackendOption('objectstore')) { - // objectstore must not be sent from client side - return new DataResponse( - array( - 'message' => (string)$this->l10n->t('Objectstore forbidden') - ), - Http::STATUS_UNPROCESSABLE_ENTITY - ); - } - - /** @var Backend */ - $backend = $storage->getBackend(); - /** @var AuthMechanism */ - $authMechanism = $storage->getAuthMechanism(); - if ($backend->checkDependencies()) { - // invalid backend - return new DataResponse( - array( - 'message' => (string)$this->l10n->t('Invalid storage backend "%s"', [ - $backend->getIdentifier() - ]) - ), - Http::STATUS_UNPROCESSABLE_ENTITY - ); - } - - if (!$backend->isVisibleFor($this->service->getVisibilityType())) { - // not permitted to use backend - return new DataResponse( - array( - 'message' => (string)$this->l10n->t('Not permitted to use backend "%s"', [ - $backend->getIdentifier() - ]) - ), - Http::STATUS_UNPROCESSABLE_ENTITY - ); - } - if (!$authMechanism->isVisibleFor($this->service->getVisibilityType())) { - // not permitted to use auth mechanism - return new DataResponse( - array( - 'message' => (string)$this->l10n->t('Not permitted to use authentication mechanism "%s"', [ - $authMechanism->getIdentifier() - ]) - ), - Http::STATUS_UNPROCESSABLE_ENTITY - ); - } - - if (!$backend->validateStorage($storage)) { - // unsatisfied parameters - return new DataResponse( - array( - 'message' => (string)$this->l10n->t('Unsatisfied backend parameters') - ), - Http::STATUS_UNPROCESSABLE_ENTITY - ); - } - if (!$authMechanism->validateStorage($storage)) { - // unsatisfied parameters - return new DataResponse( - [ - 'message' => (string)$this->l10n->t('Unsatisfied authentication mechanism parameters') - ], - Http::STATUS_UNPROCESSABLE_ENTITY - ); - } - - return null; - } - - protected function manipulateStorageConfig(StorageConfig $storage) { - /** @var AuthMechanism */ - $authMechanism = $storage->getAuthMechanism(); - $authMechanism->manipulateStorageConfig($storage); - /** @var Backend */ - $backend = $storage->getBackend(); - $backend->manipulateStorageConfig($storage); - } - - /** - * Check whether the given storage is available / valid. - * - * Note that this operation can be time consuming depending - * on whether the remote storage is available or not. - * - * @param StorageConfig $storage storage configuration - */ - protected function updateStorageStatus(StorageConfig &$storage) { - try { - $this->manipulateStorageConfig($storage); - - /** @var Backend */ - $backend = $storage->getBackend(); - // update status (can be time-consuming) - $storage->setStatus( - \OC_Mount_Config::getBackendStatus( - $backend->getStorageClass(), - $storage->getBackendOptions(), - false - ) - ); - } catch (InsufficientDataForMeaningfulAnswerException $e) { - $status = $e->getCode() ? $e->getCode() : StorageNotAvailableException::STATUS_INDETERMINATE; - $storage->setStatus( - $status, - $this->l10n->t('Insufficient data: %s', [$e->getMessage()]) - ); - } catch (StorageNotAvailableException $e) { - $storage->setStatus( - $e->getCode(), - $this->l10n->t('%s', [$e->getMessage()]) - ); - } catch (\Exception $e) { - // FIXME: convert storage exceptions to StorageNotAvailableException - $storage->setStatus( - StorageNotAvailableException::STATUS_ERROR, - get_class($e).': '.$e->getMessage() - ); - } - } - - /** - * Get all storage entries - * - * @return DataResponse - */ - public function index() { - $storages = $this->service->getStorages(); - - return new DataResponse( - $storages, - Http::STATUS_OK - ); - } - - /** - * Get an external storage entry. - * - * @param int $id storage id - * - * @return DataResponse - */ - public function show($id) { - try { - $storage = $this->service->getStorage($id); - - $this->updateStorageStatus($storage); - } catch (NotFoundException $e) { - return new DataResponse( - [ - 'message' => (string)$this->l10n->t('Storage with id "%i" not found', array($id)) - ], - Http::STATUS_NOT_FOUND - ); - } - - return new DataResponse( - $storage, - Http::STATUS_OK - ); - } - - /** - * Deletes the storage with the given id. - * - * @param int $id storage id - * - * @return DataResponse - */ - public function destroy($id) { - try { - $this->service->removeStorage($id); - } catch (NotFoundException $e) { - return new DataResponse( - [ - 'message' => (string)$this->l10n->t('Storage with id "%i" not found', array($id)) - ], - Http::STATUS_NOT_FOUND - ); - } - - return new DataResponse([], Http::STATUS_NO_CONTENT); - } - -} - |