|
|
|
@ -50,42 +50,46 @@ class RemoteException extends Exception { |
|
|
|
|
* @param Exception|Error $e |
|
|
|
|
*/ |
|
|
|
|
function handleException($e) { |
|
|
|
|
$request = \OC::$server->getRequest(); |
|
|
|
|
// in case the request content type is text/xml - we assume it's a WebDAV request |
|
|
|
|
$isXmlContentType = strpos($request->getHeader('Content-Type'), 'text/xml'); |
|
|
|
|
if ($isXmlContentType === 0) { |
|
|
|
|
// fire up a simple server to properly process the exception |
|
|
|
|
$server = new Server(); |
|
|
|
|
if (!($e instanceof RemoteException)) { |
|
|
|
|
// we shall not log on RemoteException |
|
|
|
|
$server->addPlugin(new ExceptionLoggerPlugin('webdav', \OC::$server->get(LoggerInterface::class))); |
|
|
|
|
} |
|
|
|
|
$server->on('beforeMethod:*', function () use ($e) { |
|
|
|
|
if ($e instanceof RemoteException) { |
|
|
|
|
switch ($e->getCode()) { |
|
|
|
|
case 503: |
|
|
|
|
throw new ServiceUnavailable($e->getMessage()); |
|
|
|
|
case 404: |
|
|
|
|
throw new \Sabre\DAV\Exception\NotFound($e->getMessage()); |
|
|
|
|
} |
|
|
|
|
try { |
|
|
|
|
$request = \OC::$server->getRequest(); |
|
|
|
|
// in case the request content type is text/xml - we assume it's a WebDAV request |
|
|
|
|
$isXmlContentType = strpos($request->getHeader('Content-Type'), 'text/xml'); |
|
|
|
|
if ($isXmlContentType === 0) { |
|
|
|
|
// fire up a simple server to properly process the exception |
|
|
|
|
$server = new Server(); |
|
|
|
|
if (!($e instanceof RemoteException)) { |
|
|
|
|
// we shall not log on RemoteException |
|
|
|
|
$server->addPlugin(new ExceptionLoggerPlugin('webdav', \OC::$server->get(LoggerInterface::class))); |
|
|
|
|
} |
|
|
|
|
$class = get_class($e); |
|
|
|
|
$msg = $e->getMessage(); |
|
|
|
|
throw new ServiceUnavailable("$class: $msg"); |
|
|
|
|
}); |
|
|
|
|
$server->exec(); |
|
|
|
|
} else { |
|
|
|
|
$statusCode = 500; |
|
|
|
|
if ($e instanceof \OC\ServiceUnavailableException) { |
|
|
|
|
$statusCode = 503; |
|
|
|
|
} |
|
|
|
|
if ($e instanceof RemoteException) { |
|
|
|
|
// we shall not log on RemoteException |
|
|
|
|
OC_Template::printErrorPage($e->getMessage(), '', $e->getCode()); |
|
|
|
|
$server->on('beforeMethod:*', function () use ($e) { |
|
|
|
|
if ($e instanceof RemoteException) { |
|
|
|
|
switch ($e->getCode()) { |
|
|
|
|
case 503: |
|
|
|
|
throw new ServiceUnavailable($e->getMessage()); |
|
|
|
|
case 404: |
|
|
|
|
throw new \Sabre\DAV\Exception\NotFound($e->getMessage()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
$class = get_class($e); |
|
|
|
|
$msg = $e->getMessage(); |
|
|
|
|
throw new ServiceUnavailable("$class: $msg"); |
|
|
|
|
}); |
|
|
|
|
$server->exec(); |
|
|
|
|
} else { |
|
|
|
|
\OC::$server->get(LoggerInterface::class)->error($e->getMessage(), ['app' => 'remote','exception' => $e]); |
|
|
|
|
OC_Template::printExceptionErrorPage($e, $statusCode); |
|
|
|
|
$statusCode = 500; |
|
|
|
|
if ($e instanceof \OC\ServiceUnavailableException) { |
|
|
|
|
$statusCode = 503; |
|
|
|
|
} |
|
|
|
|
if ($e instanceof RemoteException) { |
|
|
|
|
// we shall not log on RemoteException |
|
|
|
|
OC_Template::printErrorPage($e->getMessage(), '', $e->getCode()); |
|
|
|
|
} else { |
|
|
|
|
\OC::$server->get(LoggerInterface::class)->error($e->getMessage(), ['app' => 'remote','exception' => $e]); |
|
|
|
|
OC_Template::printExceptionErrorPage($e, $statusCode); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} catch (\Exception $e) { |
|
|
|
|
OC_Template::printExceptionErrorPage($e, 500); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|