AP: Automatically send follow requests for reshared items

This commit is contained in:
Michael 2019-01-30 21:33:23 +00:00
parent fc0acd7b1f
commit a7963fe18a
3 changed files with 25 additions and 1 deletions

View File

@ -775,6 +775,10 @@ class Post extends BaseObject
*/ */
private function getDefaultText() private function getDefaultText()
{ {
if (!local_user()) {
return;
}
$a = self::getApp(); $a = self::getApp();
$item = Item::selectFirst(['author-addr'], ['id' => $this->getId()]); $item = Item::selectFirst(['author-addr'], ['id' => $this->getId()]);

View File

@ -329,6 +329,15 @@ class Processor
$item_id = Item::insert($item); $item_id = Item::insert($item);
Logger::log('Storing for user ' . $item['uid'] . ': ' . $item_id); 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']);
}
}
} }
/** /**

View File

@ -6,6 +6,7 @@ namespace Friendica\Protocol\ActivityPub;
use Friendica\BaseObject; use Friendica\BaseObject;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\Core\Config;
use Friendica\Core\Logger; use Friendica\Core\Logger;
use Friendica\Core\System; use Friendica\Core\System;
use Friendica\Util\HTTPSignature; use Friendica\Util\HTTPSignature;
@ -1295,10 +1296,20 @@ class Transmitter
* @throws \ImagickException * @throws \ImagickException
* @throws \Exception * @throws \Exception
*/ */
public static function sendFollowObject($object, $target, $uid) public static function sendFollowObject($object, $target, $uid = 0)
{ {
$profile = APContact::getByURL($target); $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); $owner = User::getOwnerDataById($uid);
$data = ['@context' => ActivityPub::CONTEXT, $data = ['@context' => ActivityPub::CONTEXT,