X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FProtocol%2FPortableContact.php;h=a9e06d19a8c4c3b5401bf8740881363be2aa3948;hb=d1f2d04803b799092e16a260824a548c574cfaca;hp=06c2636aca8b33931ede15a5494feeda4f078267;hpb=10465110c12da10fc1593c1f91ffaa8527d92702;p=friendica.git diff --git a/src/Protocol/PortableContact.php b/src/Protocol/PortableContact.php index 06c2636aca..a9e06d19a8 100644 --- a/src/Protocol/PortableContact.php +++ b/src/Protocol/PortableContact.php @@ -18,6 +18,8 @@ use Friendica\Model\Profile; use Friendica\Network\Probe; use Friendica\Util\DateTimeFormat; use Friendica\Util\Network; +use Friendica\Protocol\Diaspora; +use Friendica\Util\XML; use dba; use DOMDocument; use DOMXPath; @@ -119,7 +121,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) { @@ -418,7 +422,7 @@ 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)]); @@ -521,7 +525,12 @@ class PortableContact } } - $fields = ['updated' => $last_updated, 'last_contact' => DateTimeFormat::utcNow()]; + $fields = ['last_contact' => DateTimeFormat::utcNow()]; + + if (!empty($last_updated)) { + $fields['updated'] = $last_updated; + } + dba::update('gcontact', $fields, ['nurl' => normalise_link($profile)]); if (($gcontacts[0]["generation"] == 0)) { @@ -908,7 +917,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; } @@ -995,7 +1004,7 @@ 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)) { + (!$serverret["success"] && ($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)]); return false; @@ -1003,14 +1012,14 @@ class PortableContact // Maybe the page is unencrypted only? $xmlobj = @simplexml_load_string($serverret["body"], 'SimpleXMLElement', 0, "http://docs.oasis-open.org/ns/xri/xrd-1.0"); - if (!$serverret["success"] || ($serverret["body"] == "") || (@sizeof($xmlobj) == 0) || !is_object($xmlobj)) { + if (!$serverret["success"] || ($serverret["body"] == "") || empty($xmlobj) || !is_object($xmlobj)) { $server_url = str_replace("https://", "http://", $server_url); // We set the timeout to 20 seconds since this operation should be done in no time if the server was vital $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 (!$serverret["success"] && ($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)]); return false; @@ -1019,9 +1028,9 @@ class PortableContact $xmlobj = @simplexml_load_string($serverret["body"], 'SimpleXMLElement', 0, "http://docs.oasis-open.org/ns/xri/xrd-1.0"); } - if (!$serverret["success"] || ($serverret["body"] == "") || (sizeof($xmlobj) == 0) || !is_object($xmlobj)) { + 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; @@ -1168,17 +1177,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 @@ -1220,8 +1231,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; @@ -1260,7 +1277,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; @@ -1311,24 +1328,16 @@ 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_str = $data->register_policy; + $register_policy = constant($data->register_policy); $platform = $data->platform; - - switch ($register_policy_str) { - case "REGISTER_CLOSED": - $register_policy = REGISTER_CLOSED; - break; - case "REGISTER_APPROVE": - $register_policy = REGISTER_APPROVE; - break; - case "REGISTER_OPEN": - $register_policy = REGISTER_OPEN; - break; - } } } } @@ -1426,9 +1435,31 @@ class PortableContact } foreach ($tags as $tag) { - dba::insert('gserver-tag', ['gserver-id' => $gserver['id'], 'tag' => $tag]); + dba::insert('gserver-tag', ['gserver-id' => $gserver['id'], 'tag' => $tag], true); + } + } + + // Create or update the relay contact + $fields = []; + if (isset($data->protocols)) { + if (isset($data->protocols->diaspora)) { + $fields['network'] = NETWORK_DIASPORA; + if (isset($data->protocols->diaspora->receive)) { + $fields['batch'] = $data->protocols->diaspora->receive; + } elseif (is_string($data->protocols->diaspora)) { + $fields['batch'] = $data->protocols->diaspora; + } + } + if (isset($data->protocols->dfrn)) { + $fields['network'] = NETWORK_DFRN; + if (isset($data->protocols->dfrn->receive)) { + $fields['batch'] = $data->protocols->dfrn->receive; + } elseif (is_string($data->protocols->dfrn)) { + $fields['batch'] = $data->protocols->dfrn; + } } } + Diaspora::setRelayContact($server_url, $fields); } /** @@ -1499,8 +1530,10 @@ class PortableContact if ($serverdata) { $servers = json_decode($serverdata); - foreach ($servers->pods as $server) { - Worker::add(PRIORITY_LOW, "DiscoverPoCo", "server", "https://".$server->host); + if (!empty($servers->pods)) { + foreach ($servers->pods as $server) { + Worker::add(PRIORITY_LOW, "DiscoverPoCo", "server", "https://".$server->host); + } } } @@ -1690,7 +1723,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) {