Improved completion check for AP
This commit is contained in:
parent
56cd98b38b
commit
8c778ca02e
3 changed files with 25 additions and 8 deletions
|
@ -114,6 +114,10 @@ class ActivityPubConversion extends BaseModule
|
||||||
$object_data['thread-completion'] = $activity['thread-completion'];
|
$object_data['thread-completion'] = $activity['thread-completion'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!empty($activity['completion-mode'])) {
|
||||||
|
$object_data['completion-mode'] = $activity['completion-mode'];
|
||||||
|
}
|
||||||
|
|
||||||
$results[] = [
|
$results[] = [
|
||||||
'title' => DI::l10n()->t('Object data'),
|
'title' => DI::l10n()->t('Object data'),
|
||||||
'content' => visible_whitespace(var_export($object_data, true))
|
'content' => visible_whitespace(var_export($object_data, true))
|
||||||
|
|
|
@ -235,7 +235,7 @@ class Processor
|
||||||
|
|
||||||
if (empty($activity['directmessage']) && ($activity['id'] != $activity['reply-to-id']) && !Post::exists(['uri' => $activity['reply-to-id']])) {
|
if (empty($activity['directmessage']) && ($activity['id'] != $activity['reply-to-id']) && !Post::exists(['uri' => $activity['reply-to-id']])) {
|
||||||
Logger::notice('Parent not found. Try to refetch it.', ['parent' => $activity['reply-to-id']]);
|
Logger::notice('Parent not found. Try to refetch it.', ['parent' => $activity['reply-to-id']]);
|
||||||
self::fetchMissingActivity($activity['reply-to-id'], $activity);
|
self::fetchMissingActivity($activity['reply-to-id'], $activity, '', Receiver::COMPLETION_AUTO);
|
||||||
}
|
}
|
||||||
|
|
||||||
$item['diaspora_signed_text'] = $activity['diaspora:comment'] ?? '';
|
$item['diaspora_signed_text'] = $activity['diaspora:comment'] ?? '';
|
||||||
|
@ -600,11 +600,9 @@ class Processor
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($activity['thread-completion'])) {
|
if (in_array($activity['completion-mode'] ?? Receiver::COMPLETION_NONE, [Receiver::COMPLETION_MANUAL, Receiver::COMPLETION_ANNOUCE])) {
|
||||||
// The thread completion mode means that the post is fetched intentionally.
|
// Manual completions and completions caused by reshares are allowed without any further checks.
|
||||||
// This can have several causes, in doubt we keep the message.
|
Logger::debug('Message is in completion mode - accepted', ['mode' => $activity['completion-mode'], 'uri-id' => $item['uri-id'], 'guid' => $item['guid'], 'url' => $item['uri']]);
|
||||||
// This can possibly be improved in the future.
|
|
||||||
Logger::debug('Message is in completion mode - accepted', ['uri-id' => $item['uri-id'], 'guid' => $item['guid'], 'url' => $item['uri']]);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -903,7 +901,7 @@ class Processor
|
||||||
* @return string fetched message URL
|
* @return string fetched message URL
|
||||||
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
||||||
*/
|
*/
|
||||||
public static function fetchMissingActivity(string $url, array $child = [], string $relay_actor = '')
|
public static function fetchMissingActivity(string $url, array $child = [], string $relay_actor = '', int $completion = Receiver::COMPLETION_MANUAL)
|
||||||
{
|
{
|
||||||
if (!empty($child['receiver'])) {
|
if (!empty($child['receiver'])) {
|
||||||
$uid = ActivityPub\Receiver::getFirstUserFromReceivers($child['receiver']);
|
$uid = ActivityPub\Receiver::getFirstUserFromReceivers($child['receiver']);
|
||||||
|
@ -967,10 +965,13 @@ class Processor
|
||||||
|
|
||||||
if (!empty($relay_actor)) {
|
if (!empty($relay_actor)) {
|
||||||
$ldactivity['thread-completion'] = $ldactivity['from-relay'] = Contact::getIdForURL($relay_actor);
|
$ldactivity['thread-completion'] = $ldactivity['from-relay'] = Contact::getIdForURL($relay_actor);
|
||||||
|
$ldactivity['completion-mode'] = Receiver::COMPLETION_RELAY;
|
||||||
} elseif (!empty($child['thread-completion'])) {
|
} elseif (!empty($child['thread-completion'])) {
|
||||||
$ldactivity['thread-completion'] = $child['thread-completion'];
|
$ldactivity['thread-completion'] = $child['thread-completion'];
|
||||||
|
$ldactivity['completion-mode'] = $child['completion-mode'] ?? Receiver::COMPLETION_NONE;
|
||||||
} else {
|
} else {
|
||||||
$ldactivity['thread-completion'] = Contact::getIdForURL($actor);
|
$ldactivity['thread-completion'] = Contact::getIdForURL($actor);
|
||||||
|
$ldactivity['completion-mode'] = $completion;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($child['type'])) {
|
if (!empty($child['type'])) {
|
||||||
|
|
|
@ -68,6 +68,12 @@ class Receiver
|
||||||
const TARGET_ANSWER = 6;
|
const TARGET_ANSWER = 6;
|
||||||
const TARGET_GLOBAL = 7;
|
const TARGET_GLOBAL = 7;
|
||||||
|
|
||||||
|
const COMPLETION_NONE = 0;
|
||||||
|
const COMPLETION_ANNOUCE = 1;
|
||||||
|
const COMPLETION_RELAY = 2;
|
||||||
|
const COMPLETION_MANUAL = 3;
|
||||||
|
const COMPLETION_AUTO = 4;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks incoming message from the inbox
|
* Checks incoming message from the inbox
|
||||||
*
|
*
|
||||||
|
@ -190,7 +196,7 @@ class Receiver
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$id = Processor::fetchMissingActivity($object_id, [], $actor);
|
$id = Processor::fetchMissingActivity($object_id, [], $actor, self::COMPLETION_RELAY);
|
||||||
if (empty($id)) {
|
if (empty($id)) {
|
||||||
Logger::notice('Relayed message had not been fetched', ['id' => $object_id]);
|
Logger::notice('Relayed message had not been fetched', ['id' => $object_id]);
|
||||||
return;
|
return;
|
||||||
|
@ -529,6 +535,11 @@ class Receiver
|
||||||
if (!empty($activity['thread-completion'])) {
|
if (!empty($activity['thread-completion'])) {
|
||||||
$object_data['thread-completion'] = $activity['thread-completion'];
|
$object_data['thread-completion'] = $activity['thread-completion'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!empty($activity['completion-mode'])) {
|
||||||
|
$object_data['completion-mode'] = $activity['completion-mode'];
|
||||||
|
}
|
||||||
|
|
||||||
if (!empty($activity['thread-children-type'])) {
|
if (!empty($activity['thread-children-type'])) {
|
||||||
$object_data['thread-children-type'] = $activity['thread-children-type'];
|
$object_data['thread-children-type'] = $activity['thread-children-type'];
|
||||||
}
|
}
|
||||||
|
@ -555,6 +566,7 @@ class Receiver
|
||||||
case 'as:Announce':
|
case 'as:Announce':
|
||||||
if (in_array($object_data['object_type'], self::CONTENT_TYPES)) {
|
if (in_array($object_data['object_type'], self::CONTENT_TYPES)) {
|
||||||
$object_data['thread-completion'] = Contact::getIdForURL($actor);
|
$object_data['thread-completion'] = Contact::getIdForURL($actor);
|
||||||
|
$object_data['completion-mode'] = self::COMPLETION_ANNOUCE;
|
||||||
|
|
||||||
$item = ActivityPub\Processor::createItem($object_data);
|
$item = ActivityPub\Processor::createItem($object_data);
|
||||||
if (empty($item)) {
|
if (empty($item)) {
|
||||||
|
|
Loading…
Reference in a new issue