aboutsummaryrefslogtreecommitdiffstats
path: root/remote.php
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2015-06-29 15:47:05 +0200
committerThomas Müller <thomas.mueller@tmit.eu>2015-06-30 15:05:59 +0200
commit5dc7eebcdb6614622bf422a278452a20944d7221 (patch)
tree9cca4a0fd9de49ee17d8d6c81e40f8bb1a711db0 /remote.php
parent3f3c603922bc57179fef5fbedaf6f28aa58293d1 (diff)
downloadnextcloud-server-5dc7eebcdb6614622bf422a278452a20944d7221.tar.gz
nextcloud-server-5dc7eebcdb6614622bf422a278452a20944d7221.zip
Adding request specific exception handling - now with WebDAV responses - refs #17192
Diffstat (limited to 'remote.php')
-rw-r--r--remote.php40
1 files changed, 33 insertions, 7 deletions
diff --git a/remote.php b/remote.php
index c1077e42672..5b4f6e11902 100644
--- a/remote.php
+++ b/remote.php
@@ -25,6 +25,38 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
+
+use OC\Connector\Sabre\ExceptionLoggerPlugin;
+use Sabre\DAV\Exception\ServiceUnavailable;
+use Sabre\DAV\Server;
+
+/**
+ * @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') {
+ // 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) {
+ $class = get_class($e);
+ $msg = $e->getMessage();
+ throw new ServiceUnavailable("$class: $msg");
+ });
+ $server->exec();
+ } else {
+ if ($e instanceof \OC\ServiceUnavailableException ) {
+ OC_Response::setStatus(OC_Response::STATUS_SERVICE_UNAVAILABLE);
+ } else {
+ OC_Response::setStatus(OC_Response::STATUS_INTERNAL_SERVER_ERROR);
+ }
+ \OCP\Util::writeLog('remote', $e->getMessage(), \OCP\Util::FATAL);
+ OC_Template::printExceptionErrorPage($e);
+ }
+}
+
try {
require_once 'lib/base.php';
@@ -82,12 +114,6 @@ try {
$baseuri = OC::$WEBROOT . '/remote.php/'.$service.'/';
require_once $file;
-} catch (\OC\ServiceUnavailableException $ex) {
- OC_Response::setStatus(OC_Response::STATUS_SERVICE_UNAVAILABLE);
- \OCP\Util::writeLog('remote', $ex->getMessage(), \OCP\Util::FATAL);
- OC_Template::printExceptionErrorPage($ex);
} catch (Exception $ex) {
- OC_Response::setStatus(OC_Response::STATUS_INTERNAL_SERVER_ERROR);
- \OCP\Util::writeLog('remote', $ex->getMessage(), \OCP\Util::FATAL);
- OC_Template::printExceptionErrorPage($ex);
+ handleException($ex);
}