From c97b4274ccdc4fa841b164dedb608fdf351a0412 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Thu, 4 Oct 2018 21:06:00 +0200 Subject: [PATCH] Add function to generate urls for OCS routes fixes #11617 The OCS routes are only absolute for now as they are often exposed to the outside anyway and are on a different endpoint than index.php in anyway. Signed-off-by: Roeland Jago Douma --- lib/private/URLGenerator.php | 13 +++++++++++++ lib/public/IURLGenerator.php | 8 ++++++++ tests/lib/UrlGeneratorTest.php | 18 ++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/lib/private/URLGenerator.php b/lib/private/URLGenerator.php index 6f4f869238..f4a83138e4 100644 --- a/lib/private/URLGenerator.php +++ b/lib/private/URLGenerator.php @@ -91,6 +91,19 @@ class URLGenerator implements IURLGenerator { return $this->getAbsoluteURL($this->linkToRoute($routeName, $arguments)); } + public function linkToOCSRouteAbsolute(string $routeName, array $arguments = []): string { + $route = \OC::$server->getRouter()->generate('ocs.'.$routeName, $arguments, false); + + if (strpos($route, '/index.php') === 0) { + $route = substr($route, 10); + } + + $route = substr($route, 7); + $route = '/ocs/v2.php' . $route; + + return $this->getAbsoluteURL($route); + } + /** * Creates an url * @param string $app app diff --git a/lib/public/IURLGenerator.php b/lib/public/IURLGenerator.php index ebf3596755..368f65fe4c 100644 --- a/lib/public/IURLGenerator.php +++ b/lib/public/IURLGenerator.php @@ -50,6 +50,14 @@ interface IURLGenerator { */ public function linkToRouteAbsolute(string $routeName, array $arguments = array()): string; + /** + * @param string $routeName + * @param array $arguments + * @return string + * @since 15.0.0 + */ + public function linkToOCSRouteAbsolute(string $routeName, array $arguments = []): string; + /** * Returns an URL for an image or file * @param string $appName the name of the app diff --git a/tests/lib/UrlGeneratorTest.php b/tests/lib/UrlGeneratorTest.php index 340c9c7082..0e50f4d92e 100644 --- a/tests/lib/UrlGeneratorTest.php +++ b/tests/lib/UrlGeneratorTest.php @@ -162,4 +162,22 @@ class UrlGeneratorTest extends \Test\TestCase { $this->assertEquals($expected, $actual); } + /** + * @dataProvider provideOCSRoutes + */ + public function testLinkToOCSRouteAbsolute(string $route, string $expected) { + $this->mockBaseUrl(); + \OC::$WEBROOT = '/nextcloud'; + $result = $this->urlGenerator->linkToOCSRouteAbsolute($route); + $this->assertEquals($expected, $result); + } + + public function provideOCSRoutes() { + return [ + ['core.OCS.getCapabilities', 'http://localhost/nextcloud/ocs/v2.php/cloud/capabilities'], + ['core.WhatsNew.dismiss', 'http://localhost/nextcloud/ocs/v2.php/core/whatsnew'], + ]; + } + + }