use DOMDocument;
use Friendica\Core\Cache;
use Friendica\Core\Config;
+use Friendica\Core\Logger;
use Friendica\Core\Protocol;
use Friendica\Core\System;
use Friendica\Database\DBA;
use Friendica\Util\Crypto;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Network;
+use Friendica\Util\Strings;
use Friendica\Util\XML;
use DomXPath;
*/
private static function ownHost($host)
{
- $own_host = get_app()->get_hostname();
+ $own_host = get_app()->getHostName();
$parts = parse_url($host);
$xrd_timeout = Config::get('system', 'xrd_timeout', 20);
$redirects = 0;
- logger("Probing for ".$host, LOGGER_DEBUG);
+ Logger::log("Probing for ".$host, Logger::DEBUG);
$xrd = null;
- $ret = Network::curl($ssl_url, false, $redirects, ['timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml']);
- if ($ret['success']) {
- $xml = $ret['body'];
+ $curlResult = Network::curl($ssl_url, false, $redirects, ['timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml']);
+ if ($curlResult->isSuccess()) {
+ $xml = $curlResult->getBody();
$xrd = XML::parseString($xml, false);
$host_url = 'https://'.$host;
}
if (!is_object($xrd)) {
- $ret = Network::curl($url, false, $redirects, ['timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml']);
- if (!empty($ret["errno"]) && ($ret['errno'] == CURLE_OPERATION_TIMEDOUT)) {
- logger("Probing timeout for ".$url, LOGGER_DEBUG);
+ $curlResult = Network::curl($url, false, $redirects, ['timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml']);
+ if ($curlResult->isTimeout()) {
+ Logger::log("Probing timeout for " . $url, Logger::DEBUG);
return false;
}
- $xml = $ret['body'];
+ $xml = $curlResult->getBody();
$xrd = XML::parseString($xml, false);
$host_url = 'http://'.$host;
}
if (!is_object($xrd)) {
- logger("No xrd object found for ".$host, LOGGER_DEBUG);
+ Logger::log("No xrd object found for ".$host, Logger::DEBUG);
return [];
}
$links = XML::elementToArray($xrd);
if (!isset($links["xrd"]["link"])) {
- logger("No xrd data found for ".$host, LOGGER_DEBUG);
+ Logger::log("No xrd data found for ".$host, Logger::DEBUG);
return [];
}
self::$baseurl = "http://".$host;
- logger("Probing successful for ".$host, LOGGER_DEBUG);
+ Logger::log("Probing successful for ".$host, Logger::DEBUG);
return $lrdd;
}
$profile_link = '';
$links = self::lrdd($webbie);
- logger('webfingerDfrn: '.$webbie.':'.print_r($links, true), LOGGER_DATA);
+ Logger::log('webfingerDfrn: '.$webbie.':'.print_r($links, true), Logger::DATA);
if (count($links)) {
foreach ($links as $link) {
if ($link['@attributes']['rel'] === NAMESPACE_DFRN) {
}
if (!$lrdd) {
- logger("No lrdd data found for ".$uri, LOGGER_DEBUG);
+ Logger::log("No lrdd data found for ".$uri, Logger::DEBUG);
return [];
}
}
if (!is_array($webfinger["links"])) {
- logger("No webfinger links found for ".$uri, LOGGER_DEBUG);
+ Logger::log("No webfinger links found for ".$uri, Logger::DEBUG);
return false;
}
$data = null;
}
- if (in_array(defaults($data, 'network', ''), ['', Protocol::PHANTOM])) {
- $ap_profile = ActivityPub::fetchProfile($uri);
- if (!empty($ap_profile) && ($ap_profile['network'] == Protocol::ACTIVITYPUB)) {
- $data = $ap_profile;
- }
+ $ap_profile = ActivityPub::probeProfile($uri);
+
+ if (!empty($ap_profile) && (defaults($data, 'network', '') != Protocol::DFRN)) {
+ $data = $ap_profile;
}
if (!isset($data["url"])) {
}
if (x($data, "photo")) {
- $data["baseurl"] = Network::getUrlMatch(normalise_link(defaults($data, "baseurl", "")), normalise_link($data["photo"]));
+ $data["baseurl"] = Network::getUrlMatch(Strings::normaliseLink(defaults($data, "baseurl", "")), Strings::normaliseLink($data["photo"]));
} else {
- $data["photo"] = System::baseUrl().'/images/person-175.jpg';
+ $data["photo"] = System::baseUrl().'/images/person-300.jpg';
}
if (empty($data["name"])) {
// Only store into the cache if the value seems to be valid
if (!in_array($data['network'], [Protocol::PHANTOM, Protocol::MAIL])) {
- Cache::set("Probe::uri:".$network.":".$uri, $data, CACHE_DAY);
+ Cache::set("Probe::uri:".$network.":".$uri, $data, Cache::DAY);
/// @todo temporary fix - we need a real contact update function that updates only changing fields
/// The biggest problem is the avatar picture that could have a reduced image size.
$fields['updated'] = DateTimeFormat::utcNow();
- $condition = ['nurl' => normalise_link($data["url"])];
+ $condition = ['nurl' => Strings::normaliseLink($data["url"])];
$old_fields = DBA::selectFirst('gcontact', $fieldnames, $condition);
}
}
- $condition = ['nurl' => normalise_link($data["url"]), 'self' => false, 'uid' => 0];
+ $condition = ['nurl' => Strings::normaliseLink($data["url"]), 'self' => false, 'uid' => 0];
// "$old_fields" will return a "false" when the contact doesn't exist.
// This won't trigger an insert. This is intended, since we only need
$lrdd = self::hostMeta($host);
}
if (!$lrdd) {
- logger('No XRD data was found for '.$uri, LOGGER_DEBUG);
+ Logger::log('No XRD data was found for '.$uri, Logger::DEBUG);
return self::feed($uri);
}
$nick = array_pop($path_parts);
}
if (!$lrdd) {
- logger('No XRD data was found for '.$uri, LOGGER_DEBUG);
+ Logger::log('No XRD data was found for '.$uri, Logger::DEBUG);
return self::mail($uri, $uid);
}
$addr = $uri;
} else {
- logger("Uri ".$uri." was not detectable", LOGGER_DEBUG);
+ Logger::log("Uri ".$uri." was not detectable", Logger::DEBUG);
return false;
}
$result = false;
- logger("Probing ".$uri, LOGGER_DEBUG);
+ Logger::log("Probing ".$uri, Logger::DEBUG);
if (in_array($network, ["", Protocol::DFRN])) {
$result = self::dfrn($webfinger);
$result["url"] = $uri;
}
- logger($uri." is ".$result["network"], LOGGER_DEBUG);
+ Logger::log($uri." is ".$result["network"], Logger::DEBUG);
if (empty($result["baseurl"])) {
$pos = strpos($result["url"], $host);
$xrd_timeout = Config::get('system', 'xrd_timeout', 20);
$redirects = 0;
- $ret = Network::curl($url, false, $redirects, ['timeout' => $xrd_timeout, 'accept_content' => $type]);
- if (!empty($ret["errno"]) && ($ret['errno'] == CURLE_OPERATION_TIMEDOUT)) {
+ $curlResult = Network::curl($url, false, $redirects, ['timeout' => $xrd_timeout, 'accept_content' => $type]);
+ if ($curlResult->isTimeout()) {
return false;
}
- $data = $ret['body'];
+ $data = $curlResult->getBody();
$webfinger = json_decode($data, true);
if (is_array($webfinger)) {
if (!isset($webfinger["links"])) {
- logger("No json webfinger links for ".$url, LOGGER_DEBUG);
+ Logger::log("No json webfinger links for ".$url, Logger::DEBUG);
return false;
}
return $webfinger;
// If it is not JSON, maybe it is XML
$xrd = XML::parseString($data, false);
if (!is_object($xrd)) {
- logger("No webfinger data retrievable for ".$url, LOGGER_DEBUG);
+ Logger::log("No webfinger data retrievable for ".$url, Logger::DEBUG);
return false;
}
$xrd_arr = XML::elementToArray($xrd);
if (!isset($xrd_arr["xrd"]["link"])) {
- logger("No XML webfinger links for ".$url, LOGGER_DEBUG);
+ Logger::log("No XML webfinger links for ".$url, Logger::DEBUG);
return false;
}
*/
private static function pollNoscrape($noscrape_url, $data)
{
- $ret = Network::curl($noscrape_url);
- if (!empty($ret["errno"]) && ($ret['errno'] == CURLE_OPERATION_TIMEDOUT)) {
+ $curlResult = Network::curl($noscrape_url);
+ if ($curlResult->isTimeout()) {
return false;
}
- $content = $ret['body'];
+ $content = $curlResult->getBody();
if (!$content) {
- logger("Empty body for ".$noscrape_url, LOGGER_DEBUG);
+ Logger::log("Empty body for ".$noscrape_url, Logger::DEBUG);
return false;
}
$json = json_decode($content, true);
if (!is_array($json)) {
- logger("No json data for ".$noscrape_url, LOGGER_DEBUG);
+ Logger::log("No json data for ".$noscrape_url, Logger::DEBUG);
return false;
}
{
$data = [];
- logger("Check profile ".$profile_link, LOGGER_DEBUG);
+ Logger::log("Check profile ".$profile_link, Logger::DEBUG);
// Fetch data via noscrape - this is faster
$noscrape_url = str_replace(["/hcard/", "/profile/"], "/noscrape/", $profile_link);
$prof_data["addr"] = $data["addr"];
$prof_data["nick"] = $data["nick"];
- $prof_data["dfrn-request"] = $data["request"];
- $prof_data["dfrn-confirm"] = $data["confirm"];
- $prof_data["dfrn-notify"] = $data["notify"];
- $prof_data["dfrn-poll"] = $data["poll"];
- $prof_data["photo"] = $data["photo"];
- $prof_data["fn"] = $data["name"];
- $prof_data["key"] = $data["pubkey"];
+ $prof_data["dfrn-request"] = defaults($data, 'request', null);
+ $prof_data["dfrn-confirm"] = defaults($data, 'confirm', null);
+ $prof_data["dfrn-notify"] = defaults($data, 'notify' , null);
+ $prof_data["dfrn-poll"] = defaults($data, 'poll' , null);
+ $prof_data["photo"] = defaults($data, 'photo' , null);
+ $prof_data["fn"] = defaults($data, 'name' , null);
+ $prof_data["key"] = defaults($data, 'pubkey' , null);
- logger("Result for profile ".$profile_link.": ".print_r($prof_data, true), LOGGER_DEBUG);
+ Logger::log("Result for profile ".$profile_link.": ".print_r($prof_data, true), Logger::DEBUG);
return $prof_data;
}
$hcard_url = "";
$data = [];
foreach ($webfinger["links"] as $link) {
- if (($link["rel"] == NAMESPACE_DFRN) && ($link["href"] != "")) {
+ if (($link["rel"] == NAMESPACE_DFRN) && !empty($link["href"])) {
$data["network"] = Protocol::DFRN;
- } elseif (($link["rel"] == NAMESPACE_FEED) && ($link["href"] != "")) {
+ } elseif (($link["rel"] == NAMESPACE_FEED) && !empty($link["href"])) {
$data["poll"] = $link["href"];
- } elseif (($link["rel"] == "http://webfinger.net/rel/profile-page") && ($link["type"] == "text/html") && ($link["href"] != "")) {
+ } elseif (($link["rel"] == "http://webfinger.net/rel/profile-page") && (defaults($link, "type", "") == "text/html") && !empty($link["href"])) {
$data["url"] = $link["href"];
- } elseif (($link["rel"] == "http://microformats.org/profile/hcard") && ($link["href"] != "")) {
+ } elseif (($link["rel"] == "http://microformats.org/profile/hcard") && !empty($link["href"])) {
$hcard_url = $link["href"];
- } elseif (($link["rel"] == NAMESPACE_POCO) && ($link["href"] != "")) {
+ } elseif (($link["rel"] == NAMESPACE_POCO) && !empty($link["href"])) {
$data["poco"] = $link["href"];
- } elseif (($link["rel"] == "http://webfinger.net/rel/avatar") && ($link["href"] != "")) {
+ } elseif (($link["rel"] == "http://webfinger.net/rel/avatar") && !empty($link["href"])) {
$data["photo"] = $link["href"];
- } elseif (($link["rel"] == "http://joindiaspora.com/seed_location") && ($link["href"] != "")) {
+ } elseif (($link["rel"] == "http://joindiaspora.com/seed_location") && !empty($link["href"])) {
$data["baseurl"] = trim($link["href"], '/');
- } elseif (($link["rel"] == "http://joindiaspora.com/guid") && ($link["href"] != "")) {
+ } elseif (($link["rel"] == "http://joindiaspora.com/guid") && !empty($link["href"])) {
$data["guid"] = $link["href"];
- } elseif (($link["rel"] == "diaspora-public-key") && ($link["href"] != "")) {
+ } elseif (($link["rel"] == "diaspora-public-key") && !empty($link["href"])) {
$data["pubkey"] = base64_decode($link["href"]);
//if (strstr($data["pubkey"], 'RSA ') || ($link["type"] == "RSA"))
foreach ($webfinger["aliases"] as $alias) {
if (empty($data["url"]) && !strstr($alias, "@")) {
$data["url"] = $alias;
- } elseif (!strstr($alias, "@") && normalise_link($alias) != normalise_link($data["url"])) {
+ } elseif (!strstr($alias, "@") && Strings::normaliseLink($alias) != Strings::normaliseLink($data["url"])) {
$data["alias"] = $alias;
} elseif (substr($alias, 0, 5) == 'acct:') {
$data["addr"] = substr($alias, 5);
*/
private static function pollHcard($hcard_url, $data, $dfrn = false)
{
- $ret = Network::curl($hcard_url);
- if (!empty($ret["errno"]) && ($ret['errno'] == CURLE_OPERATION_TIMEDOUT)) {
+ $curlResult = Network::curl($hcard_url);
+ if ($curlResult->isTimeout()) {
return false;
}
- $content = $ret['body'];
+ $content = $curlResult->getBody();
if (!$content) {
return false;
}
$hcard_url = "";
$data = [];
foreach ($webfinger["links"] as $link) {
- if (($link["rel"] == "http://microformats.org/profile/hcard") && ($link["href"] != "")) {
+ if (($link["rel"] == "http://microformats.org/profile/hcard") && !empty($link["href"])) {
$hcard_url = $link["href"];
- } elseif (($link["rel"] == "http://joindiaspora.com/seed_location") && ($link["href"] != "")) {
+ } elseif (($link["rel"] == "http://joindiaspora.com/seed_location") && !empty($link["href"])) {
$data["baseurl"] = trim($link["href"], '/');
- } elseif (($link["rel"] == "http://joindiaspora.com/guid") && ($link["href"] != "")) {
+ } elseif (($link["rel"] == "http://joindiaspora.com/guid") && !empty($link["href"])) {
$data["guid"] = $link["href"];
- } elseif (($link["rel"] == "http://webfinger.net/rel/profile-page") && ($link["type"] == "text/html") && ($link["href"] != "")) {
+ } elseif (($link["rel"] == "http://webfinger.net/rel/profile-page") && (defaults($link, "type", "") == "text/html") && !empty($link["href"])) {
$data["url"] = $link["href"];
- } elseif (($link["rel"] == NAMESPACE_FEED) && ($link["href"] != "")) {
+ } elseif (($link["rel"] == NAMESPACE_FEED) && !empty($link["href"])) {
$data["poll"] = $link["href"];
- } elseif (($link["rel"] == NAMESPACE_POCO) && ($link["href"] != "")) {
+ } elseif (($link["rel"] == NAMESPACE_POCO) && !empty($link["href"])) {
$data["poco"] = $link["href"];
- } elseif (($link["rel"] == "salmon") && ($link["href"] != "")) {
+ } elseif (($link["rel"] == "salmon") && !empty($link["href"])) {
$data["notify"] = $link["href"];
- } elseif (($link["rel"] == "diaspora-public-key") && ($link["href"] != "")) {
+ } elseif (($link["rel"] == "diaspora-public-key") && !empty($link["href"])) {
$data["pubkey"] = base64_decode($link["href"]);
//if (strstr($data["pubkey"], 'RSA ') || ($link["type"] == "RSA"))
if (!empty($webfinger["aliases"]) && is_array($webfinger["aliases"])) {
foreach ($webfinger["aliases"] as $alias) {
- if (normalise_link($alias) != normalise_link($data["url"]) && ! strstr($alias, "@")) {
+ if (Strings::normaliseLink($alias) != Strings::normaliseLink($data["url"]) && ! strstr($alias, "@")) {
$data["alias"] = $alias;
} elseif (substr($alias, 0, 5) == 'acct:') {
$data["addr"] = substr($alias, 5);
if (!empty($webfinger["aliases"]) && is_array($webfinger["aliases"])) {
foreach ($webfinger["aliases"] as $alias) {
- if (strstr($alias, "@") && !strstr(normalise_link($alias), "http://")) {
+ if (strstr($alias, "@") && !strstr(Strings::normaliseLink($alias), "http://")) {
$data["addr"] = str_replace('acct:', '', $alias);
}
}
}
if (!empty($webfinger["subject"]) && strstr($webfinger["subject"], "@")
- && !strstr(normalise_link($webfinger["subject"]), "http://")
+ && !strstr(Strings::normaliseLink($webfinger["subject"]), "http://")
) {
$data["addr"] = str_replace('acct:', '', $webfinger["subject"]);
}
if (is_array($webfinger["links"])) {
foreach ($webfinger["links"] as $link) {
if (($link["rel"] == "http://webfinger.net/rel/profile-page")
- && ($link["type"] == "text/html")
+ && (defaults($link, "type", "") == "text/html")
&& ($link["href"] != "")
) {
$data["url"] = $link["href"];
- } elseif (($link["rel"] == "salmon") && ($link["href"] != "")) {
+ } elseif (($link["rel"] == "salmon") && !empty($link["href"])) {
$data["notify"] = $link["href"];
- } elseif (($link["rel"] == NAMESPACE_FEED) && ($link["href"] != "")) {
+ } elseif (($link["rel"] == NAMESPACE_FEED) && !empty($link["href"])) {
$data["poll"] = $link["href"];
- } elseif (($link["rel"] == "magic-public-key") && ($link["href"] != "")) {
+ } elseif (($link["rel"] == "magic-public-key") && !empty($link["href"])) {
$pubkey = $link["href"];
if (substr($pubkey, 0, 5) === 'data:') {
} else {
$pubkey = substr($pubkey, 5);
}
- } elseif (normalise_link($pubkey) == 'http://') {
- $ret = Network::curl($pubkey);
- if (!empty($ret["errno"]) && ($ret['errno'] == CURLE_OPERATION_TIMEDOUT)) {
+ } elseif (Strings::normaliseLink($pubkey) == 'http://') {
+ $curlResult = Network::curl($pubkey);
+ if ($curlResult->isTimeout()) {
return false;
}
- $pubkey = $ret['body'];
+ $pubkey = $curlResult['body'];
}
$key = explode(".", $pubkey);
if (sizeof($key) >= 3) {
- $m = base64url_decode($key[1]);
- $e = base64url_decode($key[2]);
+ $m = Strings::base64UrlDecode($key[1]);
+ $e = Strings::base64UrlDecode($key[2]);
$data["pubkey"] = Crypto::meToPem($m, $e);
}
}
}
// Fetch all additional data from the feed
- $ret = Network::curl($data["poll"]);
- if (!empty($ret["errno"]) && ($ret['errno'] == CURLE_OPERATION_TIMEDOUT)) {
+ $curlResult = Network::curl($data["poll"]);
+ if ($curlResult->isTimeout()) {
return false;
}
- $feed = $ret['body'];
+ $feed = $curlResult->getBody();
$dummy1 = null;
$dummy2 = null;
$dummy2 = null;
$data = [];
foreach ($webfinger["links"] as $link) {
if (($link["rel"] == "http://webfinger.net/rel/profile-page")
- && ($link["type"] == "text/html")
+ && (defaults($link, "type", "") == "text/html")
&& ($link["href"] != "")
) {
$data["url"] = $link["href"];
*/
private static function feed($url, $probe = true)
{
- $ret = Network::curl($url);
- if (!empty($ret["errno"]) && ($ret['errno'] == CURLE_OPERATION_TIMEDOUT)) {
+ $curlResult = Network::curl($url);
+ if ($curlResult->isTimeout()) {
return false;
}
- $feed = $ret['body'];
+ $feed = $curlResult->getBody();
$dummy1 = $dummy2 = $dummy3 = null;
$feed_data = Feed::import($feed, $dummy1, $dummy2, $dummy3, true);
}
$msgs = Email::poll($mbox, $uri);
- logger('searching '.$uri.', '.count($msgs).' messages found.', LOGGER_DEBUG);
+ Logger::log('searching '.$uri.', '.count($msgs).' messages found.', Logger::DEBUG);
if (!count($msgs)) {
return false;
$data["nick"] = $data["name"];
$data["photo"] = Network::lookupAvatarByEmail($uri);
$data["url"] = 'mailto:'.$uri;
- $data["notify"] = 'smtp '.random_string();
- $data["poll"] = 'email '.random_string();
+ $data["notify"] = 'smtp ' . Strings::getRandomHex();
+ $data["poll"] = 'email ' . Strings::getRandomHex();
$x = Email::messageMeta($mbox, $msgs[0]);
if (stristr($x[0]->from, $uri)) {
}
}
- $data["name"] = notags($data["name"]);
+ $data["name"] = Strings::removeTags($data["name"]);
}
}
}
$fixed = $scheme.$host.$port.$path.$query.$fragment;
- logger('Base: '.$base.' - Avatar: '.$avatar.' - Fixed: '.$fixed, LOGGER_DATA);
+ Logger::log('Base: '.$base.' - Avatar: '.$avatar.' - Fixed: '.$fixed, Logger::DATA);
return $fixed;
}