$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"]))
}
/**
- * @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
}
/**
- * @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
return array("network" => NETWORK_TWITTER);
$lrdd = self::xrd($host);
+
if (!$lrdd)
return self::mail($uri, $uid);
$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);
}
/**
- * @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
*
}
/**
- * @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
}
/**
- * @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
*
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";
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
$pubkey = substr($pubkey, strpos($pubkey, ',') + 1);
else
$pubkey = substr($pubkey, 5);
- } else
+ } elseif (normalise_link($pubkey) == 'http://')
$pubkey = fetch_url($pubkey);
$key = explode(".", $pubkey);