X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FProtocol%2FPortableContact.php;h=7243da523f9d2e6078b1d4371f66b519838c68ea;hb=67f9458ba62abc52b4cd2760470c1f0fd7d97aba;hp=bb7ccd564aa166bf8b08f7405b6d60d56bc82299;hpb=dc35d2f2f352b1f378a00dae37c6be3044c9a0a0;p=friendica.git diff --git a/src/Protocol/PortableContact.php b/src/Protocol/PortableContact.php index bb7ccd564a..7243da523f 100644 --- a/src/Protocol/PortableContact.php +++ b/src/Protocol/PortableContact.php @@ -14,6 +14,7 @@ use DOMXPath; use Exception; use Friendica\Content\Text\HTML; use Friendica\Core\Config; +use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Core\Worker; use Friendica\Database\DBA; @@ -22,6 +23,7 @@ use Friendica\Model\Profile; use Friendica\Network\Probe; use Friendica\Util\DateTimeFormat; use Friendica\Util\Network; +use Friendica\Util\Strings; use Friendica\Util\XML; require_once 'include/dba.php'; @@ -84,14 +86,14 @@ class PortableContact $url = $url . (($uid) ? '/@me/@all?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation' : '?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation') ; - logger('load: ' . $url, LOGGER_DEBUG); + Logger::log('load: ' . $url, Logger::DEBUG); $fetchresult = Network::fetchUrlFull($url); $s = $fetchresult->getBody(); - logger('load: returns ' . $s, LOGGER_DATA); + Logger::log('load: returns ' . $s, Logger::DATA); - logger('load: return code: ' . $fetchresult->getReturnCode(), LOGGER_DEBUG); + Logger::log('load: return code: ' . $fetchresult->getReturnCode(), Logger::DEBUG); if (($fetchresult->getReturnCode() > 299) || (! $s)) { return; @@ -99,7 +101,7 @@ class PortableContact $j = json_decode($s, true); - logger('load: json: ' . print_r($j, true), LOGGER_DATA); + Logger::log('load: json: ' . print_r($j, true), Logger::DATA); if (!isset($j['entry'])) { return; @@ -199,10 +201,10 @@ class PortableContact GContact::link($gcid, $uid, $cid, $zcid); } catch (Exception $e) { - logger($e->getMessage(), LOGGER_DEBUG); + Logger::log($e->getMessage(), Logger::DEBUG); } } - logger("load: loaded $total entries", LOGGER_DEBUG); + Logger::log("load: loaded $total entries", Logger::DEBUG); $condition = ["`cid` = ? AND `uid` = ? AND `zcid` = ? AND `updated` < UTC_TIMESTAMP - INTERVAL 2 DAY", $cid, $uid, $zcid]; DBA::delete('glink', $condition); @@ -283,7 +285,7 @@ class PortableContact $r = q( "SELECT `id` FROM `gserver` WHERE `nurl` = '%s' AND `last_contact` > `last_failure`", - DBA::escape(normalise_link($server_url)) + DBA::escape(Strings::normaliseLink($server_url)) ); if (DBA::isResult($r)) { @@ -308,7 +310,7 @@ class PortableContact { $gcontacts = q( "SELECT * FROM `gcontact` WHERE `nurl` = '%s'", - DBA::escape(normalise_link($profile)) + DBA::escape(Strings::normaliseLink($profile)) ); if (!DBA::isResult($gcontacts)) { @@ -323,7 +325,7 @@ class PortableContact $server_url = ''; if ($force) { - $server_url = normalise_link(self::detectServer($profile)); + $server_url = Strings::normaliseLink(self::detectServer($profile)); } if (($server_url == '') && ($gcontacts[0]["server_url"] != "")) { @@ -331,11 +333,11 @@ class PortableContact } if (!$force && (($server_url == '') || ($gcontacts[0]["server_url"] == $gcontacts[0]["nurl"]))) { - $server_url = normalise_link(self::detectServer($profile)); + $server_url = Strings::normaliseLink(self::detectServer($profile)); } if (!in_array($gcontacts[0]["network"], [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::FEED, Protocol::OSTATUS, ""])) { - logger("Profile ".$profile.": Network type ".$gcontacts[0]["network"]." can't be checked", LOGGER_DEBUG); + Logger::log("Profile ".$profile.": Network type ".$gcontacts[0]["network"]." can't be checked", Logger::DEBUG); return false; } @@ -343,10 +345,10 @@ class PortableContact if (!self::checkServer($server_url, $gcontacts[0]["network"], $force)) { if ($force) { $fields = ['last_failure' => DateTimeFormat::utcNow()]; - DBA::update('gcontact', $fields, ['nurl' => normalise_link($profile)]); + DBA::update('gcontact', $fields, ['nurl' => Strings::normaliseLink($profile)]); } - logger("Profile ".$profile.": Server ".$server_url." wasn't reachable.", LOGGER_DEBUG); + Logger::log("Profile ".$profile.": Server ".$server_url." wasn't reachable.", Logger::DEBUG); return false; } $contact['server_url'] = $server_url; @@ -355,7 +357,7 @@ class PortableContact if (in_array($gcontacts[0]["network"], ["", Protocol::FEED])) { $server = q( "SELECT `network` FROM `gserver` WHERE `nurl` = '%s' AND `network` != ''", - DBA::escape(normalise_link($server_url)) + DBA::escape(Strings::normaliseLink($server_url)) ); if ($server) { @@ -368,7 +370,7 @@ class PortableContact // noscrape is really fast so we don't cache the call. if (($server_url != "") && ($gcontacts[0]["nick"] != "")) { // Use noscrape if possible - $server = q("SELECT `noscrape`, `network` FROM `gserver` WHERE `nurl` = '%s' AND `noscrape` != ''", DBA::escape(normalise_link($server_url))); + $server = q("SELECT `noscrape`, `network` FROM `gserver` WHERE `nurl` = '%s' AND `noscrape` != ''", DBA::escape(Strings::normaliseLink($server_url))); if ($server) { $curlResult = Network::curl($server[0]["noscrape"]."/".$gcontacts[0]["nick"]); @@ -424,9 +426,9 @@ class PortableContact if (!empty($noscrape["updated"])) { $fields = ['last_contact' => DateTimeFormat::utcNow()]; - DBA::update('gcontact', $fields, ['nurl' => normalise_link($profile)]); + DBA::update('gcontact', $fields, ['nurl' => Strings::normaliseLink($profile)]); - logger("Profile ".$profile." was last updated at ".$noscrape["updated"]." (noscrape)", LOGGER_DEBUG); + Logger::log("Profile ".$profile." was last updated at ".$noscrape["updated"]." (noscrape)", Logger::DEBUG); return $noscrape["updated"]; } @@ -437,7 +439,7 @@ class PortableContact // If we only can poll the feed, then we only do this once a while if (!$force && !self::updateNeeded($gcontacts[0]["created"], $gcontacts[0]["updated"], $gcontacts[0]["last_failure"], $gcontacts[0]["last_contact"])) { - logger("Profile ".$profile." was last updated at ".$gcontacts[0]["updated"]." (cached)", LOGGER_DEBUG); + Logger::log("Profile ".$profile." was last updated at ".$gcontacts[0]["updated"]." (cached)", Logger::DEBUG); GContact::update($contact); return $gcontacts[0]["updated"]; @@ -448,11 +450,11 @@ class PortableContact // Is the profile link the alternate OStatus link notation? (http://domain.tld/user/4711) // Then check the other link and delete this one if (($data["network"] == Protocol::OSTATUS) && self::alternateOStatusUrl($profile) - && (normalise_link($profile) == normalise_link($data["alias"])) - && (normalise_link($profile) != normalise_link($data["url"])) + && (Strings::normaliseLink($profile) == Strings::normaliseLink($data["alias"])) + && (Strings::normaliseLink($profile) != Strings::normaliseLink($data["url"])) ) { // Delete the old entry - DBA::delete('gcontact', ['nurl' => normalise_link($profile)]); + DBA::delete('gcontact', ['nurl' => Strings::normaliseLink($profile)]); $gcontact = array_merge($gcontacts[0], $data); @@ -464,18 +466,18 @@ class PortableContact self::lastUpdated($data["url"], $force); } catch (Exception $e) { - logger($e->getMessage(), LOGGER_DEBUG); + Logger::log($e->getMessage(), Logger::DEBUG); } - logger("Profile ".$profile." was deleted", LOGGER_DEBUG); + Logger::log("Profile ".$profile." was deleted", Logger::DEBUG); return false; } if (($data["poll"] == "") || (in_array($data["network"], [Protocol::FEED, Protocol::PHANTOM]))) { $fields = ['last_failure' => DateTimeFormat::utcNow()]; - DBA::update('gcontact', $fields, ['nurl' => normalise_link($profile)]); + DBA::update('gcontact', $fields, ['nurl' => Strings::normaliseLink($profile)]); - logger("Profile ".$profile." wasn't reachable (profile)", LOGGER_DEBUG); + Logger::log("Profile ".$profile." wasn't reachable (profile)", Logger::DEBUG); return false; } @@ -489,9 +491,9 @@ class PortableContact if (!$curlResult->isSuccess()) { $fields = ['last_failure' => DateTimeFormat::utcNow()]; - DBA::update('gcontact', $fields, ['nurl' => normalise_link($profile)]); + DBA::update('gcontact', $fields, ['nurl' => Strings::normaliseLink($profile)]); - logger("Profile ".$profile." wasn't reachable (no feed)", LOGGER_DEBUG); + Logger::log("Profile ".$profile." wasn't reachable (no feed)", Logger::DEBUG); return false; } @@ -532,14 +534,14 @@ class PortableContact $fields['updated'] = $last_updated; } - DBA::update('gcontact', $fields, ['nurl' => normalise_link($profile)]); + DBA::update('gcontact', $fields, ['nurl' => Strings::normaliseLink($profile)]); if (($gcontacts[0]["generation"] == 0)) { $fields = ['generation' => 9]; - DBA::update('gcontact', $fields, ['nurl' => normalise_link($profile)]); + DBA::update('gcontact', $fields, ['nurl' => Strings::normaliseLink($profile)]); } - logger("Profile ".$profile." was last updated at ".$last_updated, LOGGER_DEBUG); + Logger::log("Profile ".$profile." was last updated at ".$last_updated, Logger::DEBUG); return $last_updated; } @@ -662,7 +664,7 @@ class PortableContact foreach ($nodeinfo['links'] as $link) { if (!is_array($link) || empty($link['rel'])) { - logger('Invalid nodeinfo format for ' . $server_url, LOGGER_DEBUG); + Logger::log('Invalid nodeinfo format for ' . $server_url, Logger::DEBUG); continue; } if ($link['rel'] == 'http://nodeinfo.diaspora.software/ns/schema/1.0') { @@ -929,11 +931,11 @@ class PortableContact return false; } - $gserver = DBA::selectFirst('gserver', [], ['nurl' => normalise_link($server_url)]); + $gserver = DBA::selectFirst('gserver', [], ['nurl' => Strings::normaliseLink($server_url)]); if (DBA::isResult($gserver)) { if ($gserver["created"] <= DBA::NULL_DATETIME) { $fields = ['created' => DateTimeFormat::utcNow()]; - $condition = ['nurl' => normalise_link($server_url)]; + $condition = ['nurl' => Strings::normaliseLink($server_url)]; DBA::update('gserver', $fields, $condition); } $poco = $gserver["poco"]; @@ -963,7 +965,7 @@ class PortableContact } if (!$force && !self::updateNeeded($gserver["created"], "", $last_failure, $last_contact)) { - logger("Use cached data for server ".$server_url, LOGGER_DEBUG); + Logger::log("Use cached data for server ".$server_url, Logger::DEBUG); return ($last_contact >= $last_failure); } } else { @@ -979,7 +981,7 @@ class PortableContact $last_contact = DBA::NULL_DATETIME; $last_failure = DBA::NULL_DATETIME; } - logger("Server ".$server_url." is outdated or unknown. Start discovery. Force: ".$force." Created: ".$gserver["created"]." Failure: ".$last_failure." Contact: ".$last_contact, LOGGER_DEBUG); + Logger::log("Server ".$server_url." is outdated or unknown. Start discovery. Force: ".$force." Created: ".$gserver["created"]." Failure: ".$last_failure." Contact: ".$last_contact, Logger::DEBUG); $failure = false; $possible_failure = false; @@ -989,7 +991,7 @@ class PortableContact // Mastodon uses the "@" for user profiles. // But this can be misunderstood. if (parse_url($server_url, PHP_URL_USER) != '') { - DBA::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => normalise_link($server_url)]); + DBA::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => Strings::normaliseLink($server_url)]); return false; } @@ -1004,8 +1006,8 @@ class PortableContact // But we want to make sure to only quit if we are mostly sure that this server url fits. if (DBA::isResult($gserver) && ($orig_server_url == $server_url) && ($curlResult->isTimeout())) { - logger("Connection to server ".$server_url." timed out.", LOGGER_DEBUG); - DBA::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => normalise_link($server_url)]); + Logger::log("Connection to server ".$server_url." timed out.", Logger::DEBUG); + DBA::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => Strings::normaliseLink($server_url)]); return false; } @@ -1019,8 +1021,8 @@ class PortableContact // Quit if there is a timeout if ($curlResult->isTimeout()) { - logger("Connection to server " . $server_url . " timed out.", LOGGER_DEBUG); - DBA::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => normalise_link($server_url)]); + Logger::log("Connection to server " . $server_url . " timed out.", Logger::DEBUG); + DBA::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => Strings::normaliseLink($server_url)]); return false; } @@ -1047,7 +1049,7 @@ class PortableContact if (!$failure) { // This will be too low, but better than no value at all. - $registered_users = DBA::count('gcontact', ['server_url' => normalise_link($server_url)]); + $registered_users = DBA::count('gcontact', ['server_url' => Strings::normaliseLink($server_url)]); } // Look for poco @@ -1374,7 +1376,12 @@ class PortableContact } $info = $data['info']; - $register_policy = constant($data['register_policy']); + if (in_array($data['register_policy'], ['REGISTER_CLOSED', 'REGISTER_APPROVE', 'REGISTER_OPEN'])) { + $register_policy = constant($data['register_policy']); + } else { + Logger::log("Register policy '{$data['register_policy']}' from $server_url is invalid."); + $register_policy = REGISTER_CLOSED; // set a default value + } $platform = $data['platform']; } } @@ -1398,13 +1405,13 @@ class PortableContact } if (($last_contact <= $last_failure) && !$failure) { - logger("Server ".$server_url." seems to be alive, but last contact wasn't set - could be a bug", LOGGER_DEBUG); + Logger::log("Server ".$server_url." seems to be alive, but last contact wasn't set - could be a bug", Logger::DEBUG); } elseif (($last_contact >= $last_failure) && $failure) { - logger("Server ".$server_url." seems to be dead, but last failure wasn't set - could be a bug", LOGGER_DEBUG); + Logger::log("Server ".$server_url." seems to be dead, but last failure wasn't set - could be a bug", Logger::DEBUG); } // Check again if the server exists - $found = DBA::exists('gserver', ['nurl' => normalise_link($server_url)]); + $found = DBA::exists('gserver', ['nurl' => Strings::normaliseLink($server_url)]); $version = strip_tags($version); $site_name = strip_tags($site_name); @@ -1418,9 +1425,9 @@ class PortableContact 'last_contact' => $last_contact, 'last_failure' => $last_failure]; if ($found) { - DBA::update('gserver', $fields, ['nurl' => normalise_link($server_url)]); + DBA::update('gserver', $fields, ['nurl' => Strings::normaliseLink($server_url)]); } elseif (!$failure) { - $fields['nurl'] = normalise_link($server_url); + $fields['nurl'] = Strings::normaliseLink($server_url); $fields['created'] = DateTimeFormat::utcNow(); DBA::insert('gserver', $fields); } @@ -1429,7 +1436,7 @@ class PortableContact self::discoverRelay($server_url); } - logger("End discovery for server " . $server_url, LOGGER_DEBUG); + Logger::log("End discovery for server " . $server_url, Logger::DEBUG); return !$failure; } @@ -1441,7 +1448,7 @@ class PortableContact */ private static function discoverRelay($server_url) { - logger("Discover relay data for server " . $server_url, LOGGER_DEBUG); + Logger::log("Discover relay data for server " . $server_url, Logger::DEBUG); $curlResult = Network::curl($server_url . "/.well-known/x-social-relay"); @@ -1455,7 +1462,7 @@ class PortableContact return; } - $gserver = DBA::selectFirst('gserver', ['id', 'relay-subscribe', 'relay-scope'], ['nurl' => normalise_link($server_url)]); + $gserver = DBA::selectFirst('gserver', ['id', 'relay-subscribe', 'relay-scope'], ['nurl' => Strings::normaliseLink($server_url)]); if (!DBA::isResult($gserver)) { return; @@ -1554,10 +1561,10 @@ class PortableContact foreach ($serverlist as $server) { $server_url = str_replace("/index.php", "", $server['url']); - $r = q("SELECT `nurl` FROM `gserver` WHERE `nurl` = '%s'", DBA::escape(normalise_link($server_url))); + $r = q("SELECT `nurl` FROM `gserver` WHERE `nurl` = '%s'", DBA::escape(Strings::normaliseLink($server_url))); if (!DBA::isResult($r)) { - logger("Call server check for server ".$server_url, LOGGER_DEBUG); + Logger::log("Call server check for server ".$server_url, Logger::DEBUG); Worker::add(PRIORITY_LOW, "DiscoverPoCo", "server", $server_url); } } @@ -1642,7 +1649,7 @@ class PortableContact // Fetch all users from the other server $url = $server["poco"] . "/?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation"; - logger("Fetch all users from the server " . $server["url"], LOGGER_DEBUG); + Logger::log("Fetch all users from the server " . $server["url"], Logger::DEBUG); $curlResult = Network::curl($url); @@ -1670,7 +1677,7 @@ class PortableContact $curlResult = Network::curl($url); if ($curlResult->isSuccess() && !empty($curlResult->getBody())) { - logger("Fetch all global contacts from the server " . $server["nurl"], LOGGER_DEBUG); + Logger::log("Fetch all global contacts from the server " . $server["nurl"], Logger::DEBUG); $data = json_decode($curlResult->getBody(), true); if (!empty($data)) { @@ -1679,7 +1686,7 @@ class PortableContact } if (!$success && (Config::get('system', 'poco_discovery') > 2)) { - logger("Fetch contacts from users of the server " . $server["nurl"], LOGGER_DEBUG); + Logger::log("Fetch contacts from users of the server " . $server["nurl"], Logger::DEBUG); self::discoverServerUsers($data, $server); } } @@ -1732,7 +1739,7 @@ class PortableContact continue; } - logger('Update directory from server ' . $gserver['url'] . ' with ID ' . $gserver['id'], LOGGER_DEBUG); + Logger::log('Update directory from server ' . $gserver['url'] . ' with ID ' . $gserver['id'], Logger::DEBUG); Worker::add(PRIORITY_LOW, 'DiscoverPoCo', 'update_server_directory', (int) $gserver['id']); if (!$complete && ( --$no_of_queries == 0)) { @@ -1762,7 +1769,7 @@ class PortableContact } if ($username != '') { - logger('Fetch contacts for the user ' . $username . ' from the server ' . $server['nurl'], LOGGER_DEBUG); + Logger::log('Fetch contacts for the user ' . $username . ' from the server ' . $server['nurl'], Logger::DEBUG); // Fetch all contacts from a given user from the other server $url = $server['poco'] . '/' . $username . '/?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation'; @@ -1865,7 +1872,7 @@ class PortableContact if ($generation > 0) { $success = true; - logger("Store profile ".$profile_url, LOGGER_DEBUG); + Logger::log("Store profile ".$profile_url, Logger::DEBUG); $gcontact = ["url" => $profile_url, "name" => $name, @@ -1884,10 +1891,10 @@ class PortableContact $gcontact = GContact::sanitize($gcontact); GContact::update($gcontact); } catch (Exception $e) { - logger($e->getMessage(), LOGGER_DEBUG); + Logger::log($e->getMessage(), Logger::DEBUG); } - logger("Done for profile ".$profile_url, LOGGER_DEBUG); + Logger::log("Done for profile ".$profile_url, Logger::DEBUG); } } return $success;