Adding request specific exception handling - now with WebDAV responses - refs #17192
This commit is contained in:
parent
3f3c603922
commit
5dc7eebcdb
40
remote.php
40
remote.php
|
@ -25,6 +25,38 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
* 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 {
|
try {
|
||||||
require_once 'lib/base.php';
|
require_once 'lib/base.php';
|
||||||
|
|
||||||
|
@ -82,12 +114,6 @@ try {
|
||||||
$baseuri = OC::$WEBROOT . '/remote.php/'.$service.'/';
|
$baseuri = OC::$WEBROOT . '/remote.php/'.$service.'/';
|
||||||
require_once $file;
|
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) {
|
} catch (Exception $ex) {
|
||||||
OC_Response::setStatus(OC_Response::STATUS_INTERNAL_SERVER_ERROR);
|
handleException($ex);
|
||||||
\OCP\Util::writeLog('remote', $ex->getMessage(), \OCP\Util::FATAL);
|
|
||||||
OC_Template::printExceptionErrorPage($ex);
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue