From 29d83c0ffb135a0cec8c6ad5fc2a80fbdd96683f Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 15 Feb 2022 07:08:02 +0000 Subject: [PATCH] Block communication with Diaspora for communities --- src/Model/Item.php | 9 +++++++++ src/Module/Diaspora/Receive.php | 6 ++++++ src/Protocol/Diaspora.php | 7 +------ src/Worker/Notifier.php | 2 +- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/Model/Item.php b/src/Model/Item.php index 46f41e9a9..9c6742634 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -818,6 +818,15 @@ class Item $item['inform'] = trim($item['inform'] ?? ''); $item['file'] = trim($item['file'] ?? ''); + // Communities aren't working with the Diaspora protoccol + if (($uid != 0) && ($item['network'] == Protocol::DIASPORA)) { + $user = User::getById($uid, ['account-type']); + if ($user['account-type'] == Contact::TYPE_COMMUNITY) { + Logger::info('Community posts are not supported via Diaspora'); + return 0; + } + } + // Items cannot be stored before they happen ... if ($item['created'] > DateTimeFormat::utcNow()) { $item['created'] = DateTimeFormat::utcNow(); diff --git a/src/Module/Diaspora/Receive.php b/src/Module/Diaspora/Receive.php index 498d1b13e..19de0873f 100644 --- a/src/Module/Diaspora/Receive.php +++ b/src/Module/Diaspora/Receive.php @@ -93,6 +93,12 @@ class Receive extends BaseModule $importer = User::getByGuid($this->parameters['guid']); + if ($importer['account-type'] == User::ACCOUNT_TYPE_COMMUNITY) { + // Communities aren't working with the Diaspora protoccol + // We throw an "accepted" here, so that the sender doesn't repeat the delivery + throw new HTTPException\AcceptedException(); + } + $msg = $this->decodePost(false, $importer['prvkey'] ?? ''); $this->logger->info('Diaspora: Dispatching.'); diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index aba79364f..ea0b2b674 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -858,10 +858,6 @@ class Diaspora } elseif (($contact["rel"] == Contact::SHARING) || ($contact["rel"] == Contact::FRIEND)) { // Yes, then it is fine. return true; - // Is it a post to a community? - } elseif (($contact["rel"] == Contact::FOLLOWER) && ($importer['account-type'] == User::ACCOUNT_TYPE_COMMUNITY)) { - // That's good - return true; // Is the message a global user or a comment? } elseif (($importer["uid"] == 0) || $is_comment) { // Messages for the global users and comments are always accepted @@ -3473,9 +3469,8 @@ class Diaspora private static function prependParentAuthorMention($body, $profile_url) { - $profile = Contact::getByURL($profile_url, false, ['addr', 'name', 'contact-type']); + $profile = Contact::getByURL($profile_url, false, ['addr', 'name']); if (!empty($profile['addr']) - && $profile['contact-type'] != Contact::TYPE_COMMUNITY && !strstr($body, $profile['addr']) && !strstr($body, $profile_url) ) { diff --git a/src/Worker/Notifier.php b/src/Worker/Notifier.php index bfd38fe01..3a5c7f13e 100644 --- a/src/Worker/Notifier.php +++ b/src/Worker/Notifier.php @@ -153,7 +153,7 @@ class Notifier } // Should the post be transmitted to Diaspora? - $diaspora_delivery = true; + $diaspora_delivery = ($owner['account-type'] != User::ACCOUNT_TYPE_COMMUNITY); // If this is a public conversation, notify the feed hub $public_message = true;