diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2015-03-03 14:22:56 +0100 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2015-03-03 14:22:56 +0100 |
commit | be27188649c25190aca19e1a4b3dbb58eef129f8 (patch) | |
tree | d93cbb6835860777cfc3f0b8f670d61465674b66 /lib/private | |
parent | e30ca8198f4535cdb9f14feb335b68d363aec426 (diff) | |
parent | faddd1e2565d01aa55ca23ee809170eb0a2cba98 (diff) | |
download | nextcloud-server-be27188649c25190aca19e1a4b3dbb58eef129f8.tar.gz nextcloud-server-be27188649c25190aca19e1a4b3dbb58eef129f8.zip |
Merge pull request #14574 from owncloud/fix-irequest-for-older-php-versions
Read from IRequest instead of reading twice
Diffstat (limited to 'lib/private')
-rw-r--r-- | lib/private/api.php | 11 | ||||
-rw-r--r-- | lib/private/ocs.php | 1 | ||||
-rw-r--r-- | lib/private/server.php | 86 |
3 files changed, 48 insertions, 50 deletions
diff --git a/lib/private/api.php b/lib/private/api.php index c58d2620684..23924c518bb 100644 --- a/lib/private/api.php +++ b/lib/private/api.php @@ -84,11 +84,14 @@ class OC_API { * @param array $parameters */ public static function call($parameters) { + $request = \OC::$server->getRequest(); + $method = $request->getMethod(); + // Prepare the request variables - if($_SERVER['REQUEST_METHOD'] == 'PUT') { - parse_str(file_get_contents("php://input"), $parameters['_put']); - } else if($_SERVER['REQUEST_METHOD'] == 'DELETE') { - parse_str(file_get_contents("php://input"), $parameters['_delete']); + if($method === 'PUT') { + $parameters['_put'] = $request->getParams(); + } else if($method === 'DELETE') { + $parameters['_delete'] = $request->getParams(); } $name = $parameters['_route']; // Foreach registered action diff --git a/lib/private/ocs.php b/lib/private/ocs.php index bbe642a247d..d43811e339b 100644 --- a/lib/private/ocs.php +++ b/lib/private/ocs.php @@ -76,7 +76,6 @@ class OC_OCS { $method='get'; }elseif($_SERVER['REQUEST_METHOD'] == 'PUT') { $method='put'; - parse_str(file_get_contents("php://input"), $put_vars); }elseif($_SERVER['REQUEST_METHOD'] == 'POST') { $method='post'; }else{ diff --git a/lib/private/server.php b/lib/private/server.php index a16854d6288..18d996537e2 100644 --- a/lib/private/server.php +++ b/lib/private/server.php @@ -268,6 +268,46 @@ class Server extends SimpleContainer implements IServerContainer { $this->registerService('TrustedDomainHelper', function ($c) { return new TrustedDomainHelper($this->getConfig()); }); + $this->registerService('Request', function ($c) { + if (isset($this['urlParams'])) { + $urlParams = $this['urlParams']; + } else { + $urlParams = []; + } + + if ($this->getSession()->exists('requesttoken')) { + $requestToken = $this->getSession()->get('requesttoken'); + } else { + $requestToken = false; + } + + if (defined('PHPUNIT_RUN') && PHPUNIT_RUN + && in_array('fakeinput', stream_get_wrappers()) + ) { + $stream = 'fakeinput://data'; + } else { + $stream = 'php://input'; + } + + return new Request( + [ + 'get' => $_GET, + 'post' => $_POST, + 'files' => $_FILES, + 'server' => $_SERVER, + 'env' => $_ENV, + 'cookies' => $_COOKIE, + 'method' => (isset($_SERVER) && isset($_SERVER['REQUEST_METHOD'])) + ? $_SERVER['REQUEST_METHOD'] + : null, + 'urlParams' => $urlParams, + 'requesttoken' => $requestToken, + ], + $this->getSecureRandom(), + $this->getConfig(), + $stream + ); + }); } /** @@ -282,54 +322,10 @@ class Server extends SimpleContainer implements IServerContainer { * currently being processed is returned from this method. * In case the current execution was not initiated by a web request null is returned * - * FIXME: This should be queried as well. However, due to our totally awesome - * static code a lot of tests do stuff like $_SERVER['foo'] which obviously - * will not work with that approach. We even have some integration tests in our - * unit tests which setup a complete webserver. Once the code is all non-static - * or we don't have such mixed integration/unit tests setup anymore this can - * get moved out again. - * * @return \OCP\IRequest|null */ function getRequest() { - if (isset($this['urlParams'])) { - $urlParams = $this['urlParams']; - } else { - $urlParams = array(); - } - - if ($this->getSession()->exists('requesttoken')) { - $requestToken = $this->getSession()->get('requesttoken'); - } else { - $requestToken = false; - } - - if (defined('PHPUNIT_RUN') && PHPUNIT_RUN - && in_array('fakeinput', stream_get_wrappers()) - ) { - $stream = 'fakeinput://data'; - } else { - $stream = 'php://input'; - } - - return new Request( - [ - 'get' => $_GET, - 'post' => $_POST, - 'files' => $_FILES, - 'server' => $_SERVER, - 'env' => $_ENV, - 'cookies' => $_COOKIE, - 'method' => (isset($_SERVER) && isset($_SERVER['REQUEST_METHOD'])) - ? $_SERVER['REQUEST_METHOD'] - : null, - 'urlParams' => $urlParams, - 'requesttoken' => $requestToken, - ], - $this->getSecureRandom(), - $this->getConfig(), - $stream - ); + return $this->query('Request'); } /** |