Prevent loop also when fetching the outbox

This commit is contained in:
Michael 2021-07-18 16:42:55 +00:00
parent 596bb9fa7c
commit d8bf9c4601
2 changed files with 14 additions and 11 deletions

View file

@ -148,6 +148,19 @@ class APContact
$url = $apcontact['url']; $url = $apcontact['url'];
} }
// Detect multiple fast repeating request to the same address
// See https://github.com/friendica/friendica/issues/9303
$cachekey = 'apcontact:getByURL:' . $url;
$result = DI::cache()->get($cachekey);
if (!is_null($result)) {
Logger::notice('Multiple requests for the address', ['url' => $url, 'update' => $update, 'callstack' => System::callstack(20), 'result' => $result]);
if (!empty($fetched_contact)) {
return $fetched_contact;
}
} else {
DI::cache()->set($cachekey, System::callstack(20), Duration::FIVE_MINUTES);
}
$curlResult = HTTPSignature::fetchRaw($url); $curlResult = HTTPSignature::fetchRaw($url);
$failed = empty($curlResult) || empty($curlResult->getBody()) || $failed = empty($curlResult) || empty($curlResult->getBody()) ||
(!$curlResult->isSuccess() && ($curlResult->getReturnCode() != 410)); (!$curlResult->isSuccess() && ($curlResult->getReturnCode() != 410));
@ -171,16 +184,6 @@ class APContact
return $fetched_contact; return $fetched_contact;
} }
// Detect multiple fast repeating request to the same address
// See https://github.com/friendica/friendica/issues/9303
$cachekey = 'apcontact:getByURL:' . $url;
$result = DI::cache()->get($cachekey);
if (!is_null($result)) {
Logger::notice('Multiple requests for the address', ['url' => $url, 'update' => $update, 'callstack' => System::callstack(20), 'result' => $result]);
} else {
DI::cache()->set($cachekey, System::callstack(20), Duration::FIVE_MINUTES);
}
$apcontact['url'] = $compacted['@id']; $apcontact['url'] = $compacted['@id'];
$apcontact['uuid'] = JsonLD::fetchElement($compacted, 'diaspora:guid', '@value'); $apcontact['uuid'] = JsonLD::fetchElement($compacted, 'diaspora:guid', '@value');
$apcontact['type'] = str_replace('as:', '', JsonLD::fetchElement($compacted, '@type')); $apcontact['type'] = str_replace('as:', '', JsonLD::fetchElement($compacted, '@type'));

View file

@ -235,7 +235,7 @@ class Transmitter
*/ */
public static function getOutbox($owner, $page = null, $requester = '') public static function getOutbox($owner, $page = null, $requester = '')
{ {
$public_contact = Contact::getIdForURL($owner['url']); $public_contact = Contact::getIdForURL($owner['url'], 0, false);
$condition = ['uid' => 0, 'contact-id' => $public_contact, $condition = ['uid' => 0, 'contact-id' => $public_contact,
'private' => [Item::PUBLIC, Item::UNLISTED]]; 'private' => [Item::PUBLIC, Item::UNLISTED]];