Skip to content

Commit e5f50da

Browse files
Merge pull request #55620 from nextcloud/fix/appframework/check-reponder-existence
2 parents 0ce4b4b + f720925 commit e5f50da

File tree

3 files changed

+13
-6
lines changed

3 files changed

+13
-6
lines changed

lib/private/AppFramework/Http/Dispatcher.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,7 @@ private function executeController(Controller $controller, string $methodName):
222222
// format response
223223
if ($response instanceof DataResponse || !($response instanceof Response)) {
224224
$format = $this->request->getFormat();
225-
226-
if ($format !== null) {
225+
if ($format !== null && $controller->isResponderRegistered($format)) {
227226
$response = $controller->buildResponse($response, $format);
228227
} else {
229228
$response = $controller->buildResponse($response);

lib/private/AppFramework/Middleware/OCSMiddleware.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,10 @@ public function afterController($controller, $methodName, Response $response) {
110110
* @return V1Response|V2Response
111111
*/
112112
private function buildNewResponse(Controller $controller, $code, $message) {
113-
$format = $this->request->getFormat() ?? 'xml';
113+
$format = $this->request->getFormat();
114+
if ($format === null || !$controller->isResponderRegistered($format)) {
115+
$format = 'xml';
116+
}
114117

115118
$data = new DataResponse();
116119
$data->setStatus($code);

lib/public/AppFramework/Controller.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
*/
88
namespace OCP\AppFramework;
99

10+
use Closure;
1011
use OCP\AppFramework\Http\DataResponse;
1112
use OCP\AppFramework\Http\JSONResponse;
1213
use OCP\AppFramework\Http\Response;
@@ -32,7 +33,7 @@ abstract class Controller {
3233
protected $request;
3334

3435
/**
35-
* @var array
36+
* @var array<string, Closure>
3637
* @since 7.0.0
3738
*/
3839
private $responders;
@@ -113,10 +114,10 @@ public function getResponderByHTTPHeader($acceptHeader, $default = 'json') {
113114
/**
114115
* Registers a formatter for a type
115116
* @param string $format
116-
* @param \Closure $responder
117+
* @param Closure $responder
117118
* @since 7.0.0
118119
*/
119-
protected function registerResponder($format, \Closure $responder) {
120+
protected function registerResponder($format, Closure $responder) {
120121
$this->responders[$format] = $responder;
121122
}
122123

@@ -139,4 +140,8 @@ public function buildResponse($response, $format = 'json') {
139140
throw new \DomainException('No responder registered for format '
140141
. $format . '!');
141142
}
143+
144+
public function isResponderRegistered(string $responder): bool {
145+
return isset($this->responders[$responder]);
146+
}
142147
}

0 commit comments

Comments
 (0)