mirror of
https://github.com/nextcloud/server.git
synced 2026-05-13 17:10:43 -04:00
fix: Fix linkToOCSRouteAbsolute() without index.php and subfolder
Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
parent
073a54e60b
commit
187c956c12
2 changed files with 27 additions and 10 deletions
|
|
@ -116,16 +116,25 @@ class URLGenerator implements IURLGenerator {
|
|||
}
|
||||
|
||||
public function linkToOCSRouteAbsolute(string $routeName, array $arguments = []): string {
|
||||
// Returns `/subfolder/index.php/ocsapp/…` with `'htaccess.IgnoreFrontController' => false` in config.php
|
||||
// And `/subfolder/ocsapp/…` with `'htaccess.IgnoreFrontController' => true` in config.php
|
||||
$route = $this->router->generate('ocs.'.$routeName, $arguments, false);
|
||||
|
||||
$indexPhpPos = strpos($route, '/index.php/');
|
||||
if ($indexPhpPos !== false) {
|
||||
$route = substr($route, $indexPhpPos + 10);
|
||||
// Cut off `/subfolder`
|
||||
if (\OC::$WEBROOT !== '' && str_starts_with($route, \OC::$WEBROOT)) {
|
||||
$route = substr($route, \strlen(\OC::$WEBROOT));
|
||||
}
|
||||
|
||||
if (str_starts_with($route, '/index.php/')) {
|
||||
$route = substr($route, 10);
|
||||
}
|
||||
|
||||
// Remove `ocsapp/` bit
|
||||
$route = substr($route, 7);
|
||||
// Prefix with ocs/v2.php endpoint
|
||||
$route = '/ocs/v2.php' . $route;
|
||||
|
||||
// Turn into an absolute URL
|
||||
return $this->getAbsoluteURL($route);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -192,26 +192,34 @@ class UrlGeneratorTest extends \Test\TestCase {
|
|||
/**
|
||||
* @dataProvider provideOCSRoutes
|
||||
*/
|
||||
public function testLinkToOCSRouteAbsolute(string $route, string $expected) {
|
||||
public function testLinkToOCSRouteAbsolute(string $route, bool $ignoreFrontController, string $expected): void {
|
||||
$this->mockBaseUrl();
|
||||
\OC::$WEBROOT = '/nextcloud';
|
||||
$this->router->expects($this->once())
|
||||
->method('generate')
|
||||
->willReturnCallback(function ($routeName, $parameters) {
|
||||
->willReturnCallback(function (string $routeName, array $parameters) use ($ignoreFrontController) {
|
||||
if ($routeName === 'ocs.core.OCS.getCapabilities') {
|
||||
return '/index.php/ocsapp/cloud/capabilities';
|
||||
if (!$ignoreFrontController) {
|
||||
return '/nextcloud/index.php/ocsapp/cloud/capabilities';
|
||||
}
|
||||
return '/nextcloud/ocsapp/cloud/capabilities';
|
||||
} elseif ($routeName === 'ocs.core.WhatsNew.dismiss') {
|
||||
return '/index.php/ocsapp/core/whatsnew';
|
||||
if (!$ignoreFrontController) {
|
||||
return '/nextcloud/index.php/ocsapp/core/whatsnew';
|
||||
}
|
||||
return '/nextcloud/ocsapp/core/whatsnew';
|
||||
}
|
||||
});
|
||||
$result = $this->urlGenerator->linkToOCSRouteAbsolute($route);
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
public function provideOCSRoutes() {
|
||||
public function provideOCSRoutes(): array {
|
||||
return [
|
||||
['core.OCS.getCapabilities', 'http://localhost/nextcloud/ocs/v2.php/cloud/capabilities'],
|
||||
['core.WhatsNew.dismiss', 'http://localhost/nextcloud/ocs/v2.php/core/whatsnew'],
|
||||
['core.OCS.getCapabilities', false, 'http://localhost/nextcloud/ocs/v2.php/cloud/capabilities'],
|
||||
['core.OCS.getCapabilities', true, 'http://localhost/nextcloud/ocs/v2.php/cloud/capabilities'],
|
||||
['core.WhatsNew.dismiss', false, 'http://localhost/nextcloud/ocs/v2.php/core/whatsnew'],
|
||||
['core.WhatsNew.dismiss', true, 'http://localhost/nextcloud/ocs/v2.php/core/whatsnew'],
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue