From e6a054696db321cfccd446264357e4747fe98516 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 11 Jan 2020 18:25:48 +0000 Subject: [PATCH] Ensure that local delivery is done via DFRN --- src/Worker/Delivery.php | 10 ++++++---- src/Worker/Notifier.php | 10 ++++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/Worker/Delivery.php b/src/Worker/Delivery.php index a2088fde5d..37a4ec445a 100644 --- a/src/Worker/Delivery.php +++ b/src/Worker/Delivery.php @@ -197,6 +197,11 @@ class Delivery $contact['network'] = Protocol::DIASPORA; } + // Ensure that local contacts are delivered locally + if (Model\Contact::isLocal($contact['url'])) { + $contact['network'] = Protocol::DFRN; + } + Logger::notice('Delivering', ['cmd' => $cmd, 'target' => $target_id, 'followup' => $followup, 'network' => $contact['network']]); switch ($contact['network']) { @@ -287,11 +292,8 @@ class Delivery Logger::debug('Notifier entry: ' . $contact["url"] . ' ' . (($target_item['guid'] ?? '') ?: $target_item['id']) . ' entry: ' . $atom); - $basepath = implode('/', array_slice(explode('/', $contact['url']), 0, 3)); - // perform local delivery if we are on the same site - - if (Strings::compareLink($basepath, DI::baseUrl())) { + if (Model\Contact::isLocal($contact['url'])) { $condition = ['nurl' => Strings::normaliseLink($contact['url']), 'self' => true]; $target_self = DBA::selectFirst('contact', ['uid'], $condition); if (!DBA::isResult($target_self)) { diff --git a/src/Worker/Notifier.php b/src/Worker/Notifier.php index fea2da7e32..f4caf0eb9e 100644 --- a/src/Worker/Notifier.php +++ b/src/Worker/Notifier.php @@ -444,6 +444,11 @@ class Notifier if (DBA::isResult($r)) { foreach ($r as $rr) { + // Ensure that local contacts are delivered via DFRN + if (Contact::isLocal($rr['url'])) { + $contact['network'] == Protocol::DFRN; + } + if (!empty($rr['addr']) && ($rr['network'] == Protocol::ACTIVITYPUB) && !DBA::exists('fcontact', ['addr' => $rr['addr']])) { Logger::info('Contact is AP omly', ['target' => $target_id, 'contact' => $rr['url']]); continue; @@ -489,6 +494,11 @@ class Notifier // delivery loop while ($contact = DBA::fetch($delivery_contacts_stmt)) { + // Ensure that local contacts are delivered via DFRN + if (Contact::isLocal($contact['url'])) { + $contact['network'] == Protocol::DFRN; + } + if (!empty($contact['addr']) && ($contact['network'] == Protocol::ACTIVITYPUB) && !DBA::exists('fcontact', ['addr' => $contact['addr']])) { Logger::info('Contact is AP omly', ['target' => $target_id, 'contact' => $contact['url']]); continue;