X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FApp%2FBaseURL.php;h=9a8348510de65d8993de6480c1c8d1bb8f390c3c;hb=204e52ea307b182175ae0c64d6eb69c71a104658;hp=ad5fd0d4ede3d360b2dd76f5f2c84d8cd95b2155;hpb=4c4ed63dca13cc0382af9020e69980c63f988b47;p=friendica.git diff --git a/src/App/BaseURL.php b/src/App/BaseURL.php index ad5fd0d4ed..9a8348510d 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; @@ -211,7 +232,7 @@ class BaseURL { $parsed = @parse_url($url); - if (empty($parsed)) { + if (empty($parsed) || empty($parsed['host'])) { return false; } @@ -251,10 +272,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; @@ -338,12 +359,12 @@ class BaseURL /* Relative script path to the web server root * Not all of those $_SERVER properties can be present, so we do by inverse priority order */ - $relative_script_path = ''; - $relative_script_path = defaults($this->server, 'REDIRECT_URL', $relative_script_path); - $relative_script_path = defaults($this->server, 'REDIRECT_URI', $relative_script_path); - $relative_script_path = defaults($this->server, 'REDIRECT_SCRIPT_URL', $relative_script_path); - $relative_script_path = defaults($this->server, 'SCRIPT_URL', $relative_script_path); - $relative_script_path = defaults($this->server, 'REQUEST_URI', $relative_script_path); + $relative_script_path = + ($this->server['REDIRECT_URL'] ?? '') ?: + ($this->server['REDIRECT_URI'] ?? '') ?: + ($this->server['REDIRECT_SCRIPT_URL'] ?? '') ?: + ($this->server['SCRIPT_URL'] ?? '') ?: + $this->server['REQUEST_URI'] ?? ''; /* $relative_script_path gives /relative/path/to/friendica/module/parameter * QUERY_STRING gives pagename=module/parameter @@ -353,7 +374,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, '/'); @@ -414,4 +435,31 @@ 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\InternalServerErrorException In Case the given URL is not relative to the Friendica node + */ + public function redirect($toUrl = '', $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() + { + return $this->get(); + } }