mirror of
https://github.com/nextcloud/server.git
synced 2026-05-28 04:32:30 -04:00
Merge pull request #14574 from owncloud/fix-irequest-for-older-php-versions
Read from IRequest instead of reading twice
This commit is contained in:
commit
be27188649
4 changed files with 48 additions and 122 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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{
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,72 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
namespace OC\Test;
|
||||
|
||||
/**
|
||||
* @package OC\Test
|
||||
*/
|
||||
class OC_TemplateLayout extends \Test\TestCase {
|
||||
|
||||
private $oldServerURI;
|
||||
private $oldScriptName;
|
||||
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$this->oldServerURI = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : null;
|
||||
$this->oldScriptName = $_SERVER['SCRIPT_NAME'];
|
||||
}
|
||||
|
||||
protected function tearDown() {
|
||||
if ($this->oldServerURI === null) {
|
||||
unset($_SERVER['REQUEST_URI']);
|
||||
} else {
|
||||
$_SERVER['REQUEST_URI'] = $this->oldServerURI;
|
||||
}
|
||||
$_SERVER['SCRIPT_NAME'] = $this->oldScriptName;
|
||||
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
/**
|
||||
* Contains valid file paths in the scheme array($absolutePath, $expectedPath)
|
||||
* @return array
|
||||
*/
|
||||
public function validFilePathProvider() {
|
||||
return array(
|
||||
array(\OC::$SERVERROOT . '/apps/files/js/fancyJS.js', '/apps/files/js/fancyJS.js'),
|
||||
array(\OC::$SERVERROOT. '/test.js', '/test.js'),
|
||||
array(\OC::$SERVERROOT . '/core/test.js', '/core/test.js'),
|
||||
array(\OC::$SERVERROOT, ''),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider validFilePathProvider
|
||||
*/
|
||||
public function testConvertToRelativePath($absolutePath, $expected) {
|
||||
$_SERVER['REQUEST_URI'] = $expected;
|
||||
$_SERVER['SCRIPT_NAME'] = $expected;
|
||||
|
||||
$relativePath = \Test_Helper::invokePrivate(new \OC_TemplateLayout('user'), 'convertToRelativePath', array($absolutePath));
|
||||
$this->assertEquals($expected, $relativePath);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Exception
|
||||
* @expectedExceptionMessage $filePath is not under the \OC::$SERVERROOT
|
||||
*/
|
||||
public function testInvalidConvertToRelativePath() {
|
||||
$invalidFile = '/this/file/is/invalid';
|
||||
$_SERVER['REQUEST_URI'] = $invalidFile;
|
||||
$_SERVER['SCRIPT_NAME'] = '/';
|
||||
|
||||
\Test_Helper::invokePrivate(new \OC_TemplateLayout('user'), 'convertToRelativePath', array($invalidFile));
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue