Skip to content
Snippets Groups Projects
Unverified Commit 0023cb12 authored by Roeland Jago Douma's avatar Roeland Jago Douma Committed by GitHub
Browse files

Merge pull request #7853 from nextcloud/strict_urlgenerator

Make the URLGenerator strict
parents d44de92c a3b33bea
No related branches found
No related tags found
No related merge requests found
<?php
declare(strict_types=1);
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
......@@ -34,12 +35,10 @@
namespace OC;
use OCP\ICacheFactory;
use OCP\IConfig;
use OCP\IRequest;
use OCP\IURLGenerator;
use OCP\Route\IRoute;
use RuntimeException;
/**
......@@ -74,10 +73,9 @@ class URLGenerator implements IURLGenerator {
*
* Returns a url to the given route.
*/
public function linkToRoute($route, $parameters = array()) {
public function linkToRoute(string $route, array $parameters = array()): string {
// TODO: mock router
$urlLinkTo = \OC::$server->getRouter()->generate($route, $parameters);
return $urlLinkTo;
return \OC::$server->getRouter()->generate($route, $parameters);
}
/**
......@@ -88,7 +86,7 @@ class URLGenerator implements IURLGenerator {
*
* Returns an absolute url to the given route.
*/
public function linkToRouteAbsolute($routeName, $arguments = array()) {
public function linkToRouteAbsolute(string $routeName, array $arguments = array()): string {
return $this->getAbsoluteURL($this->linkToRoute($routeName, $arguments));
}
......@@ -102,20 +100,20 @@ class URLGenerator implements IURLGenerator {
*
* Returns a url to the given app and file.
*/
public function linkTo( $app, $file, $args = array() ) {
public function linkTo(string $app, string $file, array $args = array()): string {
$frontControllerActive = ($this->config->getSystemValue('htaccess.IgnoreFrontController', false) === true || getenv('front_controller_active') === 'true');
if( $app != '' ) {
if( $app !== '' ) {
$app_path = \OC_App::getAppPath($app);
// Check if the app is in the app folder
if ($app_path && file_exists($app_path . '/' . $file)) {
if (substr($file, -3) == 'php') {
if (substr($file, -3) === 'php') {
$urlLinkTo = \OC::$WEBROOT . '/index.php/apps/' . $app;
if ($frontControllerActive) {
$urlLinkTo = \OC::$WEBROOT . '/apps/' . $app;
}
$urlLinkTo .= ($file != 'index.php') ? '/' . $file : '';
$urlLinkTo .= ($file !== 'index.php') ? '/' . $file : '';
} else {
$urlLinkTo = \OC_App::getAppWebPath($app) . '/' . $file;
}
......@@ -150,7 +148,7 @@ class URLGenerator implements IURLGenerator {
*
* Returns the path to the image.
*/
public function imagePath($app, $image) {
public function imagePath(string $app, string $image): string {
$cache = $this->cacheFactory->createDistributed('imagePath-'.md5($this->getBaseUrl()).'-');
$cacheKey = $app.'-'.$image;
if($key = $cache->get($cacheKey)) {
......@@ -210,9 +208,9 @@ class URLGenerator implements IURLGenerator {
if($path !== '') {
$cache->set($cacheKey, $path);
return $path;
} else {
throw new RuntimeException('image not found: image:' . $image . ' webroot:' . \OC::$WEBROOT . ' serverroot:' . \OC::$SERVERROOT);
}
throw new RuntimeException('image not found: image:' . $image . ' webroot:' . \OC::$WEBROOT . ' serverroot:' . \OC::$SERVERROOT);
}
......@@ -221,15 +219,15 @@ class URLGenerator implements IURLGenerator {
* @param string $url the url in the ownCloud host
* @return string the absolute version of the url
*/
public function getAbsoluteURL($url) {
public function getAbsoluteURL(string $url): string {
$separator = $url[0] === '/' ? '' : '/';
if (\OC::$CLI && !defined('PHPUNIT_RUN')) {
if (\OC::$CLI && !\defined('PHPUNIT_RUN')) {
return rtrim($this->config->getSystemValue('overwrite.cli.url'), '/') . '/' . ltrim($url, '/');
}
// The ownCloud web root can already be prepended.
if(substr($url, 0, strlen(\OC::$WEBROOT)) === \OC::$WEBROOT) {
$url = substr($url, strlen(\OC::$WEBROOT));
if(substr($url, 0, \strlen(\OC::$WEBROOT)) === \OC::$WEBROOT) {
$url = substr($url, \strlen(\OC::$WEBROOT));
}
return $this->getBaseUrl() . $separator . $url;
......@@ -239,7 +237,7 @@ class URLGenerator implements IURLGenerator {
* @param string $key
* @return string url to the online documentation
*/
public function linkToDocs($key) {
public function linkToDocs(string $key): string {
$theme = \OC::$server->getThemingDefaults();
return $theme->buildDocLinkToKey($key);
}
......@@ -247,7 +245,7 @@ class URLGenerator implements IURLGenerator {
/**
* @return string base url of the current request
*/
public function getBaseUrl() {
public function getBaseUrl(): string {
return $this->request->getServerProtocol() . '://' . $this->request->getServerHost() . \OC::$WEBROOT;
}
}
<?php
declare(strict_types=1);
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
......@@ -24,14 +25,6 @@
*
*/
/**
* Public interface of ownCloud for apps to use.
* URL generator interface
*
*/
// use OCP namespace for all classes that are considered public.
// This means that they should be used by apps instead of the internal ownCloud classes
namespace OCP;
/**
......@@ -46,7 +39,7 @@ interface IURLGenerator {
* @return string the url
* @since 6.0.0
*/
public function linkToRoute($routeName, $arguments = array());
public function linkToRoute(string $routeName, array $arguments = array()): string;
/**
* Returns the absolute URL for a route
......@@ -55,7 +48,7 @@ interface IURLGenerator {
* @return string the absolute url
* @since 8.0.0
*/
public function linkToRouteAbsolute($routeName, $arguments = array());
public function linkToRouteAbsolute(string $routeName, array $arguments = array()): string;
/**
* Returns an URL for an image or file
......@@ -66,7 +59,7 @@ interface IURLGenerator {
* @return string the url
* @since 6.0.0
*/
public function linkTo($appName, $file, $args = array());
public function linkTo(string $appName, string $file, array $args = array()): string;
/**
* Returns the link to an image, like linkTo but only with prepending img/
......@@ -75,7 +68,7 @@ interface IURLGenerator {
* @return string the url
* @since 6.0.0
*/
public function imagePath($appName, $file);
public function imagePath(string $appName, string $file): string;
/**
......@@ -84,18 +77,18 @@ interface IURLGenerator {
* @return string the absolute version of the url
* @since 6.0.0
*/
public function getAbsoluteURL($url);
public function getAbsoluteURL(string $url): string;
/**
* @param string $key
* @return string url to the online documentation
* @since 8.0.0
*/
public function linkToDocs($key);
public function linkToDocs(string $key): string;
/**
* @return string base url of the current request
* @since 13.0.0
*/
public function getBaseUrl();
public function getBaseUrl(): string;
}
......@@ -60,6 +60,8 @@ class NewUserMailHelperTest extends TestCase {
parent::setUp();
$this->defaults = $this->createMock(Defaults::class);
$this->defaults->method('getLogo')
->willReturn('myLogo');
$this->urlGenerator = $this->createMock(IURLGenerator::class);
$this->l10n = $this->createMock(IL10N::class);
$this->mailer = $this->createMock(IMailer::class);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment