mirror of
https://github.com/friendica/friendica
synced 2025-04-23 21:10:12 +00:00
New "relay" class / check of incoming popsts from DFRN and Diaspora
This commit is contained in:
parent
0b37f1d56c
commit
e26d73393e
4 changed files with 195 additions and 82 deletions
|
@ -35,15 +35,14 @@ use Friendica\Model\Event;
|
|||
use Friendica\Model\Item;
|
||||
use Friendica\Model\ItemURI;
|
||||
use Friendica\Model\Mail;
|
||||
use Friendica\Model\Search;
|
||||
use Friendica\Model\Tag;
|
||||
use Friendica\Model\User;
|
||||
use Friendica\Protocol\Activity;
|
||||
use Friendica\Protocol\ActivityPub;
|
||||
use Friendica\Protocol\Relay;
|
||||
use Friendica\Util\DateTimeFormat;
|
||||
use Friendica\Util\JsonLD;
|
||||
use Friendica\Util\Strings;
|
||||
use Text_LanguageDetect;
|
||||
|
||||
/**
|
||||
* ActivityPub Processor Protocol class
|
||||
|
@ -801,25 +800,13 @@ class Processor
|
|||
return true;
|
||||
}
|
||||
|
||||
$config = DI::config();
|
||||
|
||||
$subscribe = $config->get('system', 'relay_subscribe', false);
|
||||
if ($subscribe) {
|
||||
$scope = $config->get('system', 'relay_scope', SR_SCOPE_ALL);
|
||||
} else {
|
||||
$scope = SR_SCOPE_NONE;
|
||||
}
|
||||
|
||||
$replyto = JsonLD::fetchElement($activity['as:object'], 'as:inReplyTo', '@id');
|
||||
if (Item::exists(['uri' => $replyto])) {
|
||||
Logger::info('Post is a reply to an existing post - accepted', ['id' => $id, 'replyto' => $replyto]);
|
||||
return true;
|
||||
}
|
||||
|
||||
if ($scope == SR_SCOPE_NONE) {
|
||||
Logger::info('Server does not accept relay posts - rejected', ['id' => $id]);
|
||||
return false;
|
||||
}
|
||||
$body = HTML::toBBCode(JsonLD::fetchElement($activity['as:object'], 'as:content', '@value'));
|
||||
|
||||
$messageTags = [];
|
||||
$tags = Receiver::processTags(JsonLD::fetchElementArray($activity['as:object'], 'as:tag') ?? []);
|
||||
|
@ -832,61 +819,7 @@ class Processor
|
|||
}
|
||||
}
|
||||
|
||||
$systemTags = [];
|
||||
$userTags = [];
|
||||
$denyTags = [];
|
||||
|
||||
if ($scope == SR_SCOPE_TAGS) {
|
||||
$server_tags = $config->get('system', 'relay_server_tags');
|
||||
$tagitems = explode(',', mb_strtolower($server_tags));
|
||||
foreach ($tagitems AS $tag) {
|
||||
$systemTags[] = trim($tag, '# ');
|
||||
}
|
||||
|
||||
if ($config->get('system', 'relay_user_tags')) {
|
||||
$userTags = Search::getUserTags();
|
||||
}
|
||||
}
|
||||
|
||||
$tagList = array_unique(array_merge($systemTags, $userTags));
|
||||
|
||||
$deny_tags = $config->get('system', 'relay_deny_tags');
|
||||
$tagitems = explode(',', mb_strtolower($deny_tags));
|
||||
foreach ($tagitems AS $tag) {
|
||||
$tag = trim($tag, '# ');
|
||||
$denyTags[] = $tag;
|
||||
}
|
||||
|
||||
if (!empty($tagList) || !empty($denyTags)) {
|
||||
$content = mb_strtolower(BBCode::toPlaintext(HTML::toBBCode(JsonLD::fetchElement($activity['as:object'], 'as:content', '@value')), false));
|
||||
|
||||
foreach ($messageTags as $tag) {
|
||||
if (in_array($tag, $denyTags)) {
|
||||
Logger::info('Unwanted hashtag found - rejected', ['id' => $id, 'hashtag' => $tag]);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (in_array($tag, $tagList)) {
|
||||
Logger::info('Subscribed hashtag found - accepted', ['id' => $id, 'hashtag' => $tag]);
|
||||
return true;
|
||||
}
|
||||
|
||||
// We check with "strpos" for performance issues. Only when this is true, the regular expression check is used
|
||||
// RegExp is taken from here: https://medium.com/@shiba1014/regex-word-boundaries-with-unicode-207794f6e7ed
|
||||
if ((strpos($content, $tag) !== false) && preg_match('/(?<=[\s,.:;"\']|^)' . preg_quote($tag, '/') . '(?=[\s,.:;"\']|$)/', $content)) {
|
||||
Logger::info('Subscribed hashtag found in content - accepted', ['id' => $id, 'hashtag' => $tag]);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($scope == SR_SCOPE_ALL) {
|
||||
Logger::info('Server accept all posts - accepted', ['id' => $id]);
|
||||
return true;
|
||||
}
|
||||
|
||||
Logger::info('No matching hashtags found - rejected', ['id' => $id]);
|
||||
return false;
|
||||
return Relay::isSolicitedPost($messageTags, $body, $id, Protocol::ACTIVITYPUB);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue