]> git.mxchange.org Git - friendica.git/blobdiff - include/Probe.php
Merge pull request #2853 from annando/1610-bugfix-config
[friendica.git] / include / Probe.php
index f8c35acbe29bfe25b087d2c4f6003e280c481965..d8814036d91a5a357d2d5cf743d0876a2ca479af 100644 (file)
@@ -180,6 +180,11 @@ class Probe {
 
                        $path = str_replace('{uri}', urlencode($uri), $link);
                        $webfinger = self::webfinger($path);
+
+                       if (!$webfinger AND (strstr($uri, "@"))) {
+                               $path = str_replace('{uri}', urlencode("acct:".$uri), $link);
+                               $webfinger = self::webfinger($path);
+                       }
                }
 
                if (!is_array($webfinger["links"]))
@@ -200,7 +205,7 @@ class Probe {
        }
 
        /**
-        * @brief Fetch information about a given uri
+        * @brief Fetch information (protocol endpoints and user information) about a given uri
         *
         * @param string $uri Address that should be probed
         * @param string $network Test for this specific network
@@ -279,7 +284,9 @@ class Probe {
        }
 
        /**
-        * @brief Detect information about a given uri
+        * @brief Fetch information (protocol endpoints and user information) about a given uri
+        *
+        * This function is only called by the "uri" function that adds caching and rearranging of data.
         *
         * @param string $uri Address that should be probed
         * @param string $network Test for this specific network
@@ -308,6 +315,7 @@ class Probe {
                                return array("network" => NETWORK_TWITTER);
 
                        $lrdd = self::xrd($host);
+
                        if (!$lrdd)
                                return self::mail($uri, $uid);
 
@@ -354,6 +362,12 @@ class Probe {
                        $path = str_replace('{uri}', urlencode($addr), $link);
                        $webfinger = self::webfinger($path);
 
+                       // Mastodon needs to have it with "acct:"
+                       if (!$webfinger) {
+                               $path = str_replace('{uri}', urlencode("acct:".$addr), $link);
+                               $webfinger = self::webfinger($path);
+                       }
+
                        // If webfinger wasn't successful then try it with the URL - possibly in the format https://...
                        if (!$webfinger AND ($uri != $addr)) {
                                $path = str_replace('{uri}', urlencode($uri), $link);
@@ -406,7 +420,9 @@ class Probe {
        }
 
        /**
-        * @brief Do a webfinger request
+        * @brief Perform a webfinger request.
+        *
+        * For details see RFC 7033: <https://tools.ietf.org/html/rfc7033>
         *
         * @param string $url Address that should be probed
         *
@@ -458,7 +474,10 @@ class Probe {
        }
 
        /**
-        * @brief Poll the noscrape page (Friendica specific)
+        * @brief Poll the Friendica specific noscrape page.
+        *
+        * "noscrape" is a faster alternative to fetch the data from the hcard.
+        * This functionality was originally created for the directory.
         *
         * @param string $noscrape Link to the noscrape page
         * @param array $data The already fetched data
@@ -543,7 +562,7 @@ class Probe {
        }
 
        /**
-        * @brief Fetch data from a DFRN profile page
+        * @brief Fetch data from a DFRN profile page and via "noscrape"
         *
         * @param string $profile Link to the profile page
         *
@@ -781,6 +800,9 @@ class Probe {
                        isset($data["pubkey"]) AND ($hcard != "")) {
                        $data["network"] = NETWORK_DIASPORA;
 
+                       // The Diaspora handle must always be lowercase
+                       $data["addr"] = strtolower($data["addr"]);
+
                        // We have to overwrite the detected value for "notify" since Hubzilla doesn't send it
                        $data["notify"] = $data["baseurl"]."/receive/users/".$data["guid"];
                        $data["batch"] = $data["baseurl"]."/receive/public";
@@ -805,6 +827,9 @@ class Probe {
                                if (strstr($alias, "@"))
                                        $data["addr"] = str_replace('acct:', '', $alias);
 
+               if (is_string($webfinger["subject"]) AND strstr($webfinger["subject"], "@"))
+                       $data["addr"] = str_replace('acct:', '', $webfinger["subject"]);
+
                $pubkey = "";
                foreach ($webfinger["links"] AS $link) {
                        if (($link["rel"] == "http://webfinger.net/rel/profile-page") AND
@@ -822,7 +847,7 @@ class Probe {
                                                $pubkey = substr($pubkey, strpos($pubkey, ',') + 1);
                                        else
                                                $pubkey = substr($pubkey, 5);
-                               } else
+                               } elseif (normalise_link($pubkey) == 'http://')
                                        $pubkey = fetch_url($pubkey);
 
                                $key = explode(".", $pubkey);