Browse Source

AP: Automatically send follow requests for reshared items

pull/6567/head
Michael 3 years ago
parent
commit
a7963fe18a
  1. 4
      src/Object/Post.php
  2. 9
      src/Protocol/ActivityPub/Processor.php
  3. 13
      src/Protocol/ActivityPub/Transmitter.php

4
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()]);

9
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']);
}
}
}
/**

13
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,

Loading…
Cancel
Save