Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRoeland Jago Douma <roeland@famdouma.nl>2016-07-20 10:43:02 +0300
committerRoeland Jago Douma <roeland@famdouma.nl>2016-07-20 21:03:49 +0300
commitea47974a0863f5cb7a066a4f52c960482e550c2b (patch)
treef3c8172f43b2046575403173b04ab774589fe64c /lib
parent032e6b1701dd4a8d674923feb3962ee49fdb7c77 (diff)
Add OCSMiddleware to catch OCS exceptions
* OCSException * OCSBadRequestException * OCSForbiddenException * OCSNotFoundException
Diffstat (limited to 'lib')
-rw-r--r--lib/private/AppFramework/DependencyInjection/DIContainer.php8
-rw-r--r--lib/private/AppFramework/Middleware/OCSMiddleware.php80
-rw-r--r--lib/public/AppFramework/OCS/OCSBadRequestException.php45
-rw-r--r--lib/public/AppFramework/OCS/OCSException.php32
-rw-r--r--lib/public/AppFramework/OCS/OCSForbiddenException.php44
-rw-r--r--lib/public/AppFramework/OCS/OCSNotFoundException.php44
6 files changed, 253 insertions, 0 deletions
diff --git a/lib/private/AppFramework/DependencyInjection/DIContainer.php b/lib/private/AppFramework/DependencyInjection/DIContainer.php
index f21b34a6b4a..32a85606abf 100644
--- a/lib/private/AppFramework/DependencyInjection/DIContainer.php
+++ b/lib/private/AppFramework/DependencyInjection/DIContainer.php
@@ -38,6 +38,7 @@ use OC\AppFramework\Http\Dispatcher;
use OC\AppFramework\Http\Output;
use OC\AppFramework\Middleware\MiddlewareDispatcher;
use OC\AppFramework\Middleware\Security\CORSMiddleware;
+use OC\AppFramework\Middleware\OCSMiddleware;
use OC\AppFramework\Middleware\Security\SecurityMiddleware;
use OC\AppFramework\Middleware\SessionMiddleware;
use OC\AppFramework\Utility\SimpleContainer;
@@ -373,6 +374,12 @@ class DIContainer extends SimpleContainer implements IAppContainer {
return new TwoFactorMiddleware($twoFactorManager, $userSession, $session, $urlGenerator, $reflector, $request);
});
+ $this->registerService('OCSMiddleware', function (SimpleContainer $c) {
+ return new OCSMiddleware(
+ $c['Request']
+ );
+ });
+
$middleWares = &$this->middleWares;
$this->registerService('MiddlewareDispatcher', function($c) use (&$middleWares) {
$dispatcher = new MiddlewareDispatcher();
@@ -385,6 +392,7 @@ class DIContainer extends SimpleContainer implements IAppContainer {
}
$dispatcher->registerMiddleware($c['SessionMiddleware']);
+ $dispatcher->registerMiddleware($c['OCSMiddleware']);
return $dispatcher;
});
diff --git a/lib/private/AppFramework/Middleware/OCSMiddleware.php b/lib/private/AppFramework/Middleware/OCSMiddleware.php
new file mode 100644
index 00000000000..2c7d1167e7c
--- /dev/null
+++ b/lib/private/AppFramework/Middleware/OCSMiddleware.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OC\AppFramework\Middleware;
+
+use OC\AppFramework\Http;
+use OCP\AppFramework\Http\OCSResponse;
+use OCP\AppFramework\OCS\OCSException;
+use OCP\AppFramework\OCSController;
+use OCP\IRequest;
+use OCP\AppFramework\Middleware;
+
+class OCSMiddleware extends Middleware {
+
+ /** @var IRequest */
+ private $request;
+
+ /**
+ * @param IRequest $request
+ */
+ public function __construct(IRequest $request) {
+ $this->request = $request;
+ }
+
+ /**
+ * @param \OCP\AppFramework\Controller $controller
+ * @param string $methodName
+ * @param \Exception $exception
+ * @throws \Exception
+ * @return OCSResponse
+ */
+ public function afterException($controller, $methodName, \Exception $exception) {
+ if ($controller instanceof OCSController && $exception instanceof OCSException) {
+ $format = $this->getFormat($controller);
+
+ $code = $exception->getCode();
+ if ($code === 0) {
+ $code = Http::STATUS_INTERNAL_SERVER_ERROR;
+ }
+ return new OCSResponse($format, $code, $exception->getMessage());
+ }
+
+ throw $exception;
+ }
+
+ /**
+ * @param \OCP\AppFramework\Controller $controller
+ * @return string
+ */
+ private function getFormat($controller) {
+ // get format from the url format or request format parameter
+ $format = $this->request->getParam('format');
+
+ // if none is given try the first Accept header
+ if($format === null) {
+ $headers = $this->request->getHeader('Accept');
+ $format = $controller->getResponderByHTTPHeader($headers);
+ }
+
+ return $format;
+ }
+}
diff --git a/lib/public/AppFramework/OCS/OCSBadRequestException.php b/lib/public/AppFramework/OCS/OCSBadRequestException.php
new file mode 100644
index 00000000000..0f4278fddc4
--- /dev/null
+++ b/lib/public/AppFramework/OCS/OCSBadRequestException.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OCP\AppFramework\OCS;
+
+use Exception;
+use OCP\AppFramework\Http;
+
+/**
+ * Class OCSBadRequestException
+ *
+ * @package OCP\AppFramework
+ * @since 9.1.0
+ */
+class OCSBadRequestException extends OCSException {
+ /**
+ * OCSBadRequestException constructor.
+ *
+ * @param string $message
+ * @param Exception|null $previous
+ * @since 9.1.0
+ */
+ public function __construct($message = '', Exception $previous = null) {
+ parent::__construct($message, Http::STATUS_BAD_REQUEST, $previous);
+ }
+
+}
diff --git a/lib/public/AppFramework/OCS/OCSException.php b/lib/public/AppFramework/OCS/OCSException.php
new file mode 100644
index 00000000000..f95b5a16844
--- /dev/null
+++ b/lib/public/AppFramework/OCS/OCSException.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OCP\AppFramework\OCS;
+
+use Exception;
+
+/**
+ * Class OCSException
+ *
+ * @package OCP\AppFramework
+ * @since 9.1.0
+ */
+class OCSException extends Exception {}
diff --git a/lib/public/AppFramework/OCS/OCSForbiddenException.php b/lib/public/AppFramework/OCS/OCSForbiddenException.php
new file mode 100644
index 00000000000..0c792722d9a
--- /dev/null
+++ b/lib/public/AppFramework/OCS/OCSForbiddenException.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OCP\AppFramework\OCS;
+
+use Exception;
+use OCP\AppFramework\Http;
+
+/**
+ * Class OCSForbiddenException
+ *
+ * @package OCP\AppFramework
+ * @since 9.1.0
+ */
+class OCSForbiddenException extends OCSException {
+ /**
+ * OCSForbiddenException constructor.
+ *
+ * @param string $message
+ * @param Exception|null $previous
+ * @since 9.1.0
+ */
+ public function __construct($message = '', Exception $previous = null) {
+ parent::__construct($message, Http::STATUS_FORBIDDEN, $previous);
+ }
+}
diff --git a/lib/public/AppFramework/OCS/OCSNotFoundException.php b/lib/public/AppFramework/OCS/OCSNotFoundException.php
new file mode 100644
index 00000000000..aaef36af1c7
--- /dev/null
+++ b/lib/public/AppFramework/OCS/OCSNotFoundException.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OCP\AppFramework\OCS;
+
+use Exception;
+use OCP\AppFramework\Http;
+
+/**
+ * Class OCSNotFoundException
+ *
+ * @package OCP\AppFramework
+ * @since 9.1.0
+ */
+class OCSNotFoundException extends OCSException {
+ /**
+ * OCSNotFoundException constructor.
+ *
+ * @param string $message
+ * @param Exception|null $previous
+ * @since 9.1.0
+ */
+ public function __construct($message = '', Exception $previous = null) {
+ parent::__construct($message, Http::STATUS_NOT_FOUND, $previous);
+ }
+}