[Pkg-owncloud-commits] [owncloud] 03/23: Fixing content type detection and handle all local printErrorPage calls

David Prévot taffit at moszumanska.debian.org
Tue Jul 7 12:42:51 UTC 2015


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch stable8
in repository owncloud.

commit 82493e9789c7625341d77186adad67285cfdd155
Author: Thomas Müller <thomas.mueller at tmit.eu>
Date:   Mon Jun 29 22:08:34 2015 +0200

    Fixing content type detection and handle all local printErrorPage calls
---
 remote.php | 41 +++++++++++++++++++++++++++++------------
 1 file changed, 29 insertions(+), 12 deletions(-)

diff --git a/remote.php b/remote.php
index 5b4f6e1..0b43f94 100644
--- a/remote.php
+++ b/remote.php
@@ -31,29 +31,50 @@ use Sabre\DAV\Exception\ServiceUnavailable;
 use Sabre\DAV\Server;
 
 /**
+ * Class RemoteException
+ * Dummy exception class to be use locally to identify certain conditions
+ */
+class RemoteException extends Exception {
+}
+
+/**
  * @param Exception $e
  */
 function handleException(Exception $e) {
 	$request = \OC::$server->getRequest();
 	// in case the request content type is text/xml - we assume it's a WebDAV request
-	if ($request->getHeader('Content-Type') === 'text/xml') {
+	$isXmlContentType = strpos($request->getHeader('Content-Type'), 'text/xml');
+	if ($isXmlContentType === 0) {
 		// fire up a simple server to properly process the exception
 		$server = new Server();
 		$server->addPlugin(new ExceptionLoggerPlugin('webdav', \OC::$server->getLogger()));
 		$server->on('beforeMethod', function () use ($e) {
+			if ($e instanceof RemoteException) {
+				switch ($e->getCode()) {
+					case OC_Response::STATUS_SERVICE_UNAVAILABLE:
+						throw new ServiceUnavailable($e->getMessage());
+					case OC_Response::STATUS_NOT_FOUND:
+						throw new \Sabre\DAV\Exception\NotFound($e->getMessage());
+				}
+			}
 			$class = get_class($e);
 			$msg = $e->getMessage();
 			throw new ServiceUnavailable("$class: $msg");
 		});
 		$server->exec();
 	} else {
+		$statusCode = OC_Response::STATUS_INTERNAL_SERVER_ERROR;
 		if ($e instanceof \OC\ServiceUnavailableException ) {
-			OC_Response::setStatus(OC_Response::STATUS_SERVICE_UNAVAILABLE);
-		} else {
-			OC_Response::setStatus(OC_Response::STATUS_INTERNAL_SERVER_ERROR);
+			$statusCode = OC_Response::STATUS_SERVICE_UNAVAILABLE;
 		}
 		\OCP\Util::writeLog('remote', $e->getMessage(), \OCP\Util::FATAL);
-		OC_Template::printExceptionErrorPage($e);
+		if ($e instanceof RemoteException) {
+			OC_Response::setStatus($e->getCode());
+			OC_Template::printErrorPage($e->getMessage());
+		} else {
+			OC_Response::setStatus($statusCode);
+			OC_Template::printExceptionErrorPage($e);
+		}
 	}
 }
 
@@ -63,16 +84,13 @@ try {
 	if (\OCP\Util::needUpgrade()) {
 		// since the behavior of apps or remotes are unpredictable during
 		// an upgrade, return a 503 directly
-		OC_Response::setStatus(OC_Response::STATUS_SERVICE_UNAVAILABLE);
-		OC_Template::printErrorPage('Service unavailable');
-		exit;
+		throw new RemoteException('Service unavailable', OC_Response::STATUS_SERVICE_UNAVAILABLE);
 	}
 
 	$request = \OC::$server->getRequest();
 	$pathInfo = $request->getPathInfo();
 	if ($pathInfo === false || $pathInfo === '') {
-		OC_Response::setStatus(OC_Response::STATUS_NOT_FOUND);
-		exit;
+		throw new RemoteException('Path not found', OC_Response::STATUS_NOT_FOUND);
 	}
 	if (!$pos = strpos($pathInfo, '/', 1)) {
 		$pos = strlen($pathInfo);
@@ -82,8 +100,7 @@ try {
 	$file = \OC::$server->getConfig()->getAppValue('core', 'remote_' . $service);
 
 	if(is_null($file)) {
-		OC_Response::setStatus(OC_Response::STATUS_NOT_FOUND);
-		exit;
+		throw new RemoteException('Path not found', OC_Response::STATUS_NOT_FOUND);
 	}
 
 	// force language as given in the http request

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud.git



More information about the Pkg-owncloud-commits mailing list