]> source.dussan.org Git - nextcloud-server.git/commitdiff
Fix fix of POST :P
authorThomas Tanghus <thomas@tanghus.net>
Thu, 3 Oct 2013 01:56:37 +0000 (03:56 +0200)
committerThomas Tanghus <thomas@tanghus.net>
Thu, 3 Oct 2013 01:56:37 +0000 (03:56 +0200)
lib/private/appframework/http/request.php
tests/lib/appframework/http/RequestTest.php

index b45ac2f009737123a3df644c6fe0737b4a50850e..f152956c8cf950f80cf37563009683e9cfe362bb 100644 (file)
@@ -31,6 +31,7 @@ use OCP\IRequest;
 
 class Request implements \ArrayAccess, \Countable, IRequest {
 
+       protected $inputStream;
        protected $content;
        protected $items = array();
        protected $allowedKeys = array(
@@ -66,12 +67,19 @@ class Request implements \ArrayAccess, \Countable, IRequest {
                                : array();
                }
 
+               if (defined('PHPUNIT_RUN') && PHPUNIT_RUN
+                       && in_array('fakeinput', stream_get_wrappers())) {
+                       $this->inputStream = 'fakeinput://data';
+               } else {
+                       $this->inputStream = 'php://input';
+               }
+
                // Only 'application/x-www-form-urlencoded' requests are automatically
                // transformed by PHP, 'application/json' must be decoded manually.
                if ($this->method === 'POST'
                        && strpos($this->getHeader('Content-Type'), 'application/json') !== false
                ) {
-                       $this->items['params'] = $this->items['post'] = json_decode(file_get_contents('php://input'), true);
+                       $this->items['params'] = $this->items['post'] = json_decode(file_get_contents($this->inputStream), true);
                }
 
                $this->items['parameters'] = array_merge(
@@ -311,24 +319,17 @@ class Request implements \ArrayAccess, \Countable, IRequest {
                        );
                }
 
-               if (defined('PHPUNIT_RUN') && PHPUNIT_RUN
-                       && in_array('fakeinput', stream_get_wrappers())) {
-                       $stream = 'fakeinput://data';
-               } else {
-                       $stream = 'php://input';
-               }
-
                // If the content can't be parsed into an array then return a stream resource.
                if ($this->method === 'PUT'
                        && strpos($this->getHeader('Content-Type'), 'application/x-www-form-urlencoded') === false
                        && strpos($this->getHeader('Content-Type'), 'application/json') === false
                ) {
                        $this->content = false;
-                       return fopen($stream, 'rb');
+                       return fopen($this->inputStream, 'rb');
                }
 
                if (is_null($this->content)) {
-                       $this->content = file_get_contents($stream);
+                       $this->content = file_get_contents($this->inputStream);
 
                        /*
                        * Normal jquery ajax requests are sent as application/x-www-form-urlencoded
index acd61e70919eda43ad3bcc19995c89d44f47a790..00473a8c44f9167827592591d6df7e6847cd8216 100644 (file)
@@ -115,8 +115,9 @@ class RequestTest extends \PHPUnit_Framework_TestCase {
        }
 
        public function testJsonPost() {
+               global $data;
+               $data = '{"name": "John Q. Public", "nickname": "Joey"}';
                $vars = array(
-                       'post' => '{"name": "John Q. Public", "nickname": "Joey"}',
                        'method' => 'POST',
                        'server' => array('CONTENT_TYPE' => 'application/json; utf-8'),
                );
@@ -135,7 +136,6 @@ class RequestTest extends \PHPUnit_Framework_TestCase {
                $data = http_build_query(array('name' => 'John Q. Public', 'nickname' => 'Joey'), '', '&');
 
                $vars = array(
-                       'patch' => $data,
                        'method' => 'PATCH',
                        'server' => array('CONTENT_TYPE' => 'application/x-www-form-urlencoded'),
                );