X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FProtocol%2FActivityPub%2FProcessor.php;h=aba285c1800e941029d0deaaa2449e610e7477d7;hb=a3c323b366e58c154e5a43f56d85412762e0ac83;hp=c30a4ccc9963220af28b3b4f21f1af7d032f9327;hpb=c30089eb6f4f9547895d40caee144f81ff3a4e95;p=friendica.git diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php index c30a4ccc99..aba285c180 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -21,7 +21,6 @@ namespace Friendica\Protocol\ActivityPub; -use Friendica\Content\PageInfo; use Friendica\Content\Text\BBCode; use Friendica\Content\Text\HTML; use Friendica\Content\Text\Markdown; @@ -123,21 +122,7 @@ class Processor } $data = ['uri-id' => $uriid]; - - $filetype = strtolower(substr($attachment['mediaType'], 0, strpos($attachment['mediaType'], '/'))); - if ($filetype == 'image') { - $data['type'] = Post\Media::IMAGE; - } elseif ($filetype == 'video') { - $data['type'] = Post\Media::VIDEO; - } elseif ($filetype == 'audio') { - $data['type'] = Post\Media::AUDIO; - } elseif (in_array($attachment['mediaType'], ['application/x-bittorrent', 'application/x-bittorrent;x-scheme-handler/magnet'])) { - $data['type'] = Post\Media::TORRENT; - } else { - Logger::info('Unknown type', ['attachment' => $attachment]); - return; - } - + $data['type'] = Post\Media::UNKNOWN; $data['url'] = $attachment['url']; $data['mimetype'] = $attachment['mediaType']; $data['height'] = $attachment['height'] ?? null; @@ -149,113 +134,20 @@ class Processor } /** - * Add attachment data to the item array + * Stire attachment data * * @param array $activity * @param array $item - * - * @return array array */ - private static function constructAttachList($activity, $item) + private static function storeAttachments($activity, $item) { if (empty($activity['attachments'])) { - return $item; + return; } - $leading = ''; - $trailing = ''; - foreach ($activity['attachments'] as $attach) { - switch ($attach['type']) { - case 'link': - $data = [ - 'url' => $attach['url'], - 'type' => $attach['type'], - 'title' => $attach['title'] ?? '', - 'text' => $attach['desc'] ?? '', - 'image' => $attach['image'] ?? '', - 'images' => [], - 'keywords' => [], - ]; - $item['body'] = PageInfo::appendDataToBody($item['body'], $data); - break; - default: - self::storeAttachmentAsMedia($item['uri-id'], $attach); - - $filetype = strtolower(substr($attach['mediaType'], 0, strpos($attach['mediaType'], '/'))); - if ($filetype == 'image') { - if (!empty($activity['source'])) { - foreach ([0, 1, 2] as $size) { - if (preg_match('#/photo/.*-' . $size . '\.#ism', $attach['url']) && - strpos(preg_replace('#(/photo/.*)-[012]\.#ism', '$1-' . $size . '.', $activity['source']), $attach['url'])) { - continue 3; - } - } - if (strpos($activity['source'], $attach['url'])) { - continue 2; - } - } - - // image is the preview/thumbnail URL - if (!empty($attach['image'])) { - $media = '[url=' . $attach['url'] . ']'; - $attach['url'] = $attach['image']; - } else { - $media = ''; - } - - if (empty($attach['name'])) { - $media .= '[img]' . $attach['url'] . '[/img]'; - } else { - $media .= '[img=' . $attach['url'] . ']' . $attach['name'] . '[/img]'; - } - - if (!empty($attach['image'])) { - $media .= '[/url]'; - } - - if ($item['post-type'] == Item::PT_IMAGE) { - $leading .= $media; - } else { - $trailing .= $media; - } - } elseif ($filetype == 'audio') { - if (!empty($activity['source']) && strpos($activity['source'], $attach['url'])) { - continue 2; - } - - if ($item['post-type'] == Item::PT_AUDIO) { - $leading .= '[audio]' . $attach['url'] . "[/audio]\n"; - } else { - $trailing .= '[audio]' . $attach['url'] . "[/audio]\n"; - } - } elseif ($filetype == 'video') { - if (!empty($activity['source']) && strpos($activity['source'], $attach['url'])) { - continue 2; - } - - if ($item['post-type'] == Item::PT_VIDEO) { - $leading .= '[video]' . $attach['url'] . "[/video]\n"; - } else { - $trailing .= '[video]' . $attach['url'] . "[/video]\n"; - } - } - } - } - - if (!empty($leading) && !empty(trim($item['body']))) { - $item['body'] = $leading . "[hr]\n" . $item['body']; - } elseif (!empty($leading)) { - $item['body'] = $leading; - } - - if (!empty($trailing) && !empty(trim($item['body']))) { - $item['body'] = $item['body'] . "\n[hr]" . $trailing; - } elseif (!empty($trailing)) { - $item['body'] = $trailing; + self::storeAttachmentAsMedia($item['uri-id'], $attach); } - - return $item; } /** @@ -279,7 +171,7 @@ class Processor $item = self::processContent($activity, $item); - $item = self::constructAttachList($activity, $item); + self::storeAttachments($activity, $item); if (empty($item)) { return; @@ -413,7 +305,7 @@ class Processor $item['plink'] = $activity['alternate-url'] ?? $item['uri']; - $item = self::constructAttachList($activity, $item); + self::storeAttachments($activity, $item); // We received the post via AP, so we set the protocol of the server to AP $contact = Contact::getById($item['author-id'], ['gsid']); @@ -513,7 +405,7 @@ class Processor $event['finish'] = $activity['end-time']; $event['nofinish'] = empty($event['finish']); $event['location'] = $activity['location']; - $event['adjust'] = true; + $event['adjust'] = $activity['adjust'] ?? true; $event['cid'] = $item['contact-id']; $event['uid'] = $item['uid']; $event['uri'] = $item['uri']; @@ -571,6 +463,7 @@ class Processor if (!empty($activity['source'])) { $item['body'] = $activity['source']; $item['raw-body'] = $content; + $item['body'] = Item::improveSharedDataInBody($item); } else { if (empty($activity['directmessage']) && ($item['thr-parent'] != $item['uri']) && ($item['gravity'] == GRAVITY_COMMENT)) { $item_private = !in_array(0, $activity['item_receiver']); @@ -709,6 +602,12 @@ class Processor continue; } + if (!$item['isForum'] && ($receiver != 0) && ($item['gravity'] == GRAVITY_PARENT) && + ($item['post-reason'] == Item::PR_BCC) && !Contact::isSharingByURL($activity['author'], $receiver)) { + Logger::info('Top level post via BCC from a non follower, ignoring', ['uid' => $receiver, 'contact' => $item['contact-id']]); + continue; + } + if (DI::pConfig()->get($receiver, 'system', 'accept_only_sharer', false) && ($receiver != 0) && ($item['gravity'] == GRAVITY_PARENT)) { $skip = !Contact::isSharingByURL($activity['author'], $receiver); @@ -877,12 +776,12 @@ class Processor $object = ActivityPub::fetchContent($url, $uid); if (empty($object)) { - Logger::log('Activity ' . $url . ' was not fetchable, aborting.'); + Logger::notice('Activity was not fetchable, aborting.', ['url' => $url]); return ''; } if (empty($object['id'])) { - Logger::log('Activity ' . $url . ' has got not id, aborting. ' . json_encode($object)); + Logger::notice('Activity has got not id, aborting. ', ['url' => $url, 'object' => $object]); return ''; } @@ -1033,7 +932,7 @@ class Processor DBA::update('contact', ['hub-verify' => $activity['id'], 'protocol' => Protocol::ACTIVITYPUB], ['id' => $cid]); } - Logger::log('Follow user ' . $uid . ' from contact ' . $cid . ' with id ' . $activity['id']); + Logger::notice('Follow user ' . $uid . ' from contact ' . $cid . ' with id ' . $activity['id']); } /**