From 6170ddf58de950ced70a4223b0996b149618fbac Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 15 Jul 2019 04:33:00 +0000 Subject: [PATCH 1/2] Issue 7367: Only skip DFRN delivery when both author and owner of the post support AP --- src/Worker/Notifier.php | 51 ++++++++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/src/Worker/Notifier.php b/src/Worker/Notifier.php index f119fae580..fdef5e776b 100644 --- a/src/Worker/Notifier.php +++ b/src/Worker/Notifier.php @@ -425,14 +425,8 @@ class Notifier continue; } - if (in_array($rr['network'], [Protocol::DFRN, Protocol::DIASPORA]) && ($rr['protocol'] == Protocol::ACTIVITYPUB) && - !in_array($cmd, [Delivery::SUGGESTION, Delivery::REMOVAL, Delivery::RELOCATION, Delivery::POKE])) { - Logger::info('Contact is Friendica AP, so skipping delivery via legacy DFRN', ['url' => $rr['url']]); - continue; - } - - if (Config::get('debug', 'total_ap_delivery') && !empty($rr['url']) && ($rr['network'] == Protocol::DFRN) && !empty(APContact::getByURL($rr['url'], false))) { - Logger::log('Skipping contact ' . $rr['url'] . ' since it will be delivered via AP', Logger::DEBUG); + if (self::skipDFRN($rr, $target_item, $cmd)) { + Logger::info('Contact can be delivered via AP, so skip delivery via legacy DFRN', ['url' => $rr['url']]); continue; } @@ -465,14 +459,8 @@ class Notifier continue; } - if (in_array($contact['network'], [Protocol::DFRN, Protocol::DIASPORA]) && ($contact['protocol'] == Protocol::ACTIVITYPUB) && - !in_array($cmd, [Delivery::SUGGESTION, Delivery::REMOVAL, Delivery::RELOCATION, Delivery::POKE])) { - Logger::info('Contact is Friendica AP, so skipping delivery via legacy DFRN', ['url' => $contact['url']]); - continue; - } - - if (Config::get('debug', 'total_ap_delivery') && ($contact['network'] == Protocol::DFRN) && !empty(APContact::getByURL($contact['url'], false))) { - Logger::log('Skipping contact ' . $contact['url'] . ' since it will be delivered via AP', Logger::DEBUG); + if (self::skipDFRN($contact, $target_item, $cmd)) { + Logger::info('Contact can be delivered via AP, so skip delivery via legacy DFRN', ['url' => $contact['url']]); continue; } @@ -547,6 +535,37 @@ class Notifier return; } + /** + * Checks if the current delivery process needs to be transported via DFRN. + * + * @param array $contact Receiver of the post + * @param array $item The post + * @param string $cmd Notifier command + * @return bool + * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws \ImagickException + */ + private static function skipDFRN($contact, $item, $cmd) + { + // Don't skip when author or owner don't have AP profiles + if (empty(APContact::getByURL($item['author-link'], false)) || empty(APContact::getByURL($item['owner-link'], false))) { + return false; + } + + // Don't skip DFRN delivery for these commands + if (in_array($cmd, [Delivery::SUGGESTION, Delivery::REMOVAL, Delivery::RELOCATION, Delivery::POKE])) { + return false; + } + + // Skip DFRN when the will be (forcefully) delivered via AP + if (Config::get('debug', 'total_ap_delivery') && ($contact['network'] == Protocol::DFRN) && !empty(APContact::getByURL($contact['url'], false))) { + return true; + } + + // Skip DFRN delivery if the contact speaks ActivityPub + return in_array($contact['network'], [Protocol::DFRN, Protocol::DIASPORA]) && ($contact['protocol'] == Protocol::ACTIVITYPUB); + } + /** * Checks if the current action is a deletion command of a account removal activity * For Diaspora and ActivityPub we don't need to send single item deletion calls. From 143566b853a56a7631826b3e39c224227af1d3e7 Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 15 Jul 2019 04:36:55 +0000 Subject: [PATCH 2/2] Missing word --- src/Worker/Notifier.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Worker/Notifier.php b/src/Worker/Notifier.php index fdef5e776b..8a155f0bc0 100644 --- a/src/Worker/Notifier.php +++ b/src/Worker/Notifier.php @@ -557,7 +557,7 @@ class Notifier return false; } - // Skip DFRN when the will be (forcefully) delivered via AP + // Skip DFRN when the item will be (forcefully) delivered via AP if (Config::get('debug', 'total_ap_delivery') && ($contact['network'] == Protocol::DFRN) && !empty(APContact::getByURL($contact['url'], false))) { return true; }