From aedc427ffd73f9ab249f1722c197205bc366ed8d Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Thu, 3 Oct 2013 03:56:37 +0200 Subject: [PATCH] Fix fix of POST :P --- lib/private/appframework/http/request.php | 21 +++++++++++---------- tests/lib/appframework/http/RequestTest.php | 4 ++-- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/lib/private/appframework/http/request.php b/lib/private/appframework/http/request.php index b45ac2f009..f152956c8c 100644 --- a/lib/private/appframework/http/request.php +++ b/lib/private/appframework/http/request.php @@ -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 diff --git a/tests/lib/appframework/http/RequestTest.php b/tests/lib/appframework/http/RequestTest.php index acd61e7091..00473a8c44 100644 --- a/tests/lib/appframework/http/RequestTest.php +++ b/tests/lib/appframework/http/RequestTest.php @@ -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'), );