From a7963fe18a52fe5402b18421fa00dc58d7ee6420 Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 30 Jan 2019 21:33:23 +0000 Subject: [PATCH] AP: Automatically send follow requests for reshared items --- src/Object/Post.php | 4 ++++ src/Protocol/ActivityPub/Processor.php | 9 +++++++++ src/Protocol/ActivityPub/Transmitter.php | 13 ++++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/Object/Post.php b/src/Object/Post.php index bc1123db2b..847135d362 100644 --- a/src/Object/Post.php +++ b/src/Object/Post.php @@ -775,6 +775,10 @@ class Post extends BaseObject */ private function getDefaultText() { + if (!local_user()) { + return; + } + $a = self::getApp(); $item = Item::selectFirst(['author-addr'], ['id' => $this->getId()]); diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php index ea4d5ba411..fd6d70a42a 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -329,6 +329,15 @@ class Processor $item_id = Item::insert($item); Logger::log('Storing for user ' . $item['uid'] . ': ' . $item_id); } + + if (!$item['private'] && ($item['gravity'] == GRAVITY_PARENT) && ($item['author-link'] != $item['owner-link'])) { + $author = APContact::getByURL($item['owner-link'], false); + // We send automatic follow requests for reshared messages. (We don't need though for forum posts) + if ($author['type'] != 'Group') { + Logger::log('Send follow request for ' . $item['uri'] . ' to ' . $item['author-link'], Logger::DEBUG); + ActivityPub\Transmitter::sendFollowObject($item['uri'], $item['author-link']); + } + } } /** diff --git a/src/Protocol/ActivityPub/Transmitter.php b/src/Protocol/ActivityPub/Transmitter.php index b2f0291adf..f5953e7c5f 100644 --- a/src/Protocol/ActivityPub/Transmitter.php +++ b/src/Protocol/ActivityPub/Transmitter.php @@ -6,6 +6,7 @@ namespace Friendica\Protocol\ActivityPub; use Friendica\BaseObject; use Friendica\Database\DBA; +use Friendica\Core\Config; use Friendica\Core\Logger; use Friendica\Core\System; use Friendica\Util\HTTPSignature; @@ -1295,10 +1296,20 @@ class Transmitter * @throws \ImagickException * @throws \Exception */ - public static function sendFollowObject($object, $target, $uid) + public static function sendFollowObject($object, $target, $uid = 0) { $profile = APContact::getByURL($target); + if (empty($uid)) { + // Fetch the list of administrators + $admin_mail = explode(',', str_replace(' ', '', Config::get('config', 'admin_email'))); + + // We need to use some user as a sender. It doesn't care who it will send. We will use an administrator account. + $condition = ['verified' => true, 'blocked' => false, 'account_removed' => false, 'account_expired' => false, 'email' => $admin_mail]; + $first_user = DBA::selectFirst('user', ['uid'], $condition); + $uid = $first_user['uid']; + } + $owner = User::getOwnerDataById($uid); $data = ['@context' => ActivityPub::CONTEXT, -- 2.39.5