}
$http_signer = HTTPSignature::getSigner($body, $header);
- if (empty($http_signer)) {
+ if ($http_signer === false) {
Logger::warning('Invalid HTTP signature, message will be discarded.');
return;
+ } elseif (empty($http_signer)) {
+ Logger::info('Signer is a tombstone. The message will be discarded, the signer account is deleted.');
+ return;
} else {
Logger::info('Valid HTTP signature', ['signer' => $http_signer]);
}
}
if (!empty($actor)) {
- $profile = APContact::getByURL($actor);
+ $profile = APContact::getByURL($actor);
$followers = $profile['followers'] ?? '';
-
- Logger::log('Actor: ' . $actor . ' - Followers: ' . $followers, Logger::DEBUG);
+ $is_forum = ($actor['type'] ?? '') == 'Group';
+ Logger::info('Got actor and followers', ['actor' => $actor, 'followers' => $followers]);
} else {
Logger::info('Empty actor', ['activity' => $activity]);
$followers = '';
+ $is_forum = false;
}
// We have to prevent false follower assumptions upon thread completions
}
// Fetch the receivers for the public and the followers collection
- if (in_array($receiver, [$followers, self::PUBLIC_COLLECTION]) && !empty($actor)) {
+ if ((($receiver == $followers) || (($receiver == self::PUBLIC_COLLECTION) && !$is_forum)) && !empty($actor)) {
$receivers = self::getReceiverForActor($actor, $tags, $receivers, $follower_target);
continue;
}
'image' => $pageImage,
];
break;
- case 'as:Link':
- $attachlist[] = [
- 'type' => str_replace('as:', '', JsonLD::fetchElement($attachment, '@type')),
- 'mediaType' => JsonLD::fetchElement($attachment, 'as:mediaType', '@value'),
- 'name' => JsonLD::fetchElement($attachment, 'as:name', '@value'),
- 'url' => JsonLD::fetchElement($attachment, 'as:href', '@id')
- ];
- break;
case 'as:Image':
$mediaType = JsonLD::fetchElement($attachment, 'as:mediaType', '@value');
$imageFullUrl = JsonLD::fetchElement($attachment, 'as:url', '@id');
'type' => str_replace('as:', '', JsonLD::fetchElement($attachment, '@type')),
'mediaType' => JsonLD::fetchElement($attachment, 'as:mediaType', '@value'),
'name' => JsonLD::fetchElement($attachment, 'as:name', '@value'),
- 'url' => JsonLD::fetchElement($attachment, 'as:url', '@id')
+ 'url' => JsonLD::fetchElement($attachment, 'as:url', '@id'),
+ 'height' => JsonLD::fetchElement($attachment, 'as:height', '@value'),
+ 'width' => JsonLD::fetchElement($attachment, 'as:width', '@value'),
+ 'image' => JsonLD::fetchElement($attachment, 'as:image', '@id')
];
}
}
} elseif ($filetype == 'video') {
$height = (int)JsonLD::fetchElement($url, 'as:height', '@value');
$size = (int)JsonLD::fetchElement($url, 'pt:size', '@value');
-
- // We save bandwidth by using a moderate height (alt least 480 pixel height)
- // Peertube normally uses these heights: 240, 360, 480, 720, 1080
- if (!empty($attachments[$filetype]['height']) &&
- ($height > $attachments[$filetype]['height']) && ($attachments[$filetype]['height'] >= 480)) {
- continue;
- }
-
$attachments[$filetype] = ['type' => $mediatype, 'url' => $href, 'height' => $height, 'size' => $size];
} elseif (in_array($mediatype, ['application/x-bittorrent', 'application/x-bittorrent;x-scheme-handler/magnet'])) {
$height = (int)JsonLD::fetchElement($url, 'as:height', '@value');
$object_data = self::getSource($object, $object_data);
$object_data['start-time'] = JsonLD::fetchElement($object, 'as:startTime', '@value');
$object_data['end-time'] = JsonLD::fetchElement($object, 'as:endTime', '@value');
+ $object_data['adjust'] = JsonLD::fetchElement($object, 'dfrn:adjust', '@value');
$object_data['location'] = $location;
$object_data['latitude'] = JsonLD::fetchElement($object, 'as:location', 'as:latitude', '@type', 'as:Place');
$object_data['latitude'] = JsonLD::fetchElement($object_data, 'latitude', '@value');