X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FProtocol%2FPortableContact.php;h=85b23f569932c12bf829436a37266c4956ba3583;hb=ad857b43149624998c09f9acc25e61c716041951;hp=719148a8e65ace86c9f3ca069540c13dc434d59d;hpb=6f9ec690aaa8e8a4ef4a487f2755cf68cee4b052;p=friendica.git diff --git a/src/Protocol/PortableContact.php b/src/Protocol/PortableContact.php index 719148a8e6..85b23f5699 100644 --- a/src/Protocol/PortableContact.php +++ b/src/Protocol/PortableContact.php @@ -9,20 +9,20 @@ namespace Friendica\Protocol; +use DOMDocument; +use DOMXPath; +use Exception; use Friendica\Content\Text\HTML; use Friendica\Core\Config; use Friendica\Core\Worker; +use Friendica\Database\DBA; use Friendica\Database\DBM; use Friendica\Model\GContact; use Friendica\Model\Profile; use Friendica\Network\Probe; use Friendica\Util\DateTimeFormat; use Friendica\Util\Network; -use Friendica\Protocol\Diaspora; -use dba; -use DOMDocument; -use DOMXPath; -use Exception; +use Friendica\Util\XML; require_once 'include/dba.php'; @@ -67,7 +67,7 @@ class PortableContact if ($cid) { if (!$url || !$uid) { - $contact = dba::selectFirst('contact', ['poco', 'uid'], ['id' => $cid]); + $contact = DBA::selectFirst('contact', ['poco', 'uid'], ['id' => $cid]); if (DBM::is_result($contact)) { $url = $contact['poco']; $uid = $contact['uid']; @@ -120,7 +120,9 @@ class PortableContact $contact_type = -1; $generation = 0; - $name = $entry->displayName; + if (!empty($entry->displayName)) { + $name = $entry->displayName; + } if (isset($entry->urls)) { foreach ($entry->urls as $url) { @@ -202,7 +204,7 @@ class PortableContact logger("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); + DBA::delete('glink', $condition); } public static function reachable($profile, $server = "", $network = "", $force = false) @@ -340,7 +342,7 @@ 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' => normalise_link($profile)]); } logger("Profile ".$profile.": Server ".$server_url." wasn't reachable.", LOGGER_DEBUG); @@ -419,9 +421,9 @@ class PortableContact GContact::update($contact); - if (trim($noscrape["updated"]) != "") { + if (!empty($noscrape["updated"])) { $fields = ['last_contact' => DateTimeFormat::utcNow()]; - dba::update('gcontact', $fields, ['nurl' => normalise_link($profile)]); + DBA::update('gcontact', $fields, ['nurl' => normalise_link($profile)]); logger("Profile ".$profile." was last updated at ".$noscrape["updated"]." (noscrape)", LOGGER_DEBUG); @@ -449,7 +451,7 @@ class PortableContact && (normalise_link($profile) != normalise_link($data["url"])) ) { // Delete the old entry - dba::delete('gcontact', ['nurl' => normalise_link($profile)]); + DBA::delete('gcontact', ['nurl' => normalise_link($profile)]); $gcontact = array_merge($gcontacts[0], $data); @@ -470,7 +472,7 @@ class PortableContact if (($data["poll"] == "") || (in_array($data["network"], [NETWORK_FEED, NETWORK_PHANTOM]))) { $fields = ['last_failure' => DateTimeFormat::utcNow()]; - dba::update('gcontact', $fields, ['nurl' => normalise_link($profile)]); + DBA::update('gcontact', $fields, ['nurl' => normalise_link($profile)]); logger("Profile ".$profile." wasn't reachable (profile)", LOGGER_DEBUG); return false; @@ -486,7 +488,7 @@ class PortableContact if (!$feedret["success"]) { $fields = ['last_failure' => DateTimeFormat::utcNow()]; - dba::update('gcontact', $fields, ['nurl' => normalise_link($profile)]); + DBA::update('gcontact', $fields, ['nurl' => normalise_link($profile)]); logger("Profile ".$profile." wasn't reachable (no feed)", LOGGER_DEBUG); return false; @@ -528,11 +530,11 @@ class PortableContact $fields['updated'] = $last_updated; } - dba::update('gcontact', $fields, ['nurl' => normalise_link($profile)]); + DBA::update('gcontact', $fields, ['nurl' => normalise_link($profile)]); if (($gcontacts[0]["generation"] == 0)) { $fields = ['generation' => 9]; - dba::update('gcontact', $fields, ['nurl' => normalise_link($profile)]); + DBA::update('gcontact', $fields, ['nurl' => normalise_link($profile)]); } logger("Profile ".$profile." was last updated at ".$last_updated, LOGGER_DEBUG); @@ -914,7 +916,7 @@ class PortableContact return false; } - $server["site_name"] = $xpath->evaluate("//head/title/text()")->item(0)->nodeValue; + $server["site_name"] = XML::getFirstNodeValue($xpath, '//head/title/text()'); return $server; } @@ -928,12 +930,12 @@ class PortableContact return false; } - $gserver = dba::selectFirst('gserver', [], ['nurl' => normalise_link($server_url)]); + $gserver = DBA::selectFirst('gserver', [], ['nurl' => normalise_link($server_url)]); if (DBM::is_result($gserver)) { if ($gserver["created"] <= NULL_DATE) { $fields = ['created' => DateTimeFormat::utcNow()]; $condition = ['nurl' => normalise_link($server_url)]; - dba::update('gserver', $fields, $condition); + DBA::update('gserver', $fields, $condition); } $poco = $gserver["poco"]; $noscrape = $gserver["noscrape"]; @@ -987,7 +989,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' => normalise_link($server_url)]); return false; } @@ -1001,9 +1003,9 @@ class PortableContact // Quit if there is a timeout. // But we want to make sure to only quit if we are mostly sure that this server url fits. if (DBM::is_result($gserver) && ($orig_server_url == $server_url) && - ($serverret['errno'] == CURLE_OPERATION_TIMEDOUT)) { + (!empty($serverret["errno"]) && ($serverret['errno'] == CURLE_OPERATION_TIMEDOUT))) { logger("Connection to server ".$server_url." timed out.", LOGGER_DEBUG); - dba::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => normalise_link($server_url)]); + DBA::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => normalise_link($server_url)]); return false; } @@ -1016,9 +1018,9 @@ class PortableContact $serverret = Network::curl($server_url."/.well-known/host-meta", false, $redirects, ['timeout' => 20]); // Quit if there is a timeout - if ($serverret['errno'] == CURLE_OPERATION_TIMEDOUT) { + if (!empty($serverret["errno"]) && ($serverret['errno'] == CURLE_OPERATION_TIMEDOUT)) { logger("Connection to server ".$server_url." timed out.", LOGGER_DEBUG); - dba::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => normalise_link($server_url)]); + DBA::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => normalise_link($server_url)]); return false; } @@ -1027,7 +1029,7 @@ class PortableContact if (!$serverret["success"] || ($serverret["body"] == "") || empty($xmlobj) || !is_object($xmlobj)) { // Workaround for bad configured servers (known nginx problem) - if (!in_array($serverret["debug"]["http_code"], ["403", "404"])) { + if (!empty($serverret["debug"]) && !in_array($serverret["debug"]["http_code"], ["403", "404"])) { $failure = true; } $possible_failure = true; @@ -1044,7 +1046,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' => normalise_link($server_url)]); } // Look for poco @@ -1174,17 +1176,19 @@ class PortableContact if (!empty($data->channels_total)) { $registered_users = $data->channels_total; } - switch ($data->register_policy) { - case "REGISTER_OPEN": - $register_policy = REGISTER_OPEN; - break; - case "REGISTER_APPROVE": - $register_policy = REGISTER_APPROVE; - break; - case "REGISTER_CLOSED": - default: - $register_policy = REGISTER_CLOSED; - break; + if (!empty($data->register_policy)) { + switch ($data->register_policy) { + case "REGISTER_OPEN": + $register_policy = REGISTER_OPEN; + break; + case "REGISTER_APPROVE": + $register_policy = REGISTER_APPROVE; + break; + case "REGISTER_CLOSED": + default: + $register_policy = REGISTER_CLOSED; + break; + } } } else { // Test for Hubzilla, Redmatrix or Friendica @@ -1226,8 +1230,14 @@ class PortableContact $site_name = $data->site->name; $data->site->closed = self::toBoolean($data->site->closed); - $data->site->private = self::toBoolean($data->site->private); - $data->site->inviteonly = self::toBoolean($data->site->inviteonly); + + if (!empty($data->site->private)) { + $data->site->private = self::toBoolean($data->site->private); + } + + if (!empty($data->site->inviteonly)) { + $data->site->inviteonly = self::toBoolean($data->site->inviteonly); + } if (!$data->site->closed && !$data->site->private and $data->site->inviteonly) { $register_policy = REGISTER_APPROVE; @@ -1266,7 +1276,7 @@ class PortableContact $network = NETWORK_DIASPORA; } - if ($data->registrations_open) { + if (!empty($data->registrations_open) && $data->registrations_open) { $register_policy = REGISTER_OPEN; } else { $register_policy = REGISTER_CLOSED; @@ -1317,9 +1327,13 @@ class PortableContact if (isset($data->version)) { $network = NETWORK_DFRN; - $noscrape = defaults($data->no_scrape_url, ''); + if (!empty($data->no_scrape_url)) { + $noscrape = $data->no_scrape_url; + } $version = $data->version; - $site_name = $data->site_name; + if (!empty($data->site_name)) { + $site_name = $data->site_name; + } $info = $data->info; $register_policy = constant($data->register_policy); $platform = $data->platform; @@ -1351,7 +1365,7 @@ class PortableContact } // Check again if the server exists - $found = dba::exists('gserver', ['nurl' => normalise_link($server_url)]); + $found = DBA::exists('gserver', ['nurl' => normalise_link($server_url)]); $version = strip_tags($version); $site_name = strip_tags($site_name); @@ -1365,11 +1379,11 @@ 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' => normalise_link($server_url)]); } elseif (!$failure) { $fields['nurl'] = normalise_link($server_url); $fields['created'] = DateTimeFormat::utcNow(); - dba::insert('gserver', $fields); + DBA::insert('gserver', $fields); } if (!$failure && in_array($fields['network'], [NETWORK_DFRN, NETWORK_DIASPORA])) { @@ -1400,17 +1414,17 @@ 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' => normalise_link($server_url)]); if (!DBM::is_result($gserver)) { return; } if (($gserver['relay-subscribe'] != $data->subscribe) || ($gserver['relay-scope'] != $data->scope)) { $fields = ['relay-subscribe' => $data->subscribe, 'relay-scope' => $data->scope]; - dba::update('gserver', $fields, ['id' => $gserver['id']]); + DBA::update('gserver', $fields, ['id' => $gserver['id']]); } - dba::delete('gserver-tag', ['gserver-id' => $gserver['id']]); + DBA::delete('gserver-tag', ['gserver-id' => $gserver['id']]); if ($data->scope == 'tags') { // Avoid duplicates $tags = []; @@ -1420,7 +1434,7 @@ class PortableContact } foreach ($tags as $tag) { - dba::insert('gserver-tag', ['gserver-id' => $gserver['id'], 'tag' => $tag], true); + DBA::insert('gserver-tag', ['gserver-id' => $gserver['id'], 'tag' => $tag], true); } } @@ -1515,7 +1529,7 @@ class PortableContact if ($serverdata) { $servers = json_decode($serverdata); - if (is_array($servers->pods)) { + if (!empty($servers->pods)) { foreach ($servers->pods as $server) { Worker::add(PRIORITY_LOW, "DiscoverPoCo", "server", "https://".$server->host); } @@ -1606,7 +1620,7 @@ class PortableContact } $fields = ['last_poco_query' => DateTimeFormat::utcNow()]; - dba::update('gserver', $fields, ['nurl' => $server["nurl"]]); + DBA::update('gserver', $fields, ['nurl' => $server["nurl"]]); return true; } else { @@ -1615,7 +1629,7 @@ class PortableContact // If we couldn't reach the server, we will try it some time later $fields = ['last_poco_query' => DateTimeFormat::utcNow()]; - dba::update('gserver', $fields, ['nurl' => $server["nurl"]]); + DBA::update('gserver', $fields, ['nurl' => $server["nurl"]]); return false; } @@ -1641,7 +1655,7 @@ class PortableContact if (!self::checkServer($server["url"], $server["network"])) { // The server is not reachable? Okay, then we will try it later $fields = ['last_poco_query' => DateTimeFormat::utcNow()]; - dba::update('gserver', $fields, ['nurl' => $server["nurl"]]); + DBA::update('gserver', $fields, ['nurl' => $server["nurl"]]); continue; } @@ -1708,7 +1722,9 @@ class PortableContact $contact_type = -1; $generation = $default_generation; - $name = $entry->displayName; + if (!empty($entry->displayName)) { + $name = $entry->displayName; + } if (isset($entry->urls)) { foreach ($entry->urls as $url) {