Merge pull request #9322 from annando/issue-9305

Issue 9305: Relay deny tags are added
This commit is contained in:
Tobias Diekershoff 2020-09-30 07:21:59 +02:00 committed by GitHub
commit c06197377f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 40 additions and 19 deletions

View file

@ -810,11 +810,6 @@ class Processor
$scope = SR_SCOPE_NONE;
}
if ($scope == SR_SCOPE_ALL) {
Logger::info('Server accept all posts - accepted', ['id' => $id]);
return true;
}
$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]);
@ -839,11 +834,11 @@ class Processor
$systemTags = [];
$userTags = [];
$denyTags = [];
if ($scope == SR_SCOPE_TAGS) {
$server_tags = $config->get('system', 'relay_server_tags', []);
$server_tags = $config->get('system', 'relay_server_tags');
$tagitems = explode(',', mb_strtolower($server_tags));
foreach ($tagitems AS $tag) {
$systemTags[] = trim($tag, '# ');
}
@ -853,22 +848,43 @@ class Processor
}
}
$content = mb_strtolower(BBCode::toPlaintext(HTML::toBBCode(JsonLD::fetchElement($activity['as:object'], 'as:content', '@value')), false));
$tagList = array_unique(array_merge($systemTags, $userTags));
foreach ($messageTags as $tag) {
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;
$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;
}