Option to store untrusted entries

This commit is contained in:
Michael 2022-07-24 19:31:31 +00:00
parent 51cc1f679f
commit 5ab94ea921
2 changed files with 16 additions and 25 deletions

View file

@ -273,6 +273,8 @@ class Receiver
public static function prepareObjectData(array $activity, int $uid, bool $push, bool &$trust_source): array public static function prepareObjectData(array $activity, int $uid, bool $push, bool &$trust_source): array
{ {
$id = JsonLD::fetchElement($activity, '@id'); $id = JsonLD::fetchElement($activity, '@id');
$object_id = JsonLD::fetchElement($activity, 'as:object', '@id');
if (!empty($id) && !$trust_source) { if (!empty($id) && !$trust_source) {
$fetch_uid = $uid ?: self::getBestUserForActivity($activity); $fetch_uid = $uid ?: self::getBestUserForActivity($activity);
@ -283,7 +285,13 @@ class Receiver
if ($fetched_id == $id) { if ($fetched_id == $id) {
Logger::info('Activity had been fetched successfully', ['id' => $id]); Logger::info('Activity had been fetched successfully', ['id' => $id]);
$trust_source = true; $trust_source = true;
$activity = $object; if ($id != $object_id) {
$activity = $object;
} else {
Logger::info('Fetched data is the object instead of the activity', ['id' => $id]);
unset($object['@context']);
$activity['as:object'] = $object;
}
} else { } else {
Logger::info('Activity id is not equal', ['id' => $id, 'fetched' => $fetched_id]); Logger::info('Activity id is not equal', ['id' => $id, 'fetched' => $fetched_id]);
} }
@ -556,7 +564,9 @@ class Receiver
$object_data['object_activity'] = $activity; $object_data['object_activity'] = $activity;
} }
$object_data = Queue::add($object_data, $type, $uid, $http_signer, $push, $trust_source); if ($trust_source || DI::config()->get('debug', 'ap_inbox_store_untrusted')) {
$object_data = Queue::add($object_data, $type, $uid, $http_signer, $push, $trust_source);
}
if (!$trust_source) { if (!$trust_source) {
Logger::info('Activity trust could not be achieved.', ['id' => $object_data['object_id'], 'type' => $type, 'signer' => $signer, 'actor' => $actor, 'attributedTo' => $attributed_to]); Logger::info('Activity trust could not be achieved.', ['id' => $object_data['object_id'], 'type' => $type, 'signer' => $signer, 'actor' => $actor, 'attributedTo' => $attributed_to]);
@ -1830,29 +1840,6 @@ class Receiver
unset($object_data['receiver'][-1]); unset($object_data['receiver'][-1]);
unset($object_data['reception_type'][-1]); unset($object_data['reception_type'][-1]);
// Common object data:
// Unhandled
// @context, type, actor, signature, mediaType, duration, replies, icon
// Also missing: (Defined in the standard, but currently unused)
// audience, preview, endTime, startTime, image
// Data in Notes:
// Unhandled
// contentMap, announcement_count, announcements, context_id, likes, like_count
// inReplyToStatusId, shares, quoteUrl, statusnetConversationId
// Data in video:
// To-Do?
// category, licence, language, commentsEnabled
// Unhandled
// views, waitTranscoding, state, support, subtitleLanguage
// likes, dislikes, shares, comments
return $object_data; return $object_data;
} }
} }

View file

@ -666,6 +666,10 @@ return [
// Logs every call to /inbox as a JSON file in Friendica's temporary directory // Logs every call to /inbox as a JSON file in Friendica's temporary directory
'ap_inbox_log' => false, 'ap_inbox_log' => false,
// ap_inbox_store_untrusted (Boolean)
// Store untrusted content in the inbox entries
'ap_inbox_store_untrusted' => false,
// total_ap_delivery (Boolean) // total_ap_delivery (Boolean)
// Deliver via AP to every possible receiver and we suppress the delivery to these contacts with other protocols // Deliver via AP to every possible receiver and we suppress the delivery to these contacts with other protocols
'total_ap_delivery' => false, 'total_ap_delivery' => false,