From 9eec2bf5f3642566a09d66d2d40f5b8de89e8761 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 27 Jan 2022 17:51:23 +0000 Subject: [PATCH] Improved support for "Page" type --- src/Model/Post/Media.php | 6 ++++++ src/Protocol/ActivityPub/Processor.php | 2 +- src/Protocol/ActivityPub/Receiver.php | 8 ++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/Model/Post/Media.php b/src/Model/Post/Media.php index c9e3128c4e..07cad9cf6f 100644 --- a/src/Model/Post/Media.php +++ b/src/Model/Post/Media.php @@ -169,6 +169,12 @@ class Media if (empty($media['mimetype']) || empty($media['size'])) { $timeout = DI::config()->get('system', 'xrd_timeout'); $curlResult = DI::httpClient()->head($media['url'], [HttpClientOptions::TIMEOUT => $timeout]); + + // Workaround for systems that can't handle a HEAD request + if (!$curlResult->isSuccess() && ($curlResult->getReturnCode() == 405)) { + $curlResult = DI::httpClient()->get($media['url'], [HttpClientOptions::TIMEOUT => $timeout]); + } + if ($curlResult->isSuccess()) { if (empty($media['mimetype'])) { $media['mimetype'] = $curlResult->getHeader('Content-Type')[0] ?? ''; diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php index 38999eb0da..4a9dc352d4 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -125,7 +125,7 @@ class Processor $data = ['uri-id' => $uriid]; $data['type'] = Post\Media::UNKNOWN; $data['url'] = $attachment['url']; - $data['mimetype'] = $attachment['mediaType']; + $data['mimetype'] = $attachment['mediaType'] ?? null; $data['height'] = $attachment['height'] ?? null; $data['width'] = $attachment['width'] ?? null; $data['size'] = $attachment['size'] ?? null; diff --git a/src/Protocol/ActivityPub/Receiver.php b/src/Protocol/ActivityPub/Receiver.php index 4504cee4c4..a28cc96170 100644 --- a/src/Protocol/ActivityPub/Receiver.php +++ b/src/Protocol/ActivityPub/Receiver.php @@ -1454,6 +1454,14 @@ class Receiver $object_data['attachments'] = array_merge($object_data['attachments'], self::processAttachmentUrls($object['as:url'] ?? [])); } + // For page types we expect that the alternate url posts to some page. + // So we add this to the attachments if it differs from the id. + // Currently only Lemmy is using the page type. + if (($object_data['object_type'] == 'as:Page') && !empty($object_data['alternate-url']) && !Strings::compareLink($object_data['alternate-url'], $object_data['id'])) { + $object_data['attachments'][] = ['url' => $object_data['alternate-url']]; + $object_data['alternate-url'] = null; + } + $receiverdata = self::getReceivers($object, $object_data['actor'], $object_data['tags'], true); $receivers = $reception_types = []; foreach ($receiverdata as $key => $data) {