]> git.mxchange.org Git - friendica.git/commitdiff
Reestablish the communication with Mastodon
authorMichael <heluecht@pirati.ca>
Mon, 27 Mar 2017 20:58:15 +0000 (20:58 +0000)
committerMichael <heluecht@pirati.ca>
Mon, 27 Mar 2017 20:58:15 +0000 (20:58 +0000)
include/Probe.php

index c91b2cdf270aa594dc549dbd41d553e76e8dd75e..78199e772bcef8b817433e3e03c36668bb1ea24a 100644 (file)
@@ -177,6 +177,8 @@ class Probe {
 
                        $path_parts = explode("/", trim($parts["path"], "/"));
 
+                       $nick = array_pop($path_parts);
+
                        do {
                                $lrdd = self::xrd($host);
                                $host .= "/".array_shift($path_parts);
@@ -200,6 +202,19 @@ class Probe {
                                $path = str_replace('{uri}', urlencode("acct:".$uri), $link);
                                $webfinger = self::webfinger($path);
                        }
+
+                       // Special treatment for Mastodon
+                       // Problem is that Mastodon uses an URL format like http://domain.tld/@nick
+                       // But the webfinger for this format fails.
+                       if (!$webfinger AND isset($nick)) {
+                               // Mastodon uses a "@" as prefix for usernames in their url format
+                               $nick = ltrim($nick, '@');
+
+                               $addr = $nick."@".$host;
+
+                               $path = str_replace('{uri}', urlencode("acct:".$addr), $link);
+                               $webfinger = self::webfinger($path);
+                       }
                }
 
                if (!is_array($webfinger["links"]))
@@ -315,7 +330,34 @@ class Probe {
         * @return array uri data
         */
        private function detect($uri, $network, $uid) {
-               if (strstr($uri, '@')) {
+               $parts = parse_url($uri);
+
+               if (isset($parts["scheme"]) AND isset($parts["host"]) AND isset($parts["path"])) {
+
+                       /// @todo: Ports?
+                       $host = $parts["host"];
+
+                       if ($host == 'twitter.com')
+                               return array("network" => NETWORK_TWITTER);
+
+                       $lrdd = self::xrd($host);
+
+                       $path_parts = explode("/", trim($parts["path"], "/"));
+
+                       while (!$lrdd AND (sizeof($path_parts) > 1)) {
+                               $host .= "/".array_shift($path_parts);
+                               $lrdd = self::xrd($host);
+                       }
+                       if (!$lrdd)
+                               return self::feed($uri);
+
+                       $nick = array_pop($path_parts);
+
+                       // Mastodon uses a "@" as prefix for usernames in their url format
+                       $nick = ltrim($nick, '@');
+
+                       $addr = $nick."@".$host;
+               } elseif (strstr($uri, '@')) {
                        // If the URI starts with "mailto:" then jump directly to the mail detection
                        if (strpos($url,'mailto:') !== false) {
                                $uri = str_replace('mailto:', '', $url);
@@ -341,32 +383,9 @@ class Probe {
 
                        $addr = $uri;
                } else {
-                       $parts = parse_url($uri);
-                       if (!isset($parts["scheme"]) OR
-                               !isset($parts["host"]) OR
-                               !isset($parts["path"]))
-                               return false;
-
-                       /// @todo: Ports?
-                       $host = $parts["host"];
-
-                       if ($host == 'twitter.com')
-                               return array("network" => NETWORK_TWITTER);
-
-                       $lrdd = self::xrd($host);
-
-                       $path_parts = explode("/", trim($parts["path"], "/"));
-
-                       while (!$lrdd AND (sizeof($path_parts) > 1)) {
-                               $host .= "/".array_shift($path_parts);
-                               $lrdd = self::xrd($host);
-                       }
-                       if (!$lrdd)
-                               return self::feed($uri);
-
-                       $nick = array_pop($path_parts);
-                       $addr = $nick."@".$host;
+                       return false;
                }
+
                $webfinger = false;
 
                /// @todo Do we need the prefix "acct:" or "acct://"?