public static function getId($contact)
{
$gcontact_id = 0;
- $doprobing = false;
- $last_failure_str = '';
- $last_contact_str = '';
if (empty($contact['network'])) {
Logger::notice('Empty network', ['url' => $contact['url'], 'callstack' => System::callstack()]);
$gcnt = DBA::selectFirst('gcontact', $fields, ['nurl' => Strings::normaliseLink($contact['url'])]);
if (DBA::isResult($gcnt)) {
$gcontact_id = $gcnt['id'];
-
- // Update every 90 days
- if (empty($gcnt['network']) || in_array($gcnt['network'], Protocol::FEDERATED)) {
- $last_failure_str = $gcnt['last_failure'];
- $last_failure = strtotime($gcnt['last_failure']);
- $last_contact_str = $gcnt['last_contact'];
- $last_contact = strtotime($gcnt['last_contact']);
- $doprobing = (((time() - $last_contact) > (90 * 86400)) && ((time() - $last_failure) > (90 * 86400)));
- }
} else {
$contact['location'] = $contact['location'] ?? '';
$contact['about'] = $contact['about'] ?? '';
$cnt = DBA::selectFirst('gcontact', ['id', 'network'], $condition, ['order' => ['id']]);
if (DBA::isResult($cnt)) {
$gcontact_id = $cnt['id'];
- $doprobing = (empty($cnt['network']) || in_array($cnt['network'], Protocol::FEDERATED));
}
}
DBA::unlock();
- if ($doprobing) {
- Logger::notice('Probing', ['contact' => $last_contact_str, "failure" => $last_failure_str, "checking" => $contact['url']]);
- Worker::add(PRIORITY_LOW, 'GProbe', $contact['url']);
- }
-
return $gcontact_id;
}
Logger::log('Not authenticated. Invoking reverse magic-auth for ' . $my_url, Logger::DEBUG);
- Worker::add(PRIORITY_LOW, 'GProbe', $my_url);
-
// Remove the "addr" parameter from the destination. It is later added as separate parameter again.
$addr_request = 'addr=' . urlencode($addr);
$query = rtrim(str_replace($addr_request, '', $a->query_string), '?&');
+++ /dev/null
-<?php
-/**
- * @file src/Worker/GProbe.php
- */
-
-namespace Friendica\Worker;
-
-use Friendica\Core\Cache;
-use Friendica\Core\Logger;
-use Friendica\Core\Protocol;
-use Friendica\Database\DBA;
-use Friendica\Model\GContact;
-use Friendica\Network\Probe;
-use Friendica\Protocol\PortableContact;
-use Friendica\Util\Strings;
-
-class GProbe {
- public static function execute($url = '')
- {
- if (empty($url)) {
- return;
- }
-
- $r = q(
- "SELECT `id`, `url`, `network` FROM `gcontact` WHERE `nurl` = '%s' ORDER BY `id` LIMIT 1",
- DBA::escape(Strings::normaliseLink($url))
- );
-
- Logger::log("gprobe start for ".Strings::normaliseLink($url), Logger::DEBUG);
-
- if (!DBA::isResult($r)) {
- // Is it a DDoS attempt?
- $urlparts = parse_url($url);
-
- $result = Cache::get("gprobe:".$urlparts["host"]);
- if (!is_null($result)) {
- if (in_array($result["network"], [Protocol::FEED, Protocol::PHANTOM])) {
- Logger::debug("DDoS attempt detected for " . $urlparts["host"] . " by " . ($_SERVER["REMOTE_ADDR"] ?? ''), ['$_SERVER' => $_SERVER]);
- return;
- }
- }
-
- $arr = Probe::uri($url);
-
- if (is_null($result)) {
- Cache::set("gprobe:".$urlparts["host"], $arr);
- }
-
- if (!in_array($arr["network"], [Protocol::FEED, Protocol::PHANTOM])) {
- GContact::update($arr);
- }
-
- $r = q(
- "SELECT `id`, `url`, `network` FROM `gcontact` WHERE `nurl` = '%s' ORDER BY `id` LIMIT 1",
- DBA::escape(Strings::normaliseLink($url))
- );
- }
- if (DBA::isResult($r)) {
- // Check for accessibility and do a poco discovery
- if (GContact::updateFromProbe($r[0]['url'], true) && ($r[0]["network"] == Protocol::DFRN)) {
- PortableContact::loadWorker(0, 0, $r[0]['id'], str_replace('/profile/', '/poco/', $r[0]['url']));
- }
- }
-
- Logger::log("gprobe end for ".Strings::normaliseLink($url), Logger::DEBUG);
- return;
- }
-}