X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FApp%2FBaseURL.php;h=9152d4bc2f5d3cfefc1c8a6b8e46b7234c38d31b;hb=3d5b81e4efda83c8b3621f15036dcfd960cf7e4e;hp=8d76a0d2d25d9dcaa519dc87a64f88907e2bc046;hpb=70023dccbddb2fdf620010f8daf63042184611bf;p=friendica.git diff --git a/src/App/BaseURL.php b/src/App/BaseURL.php index 8d76a0d2d2..9152d4bc2f 100644 --- a/src/App/BaseURL.php +++ b/src/App/BaseURL.php @@ -1,10 +1,31 @@ . + * + */ namespace Friendica\App; -use Friendica\Core\Config\Configuration; +use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\System; use Friendica\Util\Network; use Friendica\Util\Strings; +use Friendica\Network\HTTPException; /** * A class which checks and contains the basic @@ -35,7 +56,7 @@ class BaseURL /** * The Friendica Config * - * @var Configuration + * @var IManageConfigValues */ private $config; @@ -86,7 +107,7 @@ class BaseURL * * @return string */ - public function getHostname() + public function getHostname(): string { return $this->hostname; } @@ -96,7 +117,7 @@ class BaseURL * * @return string */ - public function getScheme() + public function getScheme(): string { return $this->scheme; } @@ -106,7 +127,7 @@ class BaseURL * * @return int */ - public function getSSLPolicy() + public function getSSLPolicy(): int { return $this->sslPolicy; } @@ -116,7 +137,7 @@ class BaseURL * * @return string */ - public function getUrlPath() + public function getUrlPath(): string { return $this->urlPath; } @@ -130,7 +151,7 @@ class BaseURL * * @return string */ - public function get($ssl = false) + public function get(bool $ssl = false): string { if ($this->sslPolicy === self::SSL_POLICY_SELFSIGN && $ssl) { return Network::switchScheme($this->url); @@ -147,8 +168,9 @@ class BaseURL * @param string? $urlPath * * @return bool true, if successful + * @TODO Find proper types */ - public function save($hostname = null, $sslPolicy = null, $urlPath = null) + public function save($hostname = null, $sslPolicy = null, $urlPath = null): bool { $currHostname = $this->hostname; $currSSLPolicy = $this->sslPolicy; @@ -203,15 +225,15 @@ class BaseURL /** * Save the current url as base URL * - * @param $url + * @param string $url * * @return bool true, if the save was successful */ - public function saveByURL($url) + public function saveByURL(string $url): bool { $parsed = @parse_url($url); - if (empty($parsed)) { + if (empty($parsed) || empty($parsed['host'])) { return false; } @@ -251,10 +273,10 @@ class BaseURL } /** - * @param Configuration $config The Friendica configuration - * @param array $server The $_SERVER array + * @param IManageConfigValues $config The Friendica IConfiguration + * @param array $server The $_SERVER array */ - public function __construct(Configuration $config, array $server) + public function __construct(IManageConfigValues $config, array $server) { $this->config = $config; $this->server = $server; @@ -353,7 +375,7 @@ class BaseURL if (!empty($relative_script_path)) { // Module if (!empty($this->server['QUERY_STRING'])) { - $this->urlPath = trim(rdirname($relative_script_path, substr_count(trim($this->server['QUERY_STRING'], '/'), '/') + 1), '/'); + $this->urlPath = trim(dirname($relative_script_path, substr_count(trim($this->server['QUERY_STRING'], '/'), '/') + 1), '/'); } else { // Root page $this->urlPath = trim($relative_script_path, '/'); @@ -400,7 +422,7 @@ class BaseURL * * @return string The cleaned url */ - public function remove(string $origURL) + public function remove(string $origURL): string { // Remove the hostname from the url if it is an internal link $nurl = Strings::normaliseLink($origURL); @@ -414,4 +436,35 @@ class BaseURL return $url; } } + + /** + * Redirects to another module relative to the current Friendica base URL. + * If you want to redirect to a external URL, use System::externalRedirectTo() + * + * @param string $toUrl The destination URL (Default is empty, which is the default page of the Friendica node) + * @param bool $ssl if true, base URL will try to get called with https:// (works just for relative paths) + * + * @throws HTTPException\FoundException + * @throws HTTPException\MovedPermanentlyException + * @throws HTTPException\TemporaryRedirectException + * + * @throws HTTPException\InternalServerErrorException In Case the given URL is not relative to the Friendica node + */ + public function redirect(string $toUrl = '', bool $ssl = false) + { + if (!empty(parse_url($toUrl, PHP_URL_SCHEME))) { + throw new HTTPException\InternalServerErrorException("'$toUrl is not a relative path, please use System::externalRedirectTo"); + } + + $redirectTo = $this->get($ssl) . '/' . ltrim($toUrl, '/'); + System::externalRedirect($redirectTo); + } + + /** + * Returns the base url as string + */ + public function __toString(): string + { + return (string) $this->get(); + } }