]> git.mxchange.org Git - friendica.git/blobdiff - src/App/BaseURL.php
Merge pull request #12213 from Schnoop/bugfix/NodeInfo
[friendica.git] / src / App / BaseURL.php
index 6b79fad4662e6c0c88ad6bb18d457c79ad033e16..9152d4bc2f5d3cfefc1c8a6b8e46b7234c38d31b 100644 (file)
@@ -1,8 +1,27 @@
 <?php
+/**
+ * @copyright Copyright (C) 2010-2022, the Friendica project
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
 
 namespace Friendica\App;
 
-use Friendica\Core\Config\IConfiguration;
+use Friendica\Core\Config\Capability\IManageConfigValues;
 use Friendica\Core\System;
 use Friendica\Util\Network;
 use Friendica\Util\Strings;
@@ -37,7 +56,7 @@ class BaseURL
        /**
         * The Friendica Config
         *
-        * @var IConfiguration
+        * @var IManageConfigValues
         */
        private $config;
 
@@ -88,7 +107,7 @@ class BaseURL
         *
         * @return string
         */
-       public function getHostname()
+       public function getHostname(): string
        {
                return $this->hostname;
        }
@@ -98,7 +117,7 @@ class BaseURL
         *
         * @return string
         */
-       public function getScheme()
+       public function getScheme(): string
        {
                return $this->scheme;
        }
@@ -108,7 +127,7 @@ class BaseURL
         *
         * @return int
         */
-       public function getSSLPolicy()
+       public function getSSLPolicy(): int
        {
                return $this->sslPolicy;
        }
@@ -118,7 +137,7 @@ class BaseURL
         *
         * @return string
         */
-       public function getUrlPath()
+       public function getUrlPath(): string
        {
                return $this->urlPath;
        }
@@ -132,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);
@@ -149,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;
@@ -205,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;
                }
 
@@ -253,10 +273,10 @@ class BaseURL
        }
 
        /**
-        * @param IConfiguration $config The Friendica IConfiguration
-        * @param array         $server The $_SERVER array
+        * @param IManageConfigValues $config The Friendica IConfiguration
+        * @param array               $server The $_SERVER array
         */
-       public function __construct(IConfiguration $config, array $server)
+       public function __construct(IManageConfigValues $config, array $server)
        {
                $this->config = $config;
                $this->server = $server;
@@ -355,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, '/');
@@ -402,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);
@@ -424,9 +444,13 @@ class BaseURL
         * @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($toUrl = '', $ssl = false)
+       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");
@@ -439,8 +463,8 @@ class BaseURL
        /**
         * Returns the base url as string
         */
-       public function __toString()
+       public function __toString(): string
        {
-               return $this->get();
+               return (string) $this->get();
        }
 }