Let ExceptionMiddleware properly return JSON on API related exceptions
Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
@@ -28,6 +28,7 @@ use OCA\Deck\Db\Acl;
|
||||
use OCA\Deck\Db\AclMapper;
|
||||
use OCA\Deck\Db\AssignedUsersMapper;
|
||||
use OCA\Deck\Db\CardMapper;
|
||||
use OCA\Deck\Middleware\ExceptionMiddleware;
|
||||
use OCA\Deck\Notification\Notifier;
|
||||
use OCP\AppFramework\App;
|
||||
use OCA\Deck\Middleware\SharingMiddleware;
|
||||
@@ -52,13 +53,13 @@ class Application extends App {
|
||||
$container = $this->getContainer();
|
||||
$server = $container->getServer();
|
||||
|
||||
$container->registerService('SharingMiddleware', function() use ($server) {
|
||||
return new SharingMiddleware(
|
||||
$container->registerService('ExceptionMiddleware', function() use ($server) {
|
||||
return new ExceptionMiddleware(
|
||||
$server->getLogger(),
|
||||
$server->getConfig()
|
||||
);
|
||||
});
|
||||
$container->registerMiddleWare('SharingMiddleware');
|
||||
$container->registerMiddleWare('ExceptionMiddleware');
|
||||
|
||||
$container->registerService('databaseType', function($container) {
|
||||
return $container->getServer()->getConfig()->getSystemValue('dbtype', 'sqlite');
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
|
||||
namespace OCA\Deck\Middleware;
|
||||
|
||||
use OCA\Deck\Controller\PageController;
|
||||
use OCA\Deck\StatusException;
|
||||
use OCA\Deck\BadRequestException;
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
use OCP\AppFramework\Middleware;
|
||||
use OCP\AppFramework\Http\JSONResponse;
|
||||
@@ -33,7 +33,7 @@ use OCP\Util;
|
||||
use OCP\IConfig;
|
||||
|
||||
|
||||
class SharingMiddleware extends Middleware {
|
||||
class ExceptionMiddleware extends Middleware {
|
||||
|
||||
/** @var ILogger */
|
||||
private $logger;
|
||||
@@ -71,6 +71,20 @@ class SharingMiddleware extends Middleware {
|
||||
], $exception->getStatus());
|
||||
}
|
||||
|
||||
if (strpos(get_class($controller), 'OCA\\Deck\\Controller\\') === 0) {
|
||||
$response = [
|
||||
'status' => 500,
|
||||
'message' => $exception->getMessage()
|
||||
];
|
||||
if ($this->config->getSystemValue('loglevel', Util::WARN) === Util::DEBUG) {
|
||||
$this->logger->logException($exception);
|
||||
}
|
||||
if ($this->config->getSystemValue('debug', true) === true) {
|
||||
$response['exception'] = (array) $exception;
|
||||
}
|
||||
return new JSONResponse($response, 500);
|
||||
}
|
||||
|
||||
// uncatched DoesNotExistExceptions will be thrown when the main entity is not found
|
||||
// we return a 403 so we don't leak information over existing entries
|
||||
// TODO: At some point those should properly be catched in the service classes
|
||||
@@ -84,4 +98,4 @@ class SharingMiddleware extends Middleware {
|
||||
throw $exception;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user