From 7cd13f462a41ebde9e151bb7e753a842262ad416 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jes=C3=BAs=20Macias?= <jmacias@solidgear.es>
Date: Wed, 25 Nov 2015 17:52:58 +0100
Subject: [PATCH] Add new external storage exceptions for different errors

---
 .../controller/storagescontroller.php         | 62 +++++++------------
 lib/public/files/extstorageauthexception.php  | 44 +++++++++++++
 .../files/extstoragebadconfigexception.php    | 45 ++++++++++++++
 .../files/extstorageconnectionexception.php   | 44 +++++++++++++
 .../files/extstoragetimeoutexception.php      | 44 +++++++++++++
 5 files changed, 201 insertions(+), 38 deletions(-)
 create mode 100644 lib/public/files/extstorageauthexception.php
 create mode 100644 lib/public/files/extstoragebadconfigexception.php
 create mode 100644 lib/public/files/extstorageconnectionexception.php
 create mode 100644 lib/public/files/extstoragetimeoutexception.php

diff --git a/apps/files_external/controller/storagescontroller.php b/apps/files_external/controller/storagescontroller.php
index 7efe7611407..ddd7fe6df16 100644
--- a/apps/files_external/controller/storagescontroller.php
+++ b/apps/files_external/controller/storagescontroller.php
@@ -242,44 +242,30 @@ abstract class StoragesController extends Controller {
 				$this->l10n->t('Insufficient data: %s', [$e->getMessage()])
 			);
 		} catch (StorageNotAvailableException $e) {
-			switch ($e->getCode()) {
-				case 1:
-					$storage->setStatus(
-						\OC_Mount_Config::STATUS_ERROR,
-						$this->l10n->t('%s', [$e->getMessage()])
-					);
-					break;
-				case 3:
-					$storage->setStatus(
-						\OC_Mount_Config::STATUS_INCOMPLETE_CONF,
-						$this->l10n->t('Incomplete configuration. %s', [$e->getMessage()])
-					);
-					break;
-				case 4:
-					$storage->setStatus(
-						\OC_Mount_Config::STATUS_UNAUTHORIZED,
-						$this->l10n->t('Unauthorized. %s', [$e->getMessage()])
-						$e->getMessage()
-					);
-					break;
-				case 5:
-					$storage->setStatus(
-						\OC_Mount_Config::STATUS_TIMEOUT,
-						$this->l10n->t('Timeout. %s', [$e->getMessage()])
-					);
-					break;
-				case 6:
-					$storage->setStatus(
-						\OC_Mount_Config::STATUS_NETWORK_ERROR,
-						$this->l10n->t('Network error. %s', [$e->getMessage()])
-					);
-					break;
-				default:
-					$storage->setStatus(
-						\OC_Mount_Config::STATUS_ERROR,
-						$this->l10n->t('%s', [$e->getMessage()])
-					);
-			}
+			$storage->setStatus(
+				\OC_Mount_Config::STATUS_ERROR,
+				$this->l10n->t('%s', [$e->getMessage()])
+			);
+		} catch (ExtStorageBadConfigException $e) {
+			$storage->setStatus(
+				$e->getCode(),
+				$this->l10n->t('%s', [$e->getMessage()])
+			);
+		} catch (ExtStorageAuthException $e) {
+			$storage->setStatus(
+				$e->getCode(),
+				$this->l10n->t('%s', [$e->getMessage()])
+			);
+		} catch (ExtStorageTimeoutException $e) {
+			$storage->setStatus(
+				$e->getCode(),
+				$this->l10n->t('%s', [$e->getMessage()])
+			);
+		} catch (ExtStorageConnectionException $e) {
+			$storage->setStatus(
+				$e->getCode(),
+				$this->l10n->t('%s', [$e->getMessage()])
+			);
 		} catch (\Exception $e) {
 			// FIXME: convert storage exceptions to StorageNotAvailableException
 			$storage->setStatus(
diff --git a/lib/public/files/extstorageauthexception.php b/lib/public/files/extstorageauthexception.php
new file mode 100644
index 00000000000..4f070b6c0ed
--- /dev/null
+++ b/lib/public/files/extstorageauthexception.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * @author Jesus Macias <jesus@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/>
+ *
+ */
+
+// use OCP namespace for all classes that are considered public.
+// This means that they should be used by apps instead of the internal ownCloud classes
+namespace OCP\Files;
+
+/**
+ * External Storage authentication exception
+ * @since 9.0.0
+ */
+class ExtStorageAuthException extends StorageNotAvailableException {
+
+	/**
+	 * ExtStorageAuthException constructor.
+	 *
+	 * @param string $message
+	 * @param int $code
+	 * @param \Exception $previous
+	 * @since 9.0.0
+	 */
+	public function __construct($message = '', $code, \Exception $previous = null) {
+		$l = \OC::$server->getL10N('core');
+		parent::__construct($message, $l->t('External storage unauthorized'), 3, $previous);
+	}
+}
diff --git a/lib/public/files/extstoragebadconfigexception.php b/lib/public/files/extstoragebadconfigexception.php
new file mode 100644
index 00000000000..869c2d1d139
--- /dev/null
+++ b/lib/public/files/extstoragebadconfigexception.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * @author Jesus Macias <jesus@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/>
+ *
+ */
+
+// use OCP namespace for all classes that are considered public.
+// This means that they should be used by apps instead of the internal ownCloud classes
+namespace OCP\Files;
+
+/**
+ * External Storage has bad or missing config params
+ * @since 9.0.0
+ */
+class ExtStorageBadConfigException extends StorageNotAvailableException {
+
+	/**
+	 * ExtStorageBadConfigException constructor.
+	 *
+	 * @param string $message
+	 * @param int $code
+	 * @param \Exception $previous
+	 * @since 9.0.0
+	 */
+	public function __construct($message = '', $code, \Exception $previous = null) {
+		$l = \OC::$server->getL10N('core');
+		parent::__construct($message, $l->t('External storage incomplete configuration'), 2, $previous);
+	}
+
+}
diff --git a/lib/public/files/extstorageconnectionexception.php b/lib/public/files/extstorageconnectionexception.php
new file mode 100644
index 00000000000..472d5cd6c52
--- /dev/null
+++ b/lib/public/files/extstorageconnectionexception.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * @author Jesus Macias <jesus@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/>
+ *
+ */
+
+// use OCP namespace for all classes that are considered public.
+// This means that they should be used by apps instead of the internal ownCloud classes
+namespace OCP\Files;
+
+/**
+ * External Storage authentication exception
+ * @since 9.0.0
+ */
+class ExtStorageConnectionException extends StorageNotAvailableException {
+
+	/**
+	 * ExtStorageConnectionException constructor.
+	 *
+	 * @param string $message
+	 * @param int $code
+	 * @param \Exception $previous
+	 * @since 9.0.0
+	 */
+	public function __construct($message = '', $code, \Exception $previous = null) {
+		$l = \OC::$server->getL10N('core');
+		parent::__construct($message, $l->t('External storage connection error'), 5, $previous);
+	}
+}
diff --git a/lib/public/files/extstoragetimeoutexception.php b/lib/public/files/extstoragetimeoutexception.php
new file mode 100644
index 00000000000..99932776a80
--- /dev/null
+++ b/lib/public/files/extstoragetimeoutexception.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * @author Jesus Macias <jesus@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/>
+ *
+ */
+
+// use OCP namespace for all classes that are considered public.
+// This means that they should be used by apps instead of the internal ownCloud classes
+namespace OCP\Files;
+
+/**
+ * External Storage authentication exception
+ * @since 9.0.0
+ */
+class ExtStorageTimeoutException extends StorageNotAvailableException {
+
+	/**
+	 * ExtStorageTimeoutException constructor.
+	 *
+	 * @param string $message
+	 * @param int $code
+	 * @param \Exception $previous
+	 * @since 9.0.0
+	 */
+	public function __construct($message = '', $code, \Exception $previous = null) {
+		$l = \OC::$server->getL10N('core');
+		parent::__construct($message, $l->t('External storage connection timeout'), 4, $previous);
+	}
+}
-- 
GitLab