<?php
/**
- * @copyright Copyright (C) 2010-2022, the Friendica project
+ * @copyright Copyright (C) 2010-2023, the Friendica project
*
* @license GNU AGPL version 3 or any later version
*
* @param string $url
* @return boolean "true" is the post is wanted by the system
*/
- public static function isSolicitedPost(array $tags, string $body, int $authorid, string $url, string $network = ''): bool
+ public static function isSolicitedPost(array $tags, string $body, int $authorid, string $url, string $network = '', int $causerid = 0): bool
{
$config = DI::config();
return false;
}
+ if (!empty($causerid)) {
+ $contact = Contact::getById($causerid, ['url']);
+ $causer = $contact['url'] ?? '';
+ } else {
+ $causer = '';
+ }
+
$body = ActivityPub\Processor::normalizeMentionLinks($body);
$systemTags = [];
foreach ($tags as $tag) {
$tag = mb_strtolower($tag);
if (in_array($tag, $denyTags)) {
- Logger::info('Unwanted hashtag found - rejected', ['hashtag' => $tag, 'network' => $network, 'url' => $url]);
+ Logger::info('Unwanted hashtag found - rejected', ['hashtag' => $tag, 'network' => $network, 'url' => $url, 'causer' => $causer]);
return false;
}
if (in_array($tag, $tagList)) {
- Logger::info('Subscribed hashtag found - accepted', ['hashtag' => $tag, 'network' => $network, 'url' => $url]);
+ Logger::info('Subscribed hashtag found - accepted', ['hashtag' => $tag, 'network' => $network, 'url' => $url, 'causer' => $causer]);
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', ['hashtag' => $tag, 'network' => $network, 'url' => $url]);
+ Logger::info('Subscribed hashtag found in content - accepted', ['hashtag' => $tag, 'network' => $network, 'url' => $url, 'causer' => $causer]);
return true;
}
}
}
+ if (!self::isWantedLanguage($body)) {
+ Logger::info('Unwanted or Undetected language found - rejected', ['network' => $network, 'url' => $url, 'causer' => $causer]);
+ return false;
+ }
+
+ if ($scope == self::SCOPE_ALL) {
+ Logger::info('Server accept all posts - accepted', ['network' => $network, 'url' => $url, 'causer' => $causer]);
+ return true;
+ }
+
+ Logger::info('No matching hashtags found - rejected', ['network' => $network, 'url' => $url, 'causer' => $causer]);
+ return false;
+ }
+
+ /**
+ * Detect the language of a post and decide if the post should be accepted
+ *
+ * @param string $body
+ * @return boolean
+ */
+ public static function isWantedLanguage(string $body)
+ {
$languages = [];
foreach (Item::getLanguageArray($body, 10) as $language => $reliability) {
if ($reliability > 0) {
Logger::debug('Got languages', ['languages' => $languages, 'body' => $body]);
if (!empty($languages)) {
- if (in_array($languages[0], $config->get('system', 'relay_deny_languages'))) {
- Logger::info('Unwanted language found - rejected', ['language' => $languages[0], 'network' => $network, 'url' => $url]);
+ if (in_array($languages[0], DI::config()->get('system', 'relay_deny_languages'))) {
+ Logger::info('Unwanted language found', ['language' => $languages[0]]);
return false;
}
- } elseif ($config->get('system', 'relay_deny_undetected_language')) {
- Logger::info('Undetected language found - rejected', ['body' => $body, 'network' => $network, 'url' => $url]);
+ } elseif (DI::config()->get('system', 'relay_deny_undetected_language')) {
+ Logger::info('Undetected language found', ['body' => $body]);
return false;
}
- if ($scope == self::SCOPE_ALL) {
- Logger::info('Server accept all posts - accepted', ['network' => $network, 'url' => $url]);
- return true;
- }
-
- Logger::info('No matching hashtags found - rejected', ['network' => $network, 'url' => $url]);
- return false;
+ return true;
}
/**
if (in_array($gserver['network'], [Protocol::ACTIVITYPUB, Protocol::DFRN])) {
$system = APContact::getByURL($gserver['url'] . '/friendica');
if (!empty($system['sharedinbox'])) {
- Logger::info('Sucessfully probed for relay contact', ['server' => $gserver['url']]);
+ Logger::info('Successfully probed for relay contact', ['server' => $gserver['url']]);
$id = Contact::updateFromProbeByURL($system['url']);
Logger::info('Updated relay contact', ['server' => $gserver['url'], 'id' => $id]);
return;
DBA::close($tagserver);
}
- // All adresses with the given id
+ // All addresses with the given id
if (!empty($tagserverlist)) {
$servers = DBA::select('gserver', ['id', 'url', 'network'], ['relay-subscribe' => true, 'relay-scope' => 'tags', 'id' => $tagserverlist]);
while ($server = DBA::fetch($servers)) {
*
* @param array $fields Field list
* @return array List of relay servers
- * @throws Exception
+ * @throws Exception
*/
public static function getList(array $fields = []): array
{
foreach (self::getList() as $server) {
$success = ActivityPub\Transmitter::sendRelayFollow($server['url']);
Logger::debug('Resubscribed', ['profile' => $server['url'], 'success' => $success]);
- }
+ }
}
}