mirror of
https://github.com/friendica/friendica
synced 2024-12-23 10:40:16 +00:00
Reestablish the communication with Mastodon
This commit is contained in:
parent
8580cd87a6
commit
c85331d8ac
1 changed files with 45 additions and 26 deletions
|
@ -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://"?
|
||||
|
|
Loading…
Reference in a new issue