diff --git a/src/Model/Post/Media.php b/src/Model/Post/Media.php index c9e3128c4..07cad9cf6 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 38999eb0d..4a9dc352d 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 4504cee4c..a28cc9617 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) {