]> source.dussan.org Git - nextcloud-server.git/commitdiff
AppFramework do not get default response 508/head
authorRoeland Jago Douma <roeland@famdouma.nl>
Wed, 20 Jul 2016 19:30:39 +0000 (21:30 +0200)
committerRoeland Jago Douma <roeland@famdouma.nl>
Thu, 21 Jul 2016 18:32:48 +0000 (20:32 +0200)
The OCSResponse differs from other responses in that it defaults to
XML. However we fell back to json by default.

This makes sure that if nothing is set we don't pass anything.
Which defaults then to the controllers default (which is often 'json')
but in the case of the OCSResponse 'xml'.

lib/private/AppFramework/Http/Dispatcher.php
lib/private/AppFramework/Middleware/OCSMiddleware.php
lib/public/AppFramework/Controller.php
lib/public/AppFramework/OCSController.php

index fdf99a578418e9874313ed058a0600ae73835958..965d340fc776b421df23d64407f236c5a58522f7 100644 (file)
@@ -167,10 +167,14 @@ class Dispatcher {
                        // if none is given try the first Accept header
                        if($format === null) {
                                $headers = $this->request->getHeader('Accept');
-                               $format = $controller->getResponderByHTTPHeader($headers);
+                               $format = $controller->getResponderByHTTPHeader($headers, null);
                        }
 
-                       $response = $controller->buildResponse($response, $format);
+                       if ($format !== null) {
+                               $response = $controller->buildResponse($response, $format);
+                       } else {
+                               $response = $controller->buildResponse($response);
+                       }
                }
 
                return $response;
index 2c7d1167e7cb76cbcacea93adcb30fa2155a7669..b21e8e05a9016185ac986afb416c5ed7e8c5432e 100644 (file)
@@ -72,7 +72,7 @@ class OCSMiddleware extends Middleware {
                // if none is given try the first Accept header
                if($format === null) {
                        $headers = $this->request->getHeader('Accept');
-                       $format = $controller->getResponderByHTTPHeader($headers);
+                       $format = $controller->getResponderByHTTPHeader($headers, 'xml');
                }
 
                return $format;
index daf6018cd12613ce9cb44bd664df23563004bb87..c6baa5e30c16e8f177380688cbc78f59856eb5cc 100644 (file)
@@ -104,8 +104,9 @@ abstract class Controller {
         * @param string $acceptHeader
         * @return string the responder type
         * @since 7.0.0
+        * @since 9.1.0 Added default parameter
         */
-       public function getResponderByHTTPHeader($acceptHeader) {
+       public function getResponderByHTTPHeader($acceptHeader, $default='json') {
                $headers = explode(',', $acceptHeader);
 
                // return the first matching responder
@@ -119,8 +120,8 @@ abstract class Controller {
                        }
                }
 
-               // no matching header defaults to json
-               return 'json';
+               // no matching header return default
+               return $default;
        }
 
 
index e118b34250d158dfebcb73575800c2b80a0b6641..e67c0fc21aeb28daff18082fd2f3dc63a997b1fe 100644 (file)
@@ -31,6 +31,7 @@ namespace OCP\AppFramework;
 
 use OCP\AppFramework\Http\DataResponse;
 use OCP\AppFramework\Http\OCSResponse;
+use OCP\AppFramework\Http\Response;
 use OCP\IRequest;
 
 
@@ -69,6 +70,19 @@ abstract class OCSController extends ApiController {
                });
        }
 
+       /**
+        * Since the OCS endpoints default to XML we need to find out the format
+        * again
+        * @param mixed $response the value that was returned from a controller and
+        * is not a Response instance
+        * @param string $format the format for which a formatter has been registered
+        * @throws \DomainException if format does not match a registered formatter
+        * @return Response
+        * @since 9.1.0
+        */
+       public function buildResponse($response, $format = 'xml') {
+               return parent::buildResponse($response, $format);
+       }
 
        /**
         * Unwrap data and build ocs response