From f3c2eb5b115928402648a8a9582b7cf44f184319 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sat, 18 May 2019 11:09:13 +0200 Subject: [PATCH] Fix receiver list for mails / only deliver mail via DFRN to legacy contacts --- src/Protocol/ActivityPub/Transmitter.php | 64 ++++++++++++------------ src/Worker/Notifier.php | 10 ++-- 2 files changed, 38 insertions(+), 36 deletions(-) diff --git a/src/Protocol/ActivityPub/Transmitter.php b/src/Protocol/ActivityPub/Transmitter.php index 1b418a7a54..1b36241ca9 100644 --- a/src/Protocol/ActivityPub/Transmitter.php +++ b/src/Protocol/ActivityPub/Transmitter.php @@ -422,46 +422,48 @@ class Transmitter } } - $parents = Item::select(['id', 'author-link', 'owner-link', 'gravity', 'uri'], ['parent' => $item['parent']]); - while ($parent = Item::fetch($parents)) { - if ($parent['gravity'] == GRAVITY_PARENT) { - $profile = APContact::getByURL($parent['owner-link'], false); - if (!empty($profile)) { - if ($item['gravity'] != GRAVITY_PARENT) { - // Comments to forums are directed to the forum - // But comments to forums aren't directed to the followers collection - if ($profile['type'] == 'Group') { - $data['to'][] = $profile['url']; + if (!empty($item['parent'])) { + $parents = Item::select(['id', 'author-link', 'owner-link', 'gravity', 'uri'], ['parent' => $item['parent']]); + while ($parent = Item::fetch($parents)) { + if ($parent['gravity'] == GRAVITY_PARENT) { + $profile = APContact::getByURL($parent['owner-link'], false); + if (!empty($profile)) { + if ($item['gravity'] != GRAVITY_PARENT) { + // Comments to forums are directed to the forum + // But comments to forums aren't directed to the followers collection + if ($profile['type'] == 'Group') { + $data['to'][] = $profile['url']; + } else { + $data['cc'][] = $profile['url']; + if (!$item['private']) { + $data['cc'][] = $actor_profile['followers']; + } + } } else { - $data['cc'][] = $profile['url']; - if (!$item['private']) { + // Public thread parent post always are directed to the followes + if (!$item['private'] && !$forum_mode) { $data['cc'][] = $actor_profile['followers']; } } + } + } + + // Don't include data from future posts + if ($parent['id'] >= $last_id) { + continue; + } + + $profile = APContact::getByURL($parent['author-link'], false); + if (!empty($profile)) { + if (($profile['type'] == 'Group') || ($parent['uri'] == $item['thr-parent'])) { + $data['to'][] = $profile['url']; } else { - // Public thread parent post always are directed to the followes - if (!$item['private'] && !$forum_mode) { - $data['cc'][] = $actor_profile['followers']; - } + $data['cc'][] = $profile['url']; } } } - - // Don't include data from future posts - if ($parent['id'] >= $last_id) { - continue; - } - - $profile = APContact::getByURL($parent['author-link'], false); - if (!empty($profile)) { - if (($profile['type'] == 'Group') || ($parent['uri'] == $item['thr-parent'])) { - $data['to'][] = $profile['url']; - } else { - $data['cc'][] = $profile['url']; - } - } + DBA::close($parents); } - DBA::close($parents); $data['to'] = array_unique($data['to']); $data['cc'] = array_unique($data['cc']); diff --git a/src/Worker/Notifier.php b/src/Worker/Notifier.php index 77aa4d564a..5094734808 100644 --- a/src/Worker/Notifier.php +++ b/src/Worker/Notifier.php @@ -78,7 +78,7 @@ class Notifier $recipients[] = $message['contact-id']; $mail = ActivityPub\Transmitter::ItemArrayFromMail($target_id); - $inboxes = ActivityPub\Transmitter::fetchTargetInboxes($mail, §uid, true); + $inboxes = ActivityPub\Transmitter::fetchTargetInboxes($mail, $uid, true); foreach ($inboxes as $inbox) { Logger::info('Delivery via ActivityPub', ['cmd' => $cmd, 'id' => $target_id, 'inbox' => $inbox]); Worker::add(['priority' => PRIORITY_HIGH, 'created' => $a->queue['created'], 'dont_fork' => true], @@ -441,8 +441,8 @@ class Notifier continue; } - if (($rr['network'] == Protocol::DFRN) && ($rr['protocol'] == Protocol::ACTIVITYPUB) && - !in_array($cmd, [Delivery::MAIL, Delivery::SUGGESTION, Delivery::REMOVAL, Delivery::RELOCATION])) { + if (in_array($rr['network'], [Protocol::DFRN, Protocol::DIASPORA]) && ($rr['protocol'] == Protocol::ACTIVITYPUB) && + !in_array($cmd, [Delivery::SUGGESTION, Delivery::REMOVAL, Delivery::RELOCATION])) { Logger::info('Contact is Friendica AP, so skipping delivery via legacy DFRN', ['url' => $rr['url']]); continue; } @@ -481,8 +481,8 @@ class Notifier continue; } - if (($contact['network'] == Protocol::DFRN) && ($contact['protocol'] == Protocol::ACTIVITYPUB) && - !in_array($cmd, [Delivery::MAIL, Delivery::SUGGESTION, Delivery::REMOVAL, Delivery::RELOCATION])) { + if (in_array($contact['network'], [Protocol::DFRN, Protocol::DIASPORA]) && ($contact['protocol'] == Protocol::ACTIVITYPUB) && + !in_array($cmd, [Delivery::SUGGESTION, Delivery::REMOVAL, Delivery::RELOCATION])) { Logger::info('Contact is Friendica AP, so skipping delivery via legacy DFRN', ['url' => $contact['url']]); continue; }