Merge pull request #6035 from owncloud/fixing-rawpath-reverseproxy-oc6
Fixing rawpath reverseproxy oc6
This commit is contained in:
commit
4b67d4258d
|
@ -136,7 +136,18 @@ class OC_Request {
|
||||||
* @returns string Path info or false when not found
|
* @returns string Path info or false when not found
|
||||||
*/
|
*/
|
||||||
public static function getRawPathInfo() {
|
public static function getRawPathInfo() {
|
||||||
$path_info = substr($_SERVER['REQUEST_URI'], strlen($_SERVER['SCRIPT_NAME']));
|
$requestUri = $_SERVER['REQUEST_URI'];
|
||||||
|
// remove too many leading slashes - can be caused by reverse proxy configuration
|
||||||
|
if (strpos($requestUri, '/') === 0) {
|
||||||
|
$requestUri = '/' . ltrim($requestUri, '/');
|
||||||
|
}
|
||||||
|
|
||||||
|
$scriptName = $_SERVER['SCRIPT_NAME'];
|
||||||
|
// in case uri and script name don't match we better throw an exception
|
||||||
|
if (strpos($requestUri, $scriptName) !== 0) {
|
||||||
|
throw new Exception("REQUEST_URI($requestUri) does not start with the SCRIPT_NAME($scriptName)");
|
||||||
|
}
|
||||||
|
$path_info = substr($requestUri, strlen($scriptName));
|
||||||
// Remove the query string from REQUEST_URI
|
// Remove the query string from REQUEST_URI
|
||||||
if ($pos = strpos($path_info, '?')) {
|
if ($pos = strpos($path_info, '?')) {
|
||||||
$path_info = substr($path_info, 0, $pos);
|
$path_info = substr($path_info, 0, $pos);
|
||||||
|
|
|
@ -23,4 +23,46 @@ class Test_Request extends PHPUnit_Framework_TestCase {
|
||||||
$scriptName = OC_Request::scriptName();
|
$scriptName = OC_Request::scriptName();
|
||||||
$this->assertEquals('/domain.tld/ownCloud/tests/lib/request.php', $scriptName);
|
$this->assertEquals('/domain.tld/ownCloud/tests/lib/request.php', $scriptName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider rawPathInfoProvider
|
||||||
|
* @param $expected
|
||||||
|
* @param $requestUri
|
||||||
|
* @param $scriptName
|
||||||
|
*/
|
||||||
|
public function testRawPathInfo($expected, $requestUri, $scriptName) {
|
||||||
|
$_SERVER['REQUEST_URI'] = $requestUri;
|
||||||
|
$_SERVER['SCRIPT_NAME'] = $scriptName;
|
||||||
|
$rawPathInfo = OC_Request::getRawPathInfo();
|
||||||
|
$this->assertEquals($expected, $rawPathInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
function rawPathInfoProvider() {
|
||||||
|
return array(
|
||||||
|
array('/core/ajax/translations.php', 'index.php/core/ajax/translations.php', 'index.php'),
|
||||||
|
array('/core/ajax/translations.php', '/index.php/core/ajax/translations.php', '/index.php'),
|
||||||
|
array('/core/ajax/translations.php', '//index.php/core/ajax/translations.php', '/index.php'),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider rawPathInfoThrowsExceptionProvider
|
||||||
|
* @expectedException Exception
|
||||||
|
*
|
||||||
|
* @param $requestUri
|
||||||
|
* @param $scriptName
|
||||||
|
*/
|
||||||
|
public function testRawPathInfoThrowsException($requestUri, $scriptName) {
|
||||||
|
$_SERVER['REQUEST_URI'] = $requestUri;
|
||||||
|
$_SERVER['SCRIPT_NAME'] = $scriptName;
|
||||||
|
OC_Request::getRawPathInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
function rawPathInfoThrowsExceptionProvider() {
|
||||||
|
return array(
|
||||||
|
array('core/ajax/translations.php', '/index.php'),
|
||||||
|
array('/core/ajax/translations.php', '/index.php'),
|
||||||
|
array('//core/ajax/translations.php', '/index.php'),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue