diff --git a/apps/files_external/controller/storagescontroller.php b/apps/files_external/controller/storagescontroller.php index c66bd902d8..7712f9769c 100644 --- a/apps/files_external/controller/storagescontroller.php +++ b/apps/files_external/controller/storagescontroller.php @@ -238,18 +238,18 @@ abstract class StoragesController extends Controller { ); } catch (InsufficientDataForMeaningfulAnswerException $e) { $storage->setStatus( - \OC_Mount_Config::STATUS_INDETERMINATE, + StorageNotAvailableException::STATUS_INDETERMINATE, $this->l10n->t('Insufficient data: %s', [$e->getMessage()]) ); } catch (StorageNotAvailableException $e) { $storage->setStatus( - \OC_Mount_Config::STATUS_ERROR, - $e->getMessage() + $e->getCode(), + $this->l10n->t('%s', [$e->getMessage()]) ); } catch (\Exception $e) { // FIXME: convert storage exceptions to StorageNotAvailableException $storage->setStatus( - \OC_Mount_Config::STATUS_ERROR, + StorageNotAvailableException::STATUS_ERROR, get_class($e).': '.$e->getMessage() ); } diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php index 1e96fac814..7a869847a6 100644 --- a/apps/files_external/lib/config.php +++ b/apps/files_external/lib/config.php @@ -36,6 +36,7 @@ use \OCA\Files_External\Appinfo\Application; use \OCA\Files_External\Lib\Backend\LegacyBackend; use \OCA\Files_External\Lib\StorageConfig; use \OCA\Files_External\Lib\Backend\Backend; +use \OCP\Files\StorageNotAvailableException; /** * Class to configure mount.json globally and for users @@ -48,11 +49,6 @@ class OC_Mount_Config { const MOUNT_TYPE_USER = 'user'; const MOUNT_TYPE_PERSONAL = 'personal'; - // getBackendStatus return types - const STATUS_SUCCESS = 0; - const STATUS_ERROR = 1; - const STATUS_INDETERMINATE = 2; - // whether to skip backend test (for unit tests, as this static class is not mockable) public static $skipTest = false; @@ -219,7 +215,7 @@ class OC_Mount_Config { */ public static function getBackendStatus($class, $options, $isPersonal) { if (self::$skipTest) { - return self::STATUS_SUCCESS; + return StorageNotAvailableException::STATUS_SUCCESS; } foreach ($options as &$option) { $option = self::setUserVars(OCP\User::getUser(), $option); @@ -233,7 +229,7 @@ class OC_Mount_Config { $result = $storage->test($isPersonal); $storage->setAvailability($result); if ($result) { - return self::STATUS_SUCCESS; + return StorageNotAvailableException::STATUS_SUCCESS; } } catch (\Exception $e) { $storage->setAvailability(false); @@ -244,7 +240,7 @@ class OC_Mount_Config { throw $exception; } } - return self::STATUS_ERROR; + return StorageNotAvailableException::STATUS_ERROR; } /** diff --git a/apps/files_external/service/storagesservice.php b/apps/files_external/service/storagesservice.php index 3446ed0dab..c847930ba2 100644 --- a/apps/files_external/service/storagesservice.php +++ b/apps/files_external/service/storagesservice.php @@ -31,6 +31,7 @@ use \OCA\Files_external\NotFoundException; use \OCA\Files_External\Service\BackendService; use \OCA\Files_External\Lib\Backend\Backend; use \OCA\Files_External\Lib\Auth\AuthMechanism; +use \OCP\Files\StorageNotAvailableException; /** * Service class to manage external storages @@ -411,7 +412,7 @@ abstract class StoragesService { $this->triggerHooks($newStorage, Filesystem::signal_create_mount); - $newStorage->setStatus(\OC_Mount_Config::STATUS_SUCCESS); + $newStorage->setStatus(StorageNotAvailableException::STATUS_SUCCESS); return $newStorage; } diff --git a/lib/public/files/storageauthexception.php b/lib/public/files/storageauthexception.php new file mode 100644 index 0000000000..6b49065038 --- /dev/null +++ b/lib/public/files/storageauthexception.php @@ -0,0 +1,41 @@ + + * + * @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 + * + */ +namespace OCP\Files; + +/** + * Storage authentication exception + * @since 9.0.0 + */ +class StorageAuthException extends StorageNotAvailableException { + + /** + * StorageAuthException constructor. + * + * @param string $message + * @param int $code + * @param \Exception $previous + * @since 9.0.0 + */ + public function __construct($message = '', \Exception $previous = null) { + $l = \OC::$server->getL10N('core'); + parent::__construct($l->t('Storage unauthorized. %s', $message), self::STATUS_UNAUTHORIZED, $previous); + } +} diff --git a/lib/public/files/storagebadconfigexception.php b/lib/public/files/storagebadconfigexception.php new file mode 100644 index 0000000000..d72ad3358e --- /dev/null +++ b/lib/public/files/storagebadconfigexception.php @@ -0,0 +1,42 @@ + + * + * @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 + * + */ +namespace OCP\Files; + +/** + * Storage has bad or missing config params + * @since 9.0.0 + */ +class StorageBadConfigException extends StorageNotAvailableException { + + /** + * ExtStorageBadConfigException constructor. + * + * @param string $message + * @param int $code + * @param \Exception $previous + * @since 9.0.0 + */ + public function __construct($message = '', \Exception $previous = null) { + $l = \OC::$server->getL10N('core'); + parent::__construct($l->t('Storage incomplete configuration. %s', $message), self::STATUS_INCOMPLETE_CONF, $previous); + } + +} diff --git a/lib/public/files/storageconnectionexception.php b/lib/public/files/storageconnectionexception.php new file mode 100644 index 0000000000..c17367046e --- /dev/null +++ b/lib/public/files/storageconnectionexception.php @@ -0,0 +1,41 @@ + + * + * @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 + * + */ +namespace OCP\Files; + +/** + * Storage authentication exception + * @since 9.0.0 + */ +class StorageConnectionException extends StorageNotAvailableException { + + /** + * StorageConnectionException constructor. + * + * @param string $message + * @param int $code + * @param \Exception $previous + * @since 9.0.0 + */ + public function __construct($message = '', \Exception $previous = null) { + $l = \OC::$server->getL10N('core'); + parent::__construct($l->t('Storage connection error. %s', $message), self::STATUS_NETWORK_ERROR, $previous); + } +} diff --git a/lib/public/files/storagenotavailableexception.php b/lib/public/files/storagenotavailableexception.php index a6665b38ce..323f5d9b7f 100644 --- a/lib/public/files/storagenotavailableexception.php +++ b/lib/public/files/storagenotavailableexception.php @@ -37,6 +37,14 @@ use OC\HintException; */ class StorageNotAvailableException extends HintException { + const STATUS_SUCCESS = 0; + const STATUS_ERROR = 1; + const STATUS_INDETERMINATE = 2; + const STATUS_INCOMPLETE_CONF = 3; + const STATUS_UNAUTHORIZED = 4; + const STATUS_TIMEOUT = 5; + const STATUS_NETWORK_ERROR = 6; + /** * StorageNotAvailableException constructor. * diff --git a/lib/public/files/storagetimeoutexception.php b/lib/public/files/storagetimeoutexception.php new file mode 100644 index 0000000000..c6682604b6 --- /dev/null +++ b/lib/public/files/storagetimeoutexception.php @@ -0,0 +1,41 @@ + + * + * @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 + * + */ +namespace OCP\Files; + +/** + * Storage authentication exception + * @since 9.0.0 + */ +class StorageTimeoutException extends StorageNotAvailableException { + + /** + * StorageTimeoutException constructor. + * + * @param string $message + * @param int $code + * @param \Exception $previous + * @since 9.0.0 + */ + public function __construct($message = '', \Exception $previous = null) { + $l = \OC::$server->getL10N('core'); + parent::__construct($l->t('Storage connection timeout. %s', $message), self::STATUS_TIMEOUT, $previous); + } +}